xref: /PHP-8.3/Zend/zend_vm_execute.h (revision f203edd3)
1 /*
2    +----------------------------------------------------------------------+
3    | Zend Engine                                                          |
4    +----------------------------------------------------------------------+
5    | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
6    +----------------------------------------------------------------------+
7    | This source file is subject to version 2.00 of the Zend license,     |
8    | that is bundled with this package in the file LICENSE, and is        |
9    | available through the world-wide-web at the following url:           |
10    | http://www.zend.com/license/2_00.txt.                                |
11    | If you did not receive a copy of the Zend license and are unable to  |
12    | obtain it through the world-wide-web, please send a note to          |
13    | license@zend.com so we can mail you a copy immediately.              |
14    +----------------------------------------------------------------------+
15    | Authors: Andi Gutmans <andi@php.net>                                 |
16    |          Zeev Suraski <zeev@php.net>                                 |
17    |          Dmitry Stogov <dmitry@php.net>                              |
18    +----------------------------------------------------------------------+
19 */
20 
21 #ifdef ZEND_WIN32
22 # pragma warning(disable : 4101)
23 # pragma warning(once : 6235)
24 # pragma warning(once : 6237)
25 # pragma warning(once : 6239)
26 # pragma warning(once : 6240)
27 # pragma warning(once : 6285)
28 # pragma warning(once : 6286)
29 # pragma warning(once : 6326)
30 #endif
31 static user_opcode_handler_t zend_user_opcode_handlers[256] = {
32 	(user_opcode_handler_t)NULL,
33 	(user_opcode_handler_t)NULL,
34 	(user_opcode_handler_t)NULL,
35 	(user_opcode_handler_t)NULL,
36 	(user_opcode_handler_t)NULL,
37 	(user_opcode_handler_t)NULL,
38 	(user_opcode_handler_t)NULL,
39 	(user_opcode_handler_t)NULL,
40 	(user_opcode_handler_t)NULL,
41 	(user_opcode_handler_t)NULL,
42 	(user_opcode_handler_t)NULL,
43 	(user_opcode_handler_t)NULL,
44 	(user_opcode_handler_t)NULL,
45 	(user_opcode_handler_t)NULL,
46 	(user_opcode_handler_t)NULL,
47 	(user_opcode_handler_t)NULL,
48 	(user_opcode_handler_t)NULL,
49 	(user_opcode_handler_t)NULL,
50 	(user_opcode_handler_t)NULL,
51 	(user_opcode_handler_t)NULL,
52 	(user_opcode_handler_t)NULL,
53 	(user_opcode_handler_t)NULL,
54 	(user_opcode_handler_t)NULL,
55 	(user_opcode_handler_t)NULL,
56 	(user_opcode_handler_t)NULL,
57 	(user_opcode_handler_t)NULL,
58 	(user_opcode_handler_t)NULL,
59 	(user_opcode_handler_t)NULL,
60 	(user_opcode_handler_t)NULL,
61 	(user_opcode_handler_t)NULL,
62 	(user_opcode_handler_t)NULL,
63 	(user_opcode_handler_t)NULL,
64 	(user_opcode_handler_t)NULL,
65 	(user_opcode_handler_t)NULL,
66 	(user_opcode_handler_t)NULL,
67 	(user_opcode_handler_t)NULL,
68 	(user_opcode_handler_t)NULL,
69 	(user_opcode_handler_t)NULL,
70 	(user_opcode_handler_t)NULL,
71 	(user_opcode_handler_t)NULL,
72 	(user_opcode_handler_t)NULL,
73 	(user_opcode_handler_t)NULL,
74 	(user_opcode_handler_t)NULL,
75 	(user_opcode_handler_t)NULL,
76 	(user_opcode_handler_t)NULL,
77 	(user_opcode_handler_t)NULL,
78 	(user_opcode_handler_t)NULL,
79 	(user_opcode_handler_t)NULL,
80 	(user_opcode_handler_t)NULL,
81 	(user_opcode_handler_t)NULL,
82 	(user_opcode_handler_t)NULL,
83 	(user_opcode_handler_t)NULL,
84 	(user_opcode_handler_t)NULL,
85 	(user_opcode_handler_t)NULL,
86 	(user_opcode_handler_t)NULL,
87 	(user_opcode_handler_t)NULL,
88 	(user_opcode_handler_t)NULL,
89 	(user_opcode_handler_t)NULL,
90 	(user_opcode_handler_t)NULL,
91 	(user_opcode_handler_t)NULL,
92 	(user_opcode_handler_t)NULL,
93 	(user_opcode_handler_t)NULL,
94 	(user_opcode_handler_t)NULL,
95 	(user_opcode_handler_t)NULL,
96 	(user_opcode_handler_t)NULL,
97 	(user_opcode_handler_t)NULL,
98 	(user_opcode_handler_t)NULL,
99 	(user_opcode_handler_t)NULL,
100 	(user_opcode_handler_t)NULL,
101 	(user_opcode_handler_t)NULL,
102 	(user_opcode_handler_t)NULL,
103 	(user_opcode_handler_t)NULL,
104 	(user_opcode_handler_t)NULL,
105 	(user_opcode_handler_t)NULL,
106 	(user_opcode_handler_t)NULL,
107 	(user_opcode_handler_t)NULL,
108 	(user_opcode_handler_t)NULL,
109 	(user_opcode_handler_t)NULL,
110 	(user_opcode_handler_t)NULL,
111 	(user_opcode_handler_t)NULL,
112 	(user_opcode_handler_t)NULL,
113 	(user_opcode_handler_t)NULL,
114 	(user_opcode_handler_t)NULL,
115 	(user_opcode_handler_t)NULL,
116 	(user_opcode_handler_t)NULL,
117 	(user_opcode_handler_t)NULL,
118 	(user_opcode_handler_t)NULL,
119 	(user_opcode_handler_t)NULL,
120 	(user_opcode_handler_t)NULL,
121 	(user_opcode_handler_t)NULL,
122 	(user_opcode_handler_t)NULL,
123 	(user_opcode_handler_t)NULL,
124 	(user_opcode_handler_t)NULL,
125 	(user_opcode_handler_t)NULL,
126 	(user_opcode_handler_t)NULL,
127 	(user_opcode_handler_t)NULL,
128 	(user_opcode_handler_t)NULL,
129 	(user_opcode_handler_t)NULL,
130 	(user_opcode_handler_t)NULL,
131 	(user_opcode_handler_t)NULL,
132 	(user_opcode_handler_t)NULL,
133 	(user_opcode_handler_t)NULL,
134 	(user_opcode_handler_t)NULL,
135 	(user_opcode_handler_t)NULL,
136 	(user_opcode_handler_t)NULL,
137 	(user_opcode_handler_t)NULL,
138 	(user_opcode_handler_t)NULL,
139 	(user_opcode_handler_t)NULL,
140 	(user_opcode_handler_t)NULL,
141 	(user_opcode_handler_t)NULL,
142 	(user_opcode_handler_t)NULL,
143 	(user_opcode_handler_t)NULL,
144 	(user_opcode_handler_t)NULL,
145 	(user_opcode_handler_t)NULL,
146 	(user_opcode_handler_t)NULL,
147 	(user_opcode_handler_t)NULL,
148 	(user_opcode_handler_t)NULL,
149 	(user_opcode_handler_t)NULL,
150 	(user_opcode_handler_t)NULL,
151 	(user_opcode_handler_t)NULL,
152 	(user_opcode_handler_t)NULL,
153 	(user_opcode_handler_t)NULL,
154 	(user_opcode_handler_t)NULL,
155 	(user_opcode_handler_t)NULL,
156 	(user_opcode_handler_t)NULL,
157 	(user_opcode_handler_t)NULL,
158 	(user_opcode_handler_t)NULL,
159 	(user_opcode_handler_t)NULL,
160 	(user_opcode_handler_t)NULL,
161 	(user_opcode_handler_t)NULL,
162 	(user_opcode_handler_t)NULL,
163 	(user_opcode_handler_t)NULL,
164 	(user_opcode_handler_t)NULL,
165 	(user_opcode_handler_t)NULL,
166 	(user_opcode_handler_t)NULL,
167 	(user_opcode_handler_t)NULL,
168 	(user_opcode_handler_t)NULL,
169 	(user_opcode_handler_t)NULL,
170 	(user_opcode_handler_t)NULL,
171 	(user_opcode_handler_t)NULL,
172 	(user_opcode_handler_t)NULL,
173 	(user_opcode_handler_t)NULL,
174 	(user_opcode_handler_t)NULL,
175 	(user_opcode_handler_t)NULL,
176 	(user_opcode_handler_t)NULL,
177 	(user_opcode_handler_t)NULL,
178 	(user_opcode_handler_t)NULL,
179 	(user_opcode_handler_t)NULL,
180 	(user_opcode_handler_t)NULL,
181 	(user_opcode_handler_t)NULL,
182 	(user_opcode_handler_t)NULL,
183 	(user_opcode_handler_t)NULL,
184 	(user_opcode_handler_t)NULL,
185 	(user_opcode_handler_t)NULL,
186 	(user_opcode_handler_t)NULL,
187 	(user_opcode_handler_t)NULL,
188 	(user_opcode_handler_t)NULL,
189 	(user_opcode_handler_t)NULL,
190 	(user_opcode_handler_t)NULL,
191 	(user_opcode_handler_t)NULL,
192 	(user_opcode_handler_t)NULL,
193 	(user_opcode_handler_t)NULL,
194 	(user_opcode_handler_t)NULL,
195 	(user_opcode_handler_t)NULL,
196 	(user_opcode_handler_t)NULL,
197 	(user_opcode_handler_t)NULL,
198 	(user_opcode_handler_t)NULL,
199 	(user_opcode_handler_t)NULL,
200 	(user_opcode_handler_t)NULL,
201 	(user_opcode_handler_t)NULL,
202 	(user_opcode_handler_t)NULL,
203 	(user_opcode_handler_t)NULL,
204 	(user_opcode_handler_t)NULL,
205 	(user_opcode_handler_t)NULL,
206 	(user_opcode_handler_t)NULL,
207 	(user_opcode_handler_t)NULL,
208 	(user_opcode_handler_t)NULL,
209 	(user_opcode_handler_t)NULL,
210 	(user_opcode_handler_t)NULL,
211 	(user_opcode_handler_t)NULL,
212 	(user_opcode_handler_t)NULL,
213 	(user_opcode_handler_t)NULL,
214 	(user_opcode_handler_t)NULL,
215 	(user_opcode_handler_t)NULL,
216 	(user_opcode_handler_t)NULL,
217 	(user_opcode_handler_t)NULL,
218 	(user_opcode_handler_t)NULL,
219 	(user_opcode_handler_t)NULL,
220 	(user_opcode_handler_t)NULL,
221 	(user_opcode_handler_t)NULL,
222 	(user_opcode_handler_t)NULL,
223 	(user_opcode_handler_t)NULL,
224 	(user_opcode_handler_t)NULL,
225 	(user_opcode_handler_t)NULL,
226 	(user_opcode_handler_t)NULL,
227 	(user_opcode_handler_t)NULL,
228 	(user_opcode_handler_t)NULL,
229 	(user_opcode_handler_t)NULL,
230 	(user_opcode_handler_t)NULL,
231 	(user_opcode_handler_t)NULL,
232 	(user_opcode_handler_t)NULL,
233 	(user_opcode_handler_t)NULL,
234 	(user_opcode_handler_t)NULL,
235 	(user_opcode_handler_t)NULL,
236 	(user_opcode_handler_t)NULL,
237 	(user_opcode_handler_t)NULL,
238 	(user_opcode_handler_t)NULL,
239 	(user_opcode_handler_t)NULL,
240 	(user_opcode_handler_t)NULL,
241 	(user_opcode_handler_t)NULL,
242 	(user_opcode_handler_t)NULL,
243 	(user_opcode_handler_t)NULL,
244 	(user_opcode_handler_t)NULL,
245 	(user_opcode_handler_t)NULL,
246 	(user_opcode_handler_t)NULL,
247 	(user_opcode_handler_t)NULL,
248 	(user_opcode_handler_t)NULL,
249 	(user_opcode_handler_t)NULL,
250 	(user_opcode_handler_t)NULL,
251 	(user_opcode_handler_t)NULL,
252 	(user_opcode_handler_t)NULL,
253 	(user_opcode_handler_t)NULL,
254 	(user_opcode_handler_t)NULL,
255 	(user_opcode_handler_t)NULL,
256 	(user_opcode_handler_t)NULL,
257 	(user_opcode_handler_t)NULL,
258 	(user_opcode_handler_t)NULL,
259 	(user_opcode_handler_t)NULL,
260 	(user_opcode_handler_t)NULL,
261 	(user_opcode_handler_t)NULL,
262 	(user_opcode_handler_t)NULL,
263 	(user_opcode_handler_t)NULL,
264 	(user_opcode_handler_t)NULL,
265 	(user_opcode_handler_t)NULL,
266 	(user_opcode_handler_t)NULL,
267 	(user_opcode_handler_t)NULL,
268 	(user_opcode_handler_t)NULL,
269 	(user_opcode_handler_t)NULL,
270 	(user_opcode_handler_t)NULL,
271 	(user_opcode_handler_t)NULL,
272 	(user_opcode_handler_t)NULL,
273 	(user_opcode_handler_t)NULL,
274 	(user_opcode_handler_t)NULL,
275 	(user_opcode_handler_t)NULL,
276 	(user_opcode_handler_t)NULL,
277 	(user_opcode_handler_t)NULL,
278 	(user_opcode_handler_t)NULL,
279 	(user_opcode_handler_t)NULL,
280 	(user_opcode_handler_t)NULL,
281 	(user_opcode_handler_t)NULL,
282 	(user_opcode_handler_t)NULL,
283 	(user_opcode_handler_t)NULL,
284 	(user_opcode_handler_t)NULL,
285 	(user_opcode_handler_t)NULL,
286 	(user_opcode_handler_t)NULL,
287 	(user_opcode_handler_t)NULL
288 };
289 
290 static uint8_t zend_user_opcodes[256] = {0,
291 	1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,
292 	17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,
293 	33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
294 	49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,
295 	65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
296 	81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,
297 	97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,
298 	113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,
299 	129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,
300 	145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,
301 	161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,
302 	177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,
303 	193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,
304 	209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,
305 	225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,
306 	241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
307 };
308 
309 #define SPEC_START_MASK        0x0000ffff
310 #define SPEC_EXTRA_MASK        0xfffc0000
311 #define SPEC_RULE_OP1          0x00010000
312 #define SPEC_RULE_OP2          0x00020000
313 #define SPEC_RULE_OP_DATA      0x00040000
314 #define SPEC_RULE_RETVAL       0x00080000
315 #define SPEC_RULE_QUICK_ARG    0x00100000
316 #define SPEC_RULE_SMART_BRANCH 0x00200000
317 #define SPEC_RULE_COMMUTATIVE  0x00800000
318 #define SPEC_RULE_ISSET        0x01000000
319 #define SPEC_RULE_OBSERVER     0x02000000
320 
321 static const uint32_t *zend_spec_handlers;
322 static const void * const *zend_opcode_handlers;
323 static int zend_handlers_count;
324 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
325 static const void * const * zend_opcode_handler_funcs;
326 static zend_op hybrid_halt_op;
327 #endif
328 #if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID) || !ZEND_VM_SPEC
329 static const void *zend_vm_get_opcode_handler(uint8_t opcode, const zend_op* op);
330 #endif
331 
332 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
333 static const void *zend_vm_get_opcode_handler_func(uint8_t opcode, const zend_op* op);
334 #else
335 # define zend_vm_get_opcode_handler_func zend_vm_get_opcode_handler
336 #endif
337 
338 #ifndef VM_TRACE
339 # define VM_TRACE(op)
340 #endif
341 #ifndef VM_TRACE_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 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 	zend_refcounted *garbage = NULL;
931 
932 	SAVE_OPLINE();
933 
934 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
935 
936 		UNDEF_RESULT();
937 		HANDLE_EXCEPTION();
938 	}
939 
940 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
941 
942 	if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
943 		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);
944 
945 	} else {
946 		value = zend_assign_to_variable_ex(prop, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
947 	}
948 
949 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
950 		ZVAL_COPY(EX_VAR(opline->result.var), value);
951 	}
952 
953 	if (garbage) {
954 		GC_DTOR_NO_REF(garbage);
955 	}
956 
957 	/* assign_static_prop has two opcodes! */
958 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
959 }
960 
ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)961 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
962 {
963 	USE_OPLINE
964 	zval *prop, *value;
965 	zend_property_info *prop_info;
966 	zend_refcounted *garbage = NULL;
967 
968 	SAVE_OPLINE();
969 
970 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
971 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
972 		UNDEF_RESULT();
973 		HANDLE_EXCEPTION();
974 	}
975 
976 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
977 
978 	if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
979 		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);
980 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
981 	} else {
982 		value = zend_assign_to_variable_ex(prop, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
983 	}
984 
985 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
986 		ZVAL_COPY(EX_VAR(opline->result.var), value);
987 	}
988 
989 	if (garbage) {
990 		GC_DTOR_NO_REF(garbage);
991 	}
992 
993 	/* assign_static_prop has two opcodes! */
994 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
995 }
996 
ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)997 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
998 {
999 	USE_OPLINE
1000 	zval *prop, *value;
1001 	zend_property_info *prop_info;
1002 	zend_refcounted *garbage = NULL;
1003 
1004 	SAVE_OPLINE();
1005 
1006 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
1007 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
1008 		UNDEF_RESULT();
1009 		HANDLE_EXCEPTION();
1010 	}
1011 
1012 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
1013 
1014 	if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
1015 		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);
1016 		zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
1017 	} else {
1018 		value = zend_assign_to_variable_ex(prop, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
1019 	}
1020 
1021 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
1022 		ZVAL_COPY(EX_VAR(opline->result.var), value);
1023 	}
1024 
1025 	if (garbage) {
1026 		GC_DTOR_NO_REF(garbage);
1027 	}
1028 
1029 	/* assign_static_prop has two opcodes! */
1030 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
1031 }
1032 
ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1033 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1034 {
1035 	USE_OPLINE
1036 	zval *prop, *value;
1037 	zend_property_info *prop_info;
1038 	zend_refcounted *garbage = NULL;
1039 
1040 	SAVE_OPLINE();
1041 
1042 	if (zend_fetch_static_property_address(&prop, &prop_info, opline->extended_value, BP_VAR_W, 0 OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
1043 
1044 		UNDEF_RESULT();
1045 		HANDLE_EXCEPTION();
1046 	}
1047 
1048 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
1049 
1050 	if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
1051 		value = zend_assign_to_typed_prop(prop_info, prop, value, &garbage EXECUTE_DATA_CC);
1052 
1053 	} else {
1054 		value = zend_assign_to_variable_ex(prop, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
1055 	}
1056 
1057 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
1058 		ZVAL_COPY(EX_VAR(opline->result.var), value);
1059 	}
1060 
1061 	if (garbage) {
1062 		GC_DTOR_NO_REF(garbage);
1063 	}
1064 
1065 	/* assign_static_prop has two opcodes! */
1066 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
1067 }
1068 
ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1069 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1070 {
1071 	USE_OPLINE
1072 	zval *prop, *value_ptr;
1073 	zend_property_info *prop_info;
1074 	zend_refcounted *garbage = NULL;
1075 
1076 	SAVE_OPLINE();
1077 
1078 	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) {
1079 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
1080 		UNDEF_RESULT();
1081 		HANDLE_EXCEPTION();
1082 	}
1083 
1084 	value_ptr = get_zval_ptr_ptr((opline+1)->op1_type, (opline+1)->op1, BP_VAR_W);
1085 
1086 	if ((opline+1)->op1_type == IS_VAR && (opline->extended_value & ZEND_RETURNS_FUNCTION) && UNEXPECTED(!Z_ISREF_P(value_ptr))) {
1087 		if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(prop, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC))) {
1088 			prop = &EG(uninitialized_zval);
1089 		}
1090 	} else if (UNEXPECTED(ZEND_TYPE_IS_SET(prop_info->type))) {
1091 		prop = zend_assign_to_typed_property_reference(prop_info, prop, value_ptr, &garbage EXECUTE_DATA_CC);
1092 	} else {
1093 		zend_assign_to_variable_reference(prop, value_ptr, &garbage);
1094 	}
1095 
1096 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
1097 		ZVAL_COPY(EX_VAR(opline->result.var), prop);
1098 	}
1099 
1100 	if (garbage) {
1101 		GC_DTOR(garbage);
1102 	}
1103 
1104 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
1105 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
1106 }
1107 
zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)1108 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
1109 {
1110 	zend_execute_data *old_execute_data;
1111 	uint32_t call_info = EX_CALL_INFO();
1112 	SAVE_OPLINE();
1113 
1114 	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)) {
1115 		EG(current_execute_data) = EX(prev_execute_data);
1116 		i_free_compiled_variables(execute_data);
1117 
1118 #ifdef ZEND_PREFER_RELOAD
1119 		call_info = EX_CALL_INFO();
1120 #endif
1121 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
1122 			OBJ_RELEASE(Z_OBJ(execute_data->This));
1123 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
1124 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
1125 		}
1126 		EG(vm_stack_top) = (zval*)execute_data;
1127 		execute_data = EX(prev_execute_data);
1128 
1129 		if (UNEXPECTED(EG(exception) != NULL)) {
1130 			zend_rethrow_exception(execute_data);
1131 			HANDLE_EXCEPTION_LEAVE();
1132 		}
1133 
1134 		LOAD_NEXT_OPLINE();
1135 		ZEND_VM_LEAVE();
1136 	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
1137 		EG(current_execute_data) = EX(prev_execute_data);
1138 		i_free_compiled_variables(execute_data);
1139 
1140 #ifdef ZEND_PREFER_RELOAD
1141 		call_info = EX_CALL_INFO();
1142 #endif
1143 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
1144 			zend_clean_and_cache_symbol_table(EX(symbol_table));
1145 		}
1146 
1147 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1148 			zend_free_extra_named_params(EX(extra_named_params));
1149 		}
1150 
1151 		/* Free extra args before releasing the closure,
1152 		 * as that may free the op_array. */
1153 		zend_vm_stack_free_extra_args_ex(call_info, execute_data);
1154 
1155 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
1156 			OBJ_RELEASE(Z_OBJ(execute_data->This));
1157 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
1158 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
1159 		}
1160 
1161 		old_execute_data = execute_data;
1162 		execute_data = EX(prev_execute_data);
1163 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
1164 
1165 		if (UNEXPECTED(EG(exception) != NULL)) {
1166 			zend_rethrow_exception(execute_data);
1167 			HANDLE_EXCEPTION_LEAVE();
1168 		}
1169 
1170 		LOAD_NEXT_OPLINE();
1171 		ZEND_VM_LEAVE();
1172 	} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
1173 		if (EX(func)->op_array.last_var > 0) {
1174 			zend_detach_symbol_table(execute_data);
1175 			call_info |= ZEND_CALL_NEEDS_REATTACH;
1176 		}
1177 		zend_destroy_static_vars(&EX(func)->op_array);
1178 		destroy_op_array(&EX(func)->op_array);
1179 		efree_size(EX(func), sizeof(zend_op_array));
1180 		old_execute_data = execute_data;
1181 		execute_data = EG(current_execute_data) = EX(prev_execute_data);
1182 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
1183 
1184 		if (call_info & ZEND_CALL_NEEDS_REATTACH) {
1185 			if (EX(func)->op_array.last_var > 0) {
1186 				zend_attach_symbol_table(execute_data);
1187 			} else {
1188 				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_NEEDS_REATTACH);
1189 			}
1190 		}
1191 		if (UNEXPECTED(EG(exception) != NULL)) {
1192 			zend_rethrow_exception(execute_data);
1193 			HANDLE_EXCEPTION_LEAVE();
1194 		}
1195 
1196 		LOAD_NEXT_OPLINE();
1197 		ZEND_VM_LEAVE();
1198 	} else {
1199 		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
1200 			EG(current_execute_data) = EX(prev_execute_data);
1201 			i_free_compiled_variables(execute_data);
1202 #ifdef ZEND_PREFER_RELOAD
1203 			call_info = EX_CALL_INFO();
1204 #endif
1205 			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
1206 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
1207 					zend_clean_and_cache_symbol_table(EX(symbol_table));
1208 				}
1209 				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
1210 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1211 					zend_free_extra_named_params(EX(extra_named_params));
1212 				}
1213 			}
1214 			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
1215 				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
1216 			}
1217 			ZEND_VM_RETURN();
1218 		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
1219 			zend_array *symbol_table = EX(symbol_table);
1220 
1221 			if (EX(func)->op_array.last_var > 0) {
1222 				zend_detach_symbol_table(execute_data);
1223 				call_info |= ZEND_CALL_NEEDS_REATTACH;
1224 			}
1225 			if (call_info & ZEND_CALL_NEEDS_REATTACH) {
1226 				old_execute_data = EX(prev_execute_data);
1227 				while (old_execute_data) {
1228 					if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
1229 						if (old_execute_data->symbol_table == symbol_table) {
1230 							if (old_execute_data->func->op_array.last_var > 0) {
1231 								zend_attach_symbol_table(old_execute_data);
1232 							} else {
1233 								ZEND_ADD_CALL_FLAG(old_execute_data, ZEND_CALL_NEEDS_REATTACH);
1234 							}
1235 						}
1236 						break;
1237 					}
1238 					old_execute_data = old_execute_data->prev_execute_data;
1239 				}
1240 			}
1241 			EG(current_execute_data) = EX(prev_execute_data);
1242 			ZEND_VM_RETURN();
1243 		}
1244 	}
1245 }
1246 
ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1247 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1248 {
1249 	USE_OPLINE
1250 
1251 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
1252 }
1253 
ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1254 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1255 {
1256 	USE_OPLINE
1257 	zend_execute_data *call = EX(call);
1258 	zend_function *fbc = call->func;
1259 	zval *ret;
1260 	zval retval;
1261 
1262 	SAVE_OPLINE();
1263 	EX(call) = call->prev_execute_data;
1264 
1265 	call->prev_execute_data = execute_data;
1266 	EG(current_execute_data) = call;
1267 
1268 #if ZEND_DEBUG
1269 	bool should_throw = zend_internal_call_should_throw(fbc, call);
1270 #endif
1271 
1272 	ret = 0 ? EX_VAR(opline->result.var) : &retval;
1273 	ZVAL_NULL(ret);
1274 
1275 	fbc->internal_function.handler(call, ret);
1276 
1277 #if ZEND_DEBUG
1278 	if (!EG(exception) && call->func) {
1279 		if (should_throw) {
1280 			zend_internal_call_arginfo_violation(call->func);
1281 		}
1282 		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1283 			zend_verify_internal_return_type(call->func, ret));
1284 		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1285 			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1286 		zend_verify_internal_func_info(call->func, ret);
1287 	}
1288 #endif
1289 
1290 	EG(current_execute_data) = execute_data;
1291 	zend_vm_stack_free_args(call);
1292 
1293 	uint32_t call_info = ZEND_CALL_INFO(call);
1294 	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1295 		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1296 			zend_free_extra_named_params(call->extra_named_params);
1297 		}
1298 		zend_vm_stack_free_call_frame_ex(call_info, call);
1299 	} else {
1300 		EG(vm_stack_top) = (zval*)call;
1301 	}
1302 
1303 	if (!0) {
1304 		i_zval_ptr_dtor(ret);
1305 	}
1306 
1307 	if (UNEXPECTED(EG(exception) != NULL)) {
1308 		zend_rethrow_exception(execute_data);
1309 		HANDLE_EXCEPTION();
1310 	}
1311 
1312 	ZEND_VM_SET_OPCODE(opline + 1);
1313 	ZEND_VM_CONTINUE();
1314 }
1315 
ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1316 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1317 {
1318 	USE_OPLINE
1319 	zend_execute_data *call = EX(call);
1320 	zend_function *fbc = call->func;
1321 	zval *ret;
1322 	zval retval;
1323 
1324 	SAVE_OPLINE();
1325 	EX(call) = call->prev_execute_data;
1326 
1327 	call->prev_execute_data = execute_data;
1328 	EG(current_execute_data) = call;
1329 
1330 #if ZEND_DEBUG
1331 	bool should_throw = zend_internal_call_should_throw(fbc, call);
1332 #endif
1333 
1334 	ret = 1 ? EX_VAR(opline->result.var) : &retval;
1335 	ZVAL_NULL(ret);
1336 
1337 	fbc->internal_function.handler(call, ret);
1338 
1339 #if ZEND_DEBUG
1340 	if (!EG(exception) && call->func) {
1341 		if (should_throw) {
1342 			zend_internal_call_arginfo_violation(call->func);
1343 		}
1344 		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1345 			zend_verify_internal_return_type(call->func, ret));
1346 		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1347 			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1348 		zend_verify_internal_func_info(call->func, ret);
1349 	}
1350 #endif
1351 
1352 	EG(current_execute_data) = execute_data;
1353 	zend_vm_stack_free_args(call);
1354 
1355 	uint32_t call_info = ZEND_CALL_INFO(call);
1356 	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1357 		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1358 			zend_free_extra_named_params(call->extra_named_params);
1359 		}
1360 		zend_vm_stack_free_call_frame_ex(call_info, call);
1361 	} else {
1362 		EG(vm_stack_top) = (zval*)call;
1363 	}
1364 
1365 	if (!1) {
1366 		i_zval_ptr_dtor(ret);
1367 	}
1368 
1369 	if (UNEXPECTED(EG(exception) != NULL)) {
1370 		zend_rethrow_exception(execute_data);
1371 		HANDLE_EXCEPTION();
1372 	}
1373 
1374 	ZEND_VM_SET_OPCODE(opline + 1);
1375 	ZEND_VM_CONTINUE();
1376 }
1377 
ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1378 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1379 {
1380 	USE_OPLINE
1381 	zend_execute_data *call = EX(call);
1382 	zend_function *fbc = call->func;
1383 	zval *ret;
1384 	zval retval;
1385 
1386 	SAVE_OPLINE();
1387 	EX(call) = call->prev_execute_data;
1388 
1389 	call->prev_execute_data = execute_data;
1390 	EG(current_execute_data) = call;
1391 
1392 #if ZEND_DEBUG
1393 	bool should_throw = zend_internal_call_should_throw(fbc, call);
1394 #endif
1395 
1396 	ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
1397 	ZVAL_NULL(ret);
1398 
1399 	zend_observer_fcall_begin(call);
1400 	fbc->internal_function.handler(call, ret);
1401 
1402 #if ZEND_DEBUG
1403 	if (!EG(exception) && call->func) {
1404 		if (should_throw) {
1405 			zend_internal_call_arginfo_violation(call->func);
1406 		}
1407 		ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1408 			zend_verify_internal_return_type(call->func, ret));
1409 		ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1410 			? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1411 		zend_verify_internal_func_info(call->func, ret);
1412 	}
1413 #endif
1414 	zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
1415 
1416 	EG(current_execute_data) = execute_data;
1417 	zend_vm_stack_free_args(call);
1418 
1419 	uint32_t call_info = ZEND_CALL_INFO(call);
1420 	if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1421 		if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1422 			zend_free_extra_named_params(call->extra_named_params);
1423 		}
1424 		zend_vm_stack_free_call_frame_ex(call_info, call);
1425 	} else {
1426 		EG(vm_stack_top) = (zval*)call;
1427 	}
1428 
1429 	if (!RETURN_VALUE_USED(opline)) {
1430 		i_zval_ptr_dtor(ret);
1431 	}
1432 
1433 	if (UNEXPECTED(EG(exception) != NULL)) {
1434 		zend_rethrow_exception(execute_data);
1435 		HANDLE_EXCEPTION();
1436 	}
1437 
1438 	ZEND_VM_SET_OPCODE(opline + 1);
1439 	ZEND_VM_CONTINUE();
1440 }
1441 
ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1442 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1443 {
1444 	USE_OPLINE
1445 	zend_execute_data *call = EX(call);
1446 	zend_function *fbc = call->func;
1447 	zval *ret;
1448 
1449 	SAVE_OPLINE();
1450 	EX(call) = call->prev_execute_data;
1451 
1452 	ret = NULL;
1453 	if (0) {
1454 		ret = EX_VAR(opline->result.var);
1455 	}
1456 
1457 	call->prev_execute_data = execute_data;
1458 	execute_data = call;
1459 	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1460 	LOAD_OPLINE_EX();
1461 
1462 
1463 	ZEND_VM_ENTER_EX();
1464 }
1465 
ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1466 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1467 {
1468 	USE_OPLINE
1469 	zend_execute_data *call = EX(call);
1470 	zend_function *fbc = call->func;
1471 	zval *ret;
1472 
1473 	SAVE_OPLINE();
1474 	EX(call) = call->prev_execute_data;
1475 
1476 	ret = NULL;
1477 	if (1) {
1478 		ret = EX_VAR(opline->result.var);
1479 	}
1480 
1481 	call->prev_execute_data = execute_data;
1482 	execute_data = call;
1483 	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1484 	LOAD_OPLINE_EX();
1485 
1486 
1487 	ZEND_VM_ENTER_EX();
1488 }
1489 
ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1490 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1491 {
1492 	USE_OPLINE
1493 	zend_execute_data *call = EX(call);
1494 	zend_function *fbc = call->func;
1495 	zval *ret;
1496 
1497 	SAVE_OPLINE();
1498 	EX(call) = call->prev_execute_data;
1499 
1500 	ret = NULL;
1501 	if (RETURN_VALUE_USED(opline)) {
1502 		ret = EX_VAR(opline->result.var);
1503 	}
1504 
1505 	call->prev_execute_data = execute_data;
1506 	execute_data = call;
1507 	i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1508 	LOAD_OPLINE_EX();
1509 	SAVE_OPLINE();
1510 	zend_observer_fcall_begin(execute_data);
1511 
1512 	ZEND_VM_ENTER_EX();
1513 }
1514 
ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1515 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1516 {
1517 	USE_OPLINE
1518 	zend_execute_data *call = EX(call);
1519 	zend_function *fbc = call->func;
1520 	zval *ret;
1521 
1522 	SAVE_OPLINE();
1523 	EX(call) = call->prev_execute_data;
1524 
1525 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1526 		ret = NULL;
1527 		if (0) {
1528 			ret = EX_VAR(opline->result.var);
1529 		}
1530 
1531 		call->prev_execute_data = execute_data;
1532 		execute_data = call;
1533 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1534 		LOAD_OPLINE_EX();
1535 
1536 
1537 		ZEND_VM_ENTER_EX();
1538 	} else {
1539 		zval retval;
1540 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1541 		if (0) {
1542 			ret = NULL;
1543 		}
1544 
1545 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1546 			zend_deprecated_function(fbc);
1547 			if (UNEXPECTED(EG(exception) != NULL)) {
1548 				UNDEF_RESULT();
1549 				if (!0) {
1550 					ret = &retval;
1551 					ZVAL_UNDEF(ret);
1552 				}
1553 				goto fcall_by_name_end;
1554 			}
1555 		}
1556 
1557 		call->prev_execute_data = execute_data;
1558 		EG(current_execute_data) = call;
1559 
1560 #if ZEND_DEBUG
1561 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1562 #endif
1563 
1564 		ret = 0 ? EX_VAR(opline->result.var) : &retval;
1565 		ZVAL_NULL(ret);
1566 
1567 		fbc->internal_function.handler(call, ret);
1568 
1569 #if ZEND_DEBUG
1570 		if (!EG(exception) && call->func) {
1571 			if (should_throw) {
1572 				zend_internal_call_arginfo_violation(call->func);
1573 			}
1574 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1575 				zend_verify_internal_return_type(call->func, ret));
1576 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1577 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1578 			zend_verify_internal_func_info(call->func, ret);
1579 		}
1580 #endif
1581 
1582 		EG(current_execute_data) = execute_data;
1583 
1584 fcall_by_name_end:
1585 		zend_vm_stack_free_args(call);
1586 
1587 		uint32_t call_info = ZEND_CALL_INFO(call);
1588 		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1589 			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1590 				zend_free_extra_named_params(call->extra_named_params);
1591 			}
1592 			zend_vm_stack_free_call_frame_ex(call_info, call);
1593 		} else {
1594 			EG(vm_stack_top) = (zval*)call;
1595 		}
1596 
1597 		if (!0) {
1598 			i_zval_ptr_dtor(ret);
1599 		}
1600 	}
1601 
1602 	if (UNEXPECTED(EG(exception) != NULL)) {
1603 		zend_rethrow_exception(execute_data);
1604 		HANDLE_EXCEPTION();
1605 	}
1606 	ZEND_VM_SET_OPCODE(opline + 1);
1607 	ZEND_VM_CONTINUE();
1608 }
1609 
ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1610 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1611 {
1612 	USE_OPLINE
1613 	zend_execute_data *call = EX(call);
1614 	zend_function *fbc = call->func;
1615 	zval *ret;
1616 
1617 	SAVE_OPLINE();
1618 	EX(call) = call->prev_execute_data;
1619 
1620 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1621 		ret = NULL;
1622 		if (1) {
1623 			ret = EX_VAR(opline->result.var);
1624 		}
1625 
1626 		call->prev_execute_data = execute_data;
1627 		execute_data = call;
1628 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1629 		LOAD_OPLINE_EX();
1630 
1631 
1632 		ZEND_VM_ENTER_EX();
1633 	} else {
1634 		zval retval;
1635 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1636 		if (0) {
1637 			ret = NULL;
1638 		}
1639 
1640 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1641 			zend_deprecated_function(fbc);
1642 			if (UNEXPECTED(EG(exception) != NULL)) {
1643 				UNDEF_RESULT();
1644 				if (!1) {
1645 					ret = &retval;
1646 					ZVAL_UNDEF(ret);
1647 				}
1648 				goto fcall_by_name_end;
1649 			}
1650 		}
1651 
1652 		call->prev_execute_data = execute_data;
1653 		EG(current_execute_data) = call;
1654 
1655 #if ZEND_DEBUG
1656 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1657 #endif
1658 
1659 		ret = 1 ? EX_VAR(opline->result.var) : &retval;
1660 		ZVAL_NULL(ret);
1661 
1662 		fbc->internal_function.handler(call, ret);
1663 
1664 #if ZEND_DEBUG
1665 		if (!EG(exception) && call->func) {
1666 			if (should_throw) {
1667 				zend_internal_call_arginfo_violation(call->func);
1668 			}
1669 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1670 				zend_verify_internal_return_type(call->func, ret));
1671 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1672 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1673 			zend_verify_internal_func_info(call->func, ret);
1674 		}
1675 #endif
1676 
1677 		EG(current_execute_data) = execute_data;
1678 
1679 fcall_by_name_end:
1680 		zend_vm_stack_free_args(call);
1681 
1682 		uint32_t call_info = ZEND_CALL_INFO(call);
1683 		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1684 			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1685 				zend_free_extra_named_params(call->extra_named_params);
1686 			}
1687 			zend_vm_stack_free_call_frame_ex(call_info, call);
1688 		} else {
1689 			EG(vm_stack_top) = (zval*)call;
1690 		}
1691 
1692 		if (!1) {
1693 			i_zval_ptr_dtor(ret);
1694 		}
1695 	}
1696 
1697 	if (UNEXPECTED(EG(exception) != NULL)) {
1698 		zend_rethrow_exception(execute_data);
1699 		HANDLE_EXCEPTION();
1700 	}
1701 	ZEND_VM_SET_OPCODE(opline + 1);
1702 	ZEND_VM_CONTINUE();
1703 }
1704 
ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1705 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1706 {
1707 	USE_OPLINE
1708 	zend_execute_data *call = EX(call);
1709 	zend_function *fbc = call->func;
1710 	zval *ret;
1711 
1712 	SAVE_OPLINE();
1713 	EX(call) = call->prev_execute_data;
1714 
1715 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1716 		ret = NULL;
1717 		if (RETURN_VALUE_USED(opline)) {
1718 			ret = EX_VAR(opline->result.var);
1719 		}
1720 
1721 		call->prev_execute_data = execute_data;
1722 		execute_data = call;
1723 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
1724 		LOAD_OPLINE_EX();
1725 		SAVE_OPLINE();
1726 		zend_observer_fcall_begin(execute_data);
1727 
1728 		ZEND_VM_ENTER_EX();
1729 	} else {
1730 		zval retval;
1731 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1732 		if (1) {
1733 			ret = NULL;
1734 		}
1735 
1736 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1737 			zend_deprecated_function(fbc);
1738 			if (UNEXPECTED(EG(exception) != NULL)) {
1739 				UNDEF_RESULT();
1740 				if (!RETURN_VALUE_USED(opline)) {
1741 					ret = &retval;
1742 					ZVAL_UNDEF(ret);
1743 				}
1744 				goto fcall_by_name_end;
1745 			}
1746 		}
1747 
1748 		call->prev_execute_data = execute_data;
1749 		EG(current_execute_data) = call;
1750 
1751 #if ZEND_DEBUG
1752 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1753 #endif
1754 
1755 		ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
1756 		ZVAL_NULL(ret);
1757 
1758 		zend_observer_fcall_begin(call);
1759 		fbc->internal_function.handler(call, ret);
1760 
1761 #if ZEND_DEBUG
1762 		if (!EG(exception) && call->func) {
1763 			if (should_throw) {
1764 				zend_internal_call_arginfo_violation(call->func);
1765 			}
1766 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1767 				zend_verify_internal_return_type(call->func, ret));
1768 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1769 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1770 			zend_verify_internal_func_info(call->func, ret);
1771 		}
1772 #endif
1773 		zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
1774 
1775 		EG(current_execute_data) = execute_data;
1776 
1777 fcall_by_name_end:
1778 		zend_vm_stack_free_args(call);
1779 
1780 		uint32_t call_info = ZEND_CALL_INFO(call);
1781 		if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
1782 			if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
1783 				zend_free_extra_named_params(call->extra_named_params);
1784 			}
1785 			zend_vm_stack_free_call_frame_ex(call_info, call);
1786 		} else {
1787 			EG(vm_stack_top) = (zval*)call;
1788 		}
1789 
1790 		if (!RETURN_VALUE_USED(opline)) {
1791 			i_zval_ptr_dtor(ret);
1792 		}
1793 	}
1794 
1795 	if (UNEXPECTED(EG(exception) != NULL)) {
1796 		zend_rethrow_exception(execute_data);
1797 		HANDLE_EXCEPTION();
1798 	}
1799 	ZEND_VM_SET_OPCODE(opline + 1);
1800 	ZEND_VM_CONTINUE();
1801 }
1802 
ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1803 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1804 {
1805 	USE_OPLINE
1806 	zend_execute_data *call = EX(call);
1807 	zend_function *fbc = call->func;
1808 	zval *ret;
1809 
1810 	SAVE_OPLINE();
1811 	EX(call) = call->prev_execute_data;
1812 
1813 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1814 		ret = NULL;
1815 		if (0) {
1816 			ret = EX_VAR(opline->result.var);
1817 		}
1818 
1819 		call->prev_execute_data = execute_data;
1820 		execute_data = call;
1821 		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
1822 
1823 		if (EXPECTED(zend_execute_ex == execute_ex)) {
1824 			LOAD_OPLINE_EX();
1825 
1826 
1827 			ZEND_VM_ENTER_EX();
1828 		} else {
1829 			SAVE_OPLINE_EX();
1830 
1831 			execute_data = EX(prev_execute_data);
1832 			LOAD_OPLINE();
1833 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1834 			zend_execute_ex(call);
1835 		}
1836 	} else {
1837 		zval retval;
1838 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1839 		if (0) {
1840 			ret = NULL;
1841 		}
1842 
1843 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1844 			zend_deprecated_function(fbc);
1845 			if (UNEXPECTED(EG(exception) != NULL)) {
1846 				UNDEF_RESULT();
1847 				if (!0) {
1848 					ret = &retval;
1849 					ZVAL_UNDEF(ret);
1850 				}
1851 				goto fcall_end;
1852 			}
1853 		}
1854 
1855 		call->prev_execute_data = execute_data;
1856 		EG(current_execute_data) = call;
1857 
1858 #if ZEND_DEBUG
1859 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1860 #endif
1861 
1862 		ret = 0 ? EX_VAR(opline->result.var) : &retval;
1863 		ZVAL_NULL(ret);
1864 
1865 		if (!zend_execute_internal) {
1866 			/* saves one function call if zend_execute_internal is not used */
1867 			fbc->internal_function.handler(call, ret);
1868 		} else {
1869 			zend_execute_internal(call, ret);
1870 		}
1871 
1872 #if ZEND_DEBUG
1873 		if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
1874 			if (should_throw) {
1875 				zend_internal_call_arginfo_violation(call->func);
1876 			}
1877 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1878 				zend_verify_internal_return_type(call->func, ret));
1879 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1880 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1881 			zend_verify_internal_func_info(call->func, ret);
1882 		}
1883 #endif
1884 
1885 		EG(current_execute_data) = execute_data;
1886 
1887 fcall_end:
1888 		zend_vm_stack_free_args(call);
1889 		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1890 			zend_free_extra_named_params(call->extra_named_params);
1891 		}
1892 
1893 		if (!0) {
1894 			i_zval_ptr_dtor(ret);
1895 		}
1896 	}
1897 
1898 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
1899 		OBJ_RELEASE(Z_OBJ(call->This));
1900 	}
1901 
1902 	zend_vm_stack_free_call_frame(call);
1903 	if (UNEXPECTED(EG(exception) != NULL)) {
1904 		zend_rethrow_exception(execute_data);
1905 		HANDLE_EXCEPTION();
1906 	}
1907 
1908 	ZEND_VM_SET_OPCODE(opline + 1);
1909 	ZEND_VM_CONTINUE();
1910 }
1911 
ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)1912 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1913 {
1914 	USE_OPLINE
1915 	zend_execute_data *call = EX(call);
1916 	zend_function *fbc = call->func;
1917 	zval *ret;
1918 
1919 	SAVE_OPLINE();
1920 	EX(call) = call->prev_execute_data;
1921 
1922 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
1923 		ret = NULL;
1924 		if (1) {
1925 			ret = EX_VAR(opline->result.var);
1926 		}
1927 
1928 		call->prev_execute_data = execute_data;
1929 		execute_data = call;
1930 		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
1931 
1932 		if (EXPECTED(zend_execute_ex == execute_ex)) {
1933 			LOAD_OPLINE_EX();
1934 
1935 
1936 			ZEND_VM_ENTER_EX();
1937 		} else {
1938 			SAVE_OPLINE_EX();
1939 
1940 			execute_data = EX(prev_execute_data);
1941 			LOAD_OPLINE();
1942 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
1943 			zend_execute_ex(call);
1944 		}
1945 	} else {
1946 		zval retval;
1947 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
1948 		if (0) {
1949 			ret = NULL;
1950 		}
1951 
1952 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
1953 			zend_deprecated_function(fbc);
1954 			if (UNEXPECTED(EG(exception) != NULL)) {
1955 				UNDEF_RESULT();
1956 				if (!1) {
1957 					ret = &retval;
1958 					ZVAL_UNDEF(ret);
1959 				}
1960 				goto fcall_end;
1961 			}
1962 		}
1963 
1964 		call->prev_execute_data = execute_data;
1965 		EG(current_execute_data) = call;
1966 
1967 #if ZEND_DEBUG
1968 		bool should_throw = zend_internal_call_should_throw(fbc, call);
1969 #endif
1970 
1971 		ret = 1 ? EX_VAR(opline->result.var) : &retval;
1972 		ZVAL_NULL(ret);
1973 
1974 		if (!zend_execute_internal) {
1975 			/* saves one function call if zend_execute_internal is not used */
1976 			fbc->internal_function.handler(call, ret);
1977 		} else {
1978 			zend_execute_internal(call, ret);
1979 		}
1980 
1981 #if ZEND_DEBUG
1982 		if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
1983 			if (should_throw) {
1984 				zend_internal_call_arginfo_violation(call->func);
1985 			}
1986 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1987 				zend_verify_internal_return_type(call->func, ret));
1988 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
1989 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
1990 			zend_verify_internal_func_info(call->func, ret);
1991 		}
1992 #endif
1993 
1994 		EG(current_execute_data) = execute_data;
1995 
1996 fcall_end:
1997 		zend_vm_stack_free_args(call);
1998 		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
1999 			zend_free_extra_named_params(call->extra_named_params);
2000 		}
2001 
2002 		if (!1) {
2003 			i_zval_ptr_dtor(ret);
2004 		}
2005 	}
2006 
2007 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
2008 		OBJ_RELEASE(Z_OBJ(call->This));
2009 	}
2010 
2011 	zend_vm_stack_free_call_frame(call);
2012 	if (UNEXPECTED(EG(exception) != NULL)) {
2013 		zend_rethrow_exception(execute_data);
2014 		HANDLE_EXCEPTION();
2015 	}
2016 
2017 	ZEND_VM_SET_OPCODE(opline + 1);
2018 	ZEND_VM_CONTINUE();
2019 }
2020 
ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2021 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2022 {
2023 	USE_OPLINE
2024 	zend_execute_data *call = EX(call);
2025 	zend_function *fbc = call->func;
2026 	zval *ret;
2027 
2028 	SAVE_OPLINE();
2029 	EX(call) = call->prev_execute_data;
2030 
2031 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
2032 		ret = NULL;
2033 		if (RETURN_VALUE_USED(opline)) {
2034 			ret = EX_VAR(opline->result.var);
2035 		}
2036 
2037 		call->prev_execute_data = execute_data;
2038 		execute_data = call;
2039 		i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
2040 
2041 		if (EXPECTED(zend_execute_ex == execute_ex)) {
2042 			LOAD_OPLINE_EX();
2043 			SAVE_OPLINE();
2044 			zend_observer_fcall_begin(execute_data);
2045 			ZEND_VM_ENTER_EX();
2046 		} else {
2047 			SAVE_OPLINE_EX();
2048 			zend_observer_fcall_begin(execute_data);
2049 			execute_data = EX(prev_execute_data);
2050 			LOAD_OPLINE();
2051 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
2052 			zend_execute_ex(call);
2053 		}
2054 	} else {
2055 		zval retval;
2056 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
2057 		if (1) {
2058 			ret = NULL;
2059 		}
2060 
2061 		if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
2062 			zend_deprecated_function(fbc);
2063 			if (UNEXPECTED(EG(exception) != NULL)) {
2064 				UNDEF_RESULT();
2065 				if (!RETURN_VALUE_USED(opline)) {
2066 					ret = &retval;
2067 					ZVAL_UNDEF(ret);
2068 				}
2069 				goto fcall_end;
2070 			}
2071 		}
2072 
2073 		call->prev_execute_data = execute_data;
2074 		EG(current_execute_data) = call;
2075 
2076 #if ZEND_DEBUG
2077 		bool should_throw = zend_internal_call_should_throw(fbc, call);
2078 #endif
2079 
2080 		ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval;
2081 		ZVAL_NULL(ret);
2082 
2083 		zend_observer_fcall_begin(call);
2084 		if (!zend_execute_internal) {
2085 			/* saves one function call if zend_execute_internal is not used */
2086 			fbc->internal_function.handler(call, ret);
2087 		} else {
2088 			zend_execute_internal(call, ret);
2089 		}
2090 
2091 #if ZEND_DEBUG
2092 		if (!EG(exception) && call->func && !(call->func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE)) {
2093 			if (should_throw) {
2094 				zend_internal_call_arginfo_violation(call->func);
2095 			}
2096 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
2097 				zend_verify_internal_return_type(call->func, ret));
2098 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
2099 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
2100 			zend_verify_internal_func_info(call->func, ret);
2101 		}
2102 #endif
2103 		zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
2104 
2105 		EG(current_execute_data) = execute_data;
2106 
2107 fcall_end:
2108 		zend_vm_stack_free_args(call);
2109 		if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
2110 			zend_free_extra_named_params(call->extra_named_params);
2111 		}
2112 
2113 		if (!RETURN_VALUE_USED(opline)) {
2114 			i_zval_ptr_dtor(ret);
2115 		}
2116 	}
2117 
2118 	if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
2119 		OBJ_RELEASE(Z_OBJ(call->This));
2120 	}
2121 
2122 	zend_vm_stack_free_call_frame(call);
2123 	if (UNEXPECTED(EG(exception) != NULL)) {
2124 		zend_rethrow_exception(execute_data);
2125 		HANDLE_EXCEPTION();
2126 	}
2127 
2128 	ZEND_VM_SET_OPCODE(opline + 1);
2129 	ZEND_VM_CONTINUE();
2130 }
2131 
ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2132 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2133 {
2134 	zval *return_value = EX(return_value);
2135 
2136 	if (EXPECTED(return_value)) {
2137 		USE_OPLINE
2138 		zend_generator *generator;
2139 		zend_execute_data *gen_execute_data;
2140 		uint32_t num_args, used_stack, call_info;
2141 
2142 		SAVE_OPLINE();
2143 		object_init_ex(return_value, zend_ce_generator);
2144 
2145 		/*
2146 		 * Normally the execute_data is allocated on the VM stack (because it does
2147 		 * not actually do any allocation and thus is faster). For generators
2148 		 * though this behavior would be suboptimal, because the (rather large)
2149 		 * structure would have to be copied back and forth every time execution is
2150 		 * suspended or resumed. That's why for generators the execution context
2151 		 * is allocated on heap.
2152 		 */
2153 		num_args = EX_NUM_ARGS();
2154 		if (EXPECTED(num_args <= EX(func)->op_array.num_args)) {
2155 			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var + EX(func)->op_array.T) * sizeof(zval);
2156 			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
2157 			used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var) * sizeof(zval);
2158 		} else {
2159 			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);
2160 			gen_execute_data = (zend_execute_data*)emalloc(used_stack);
2161 		}
2162 		memcpy(gen_execute_data, execute_data, used_stack);
2163 
2164 		/* Save execution context in generator object. */
2165 		generator = (zend_generator *) Z_OBJ_P(EX(return_value));
2166 		generator->execute_data = gen_execute_data;
2167 		generator->frozen_call_stack = NULL;
2168 		generator->execute_fake.opline = NULL;
2169 		generator->execute_fake.func = NULL;
2170 		generator->execute_fake.prev_execute_data = NULL;
2171 		ZVAL_OBJ(&generator->execute_fake.This, (zend_object *) generator);
2172 
2173 		gen_execute_data->opline = opline + 1;
2174 		/* EX(return_value) keeps pointer to zend_object (not a real zval) */
2175 		gen_execute_data->return_value = (zval*)generator;
2176 		call_info = Z_TYPE_INFO(EX(This));
2177 		if ((call_info & Z_TYPE_MASK) == IS_OBJECT
2178 		 && (!(call_info & (ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS))
2179 			 /* Bug #72523 */
2180 			|| UNEXPECTED(zend_execute_ex != execute_ex))) {
2181 			ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS);
2182 			Z_ADDREF(gen_execute_data->This);
2183 		}
2184 		ZEND_ADD_CALL_FLAG_EX(call_info, (ZEND_CALL_TOP_FUNCTION | ZEND_CALL_ALLOCATED | ZEND_CALL_GENERATOR));
2185 		Z_TYPE_INFO(gen_execute_data->This) = call_info;
2186 		gen_execute_data->prev_execute_data = NULL;
2187 
2188 		call_info = EX_CALL_INFO();
2189 		EG(current_execute_data) = EX(prev_execute_data);
2190 		if (EXPECTED(!(call_info & (ZEND_CALL_TOP|ZEND_CALL_ALLOCATED)))) {
2191 			EG(vm_stack_top) = (zval*)execute_data;
2192 			execute_data = EX(prev_execute_data);
2193 			LOAD_NEXT_OPLINE();
2194 			ZEND_VM_LEAVE();
2195 		} else if (EXPECTED(!(call_info & ZEND_CALL_TOP))) {
2196 			zend_execute_data *old_execute_data = execute_data;
2197 			execute_data = EX(prev_execute_data);
2198 			zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
2199 			LOAD_NEXT_OPLINE();
2200 			ZEND_VM_LEAVE();
2201 		} else {
2202 			ZEND_VM_RETURN();
2203 		}
2204 	} else {
2205 		ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
2206 	}
2207 }
2208 
zend_cannot_pass_by_ref_helper_SPEC(uint32_t _arg_num,zval * _arg ZEND_OPCODE_HANDLER_ARGS_DC)2209 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)
2210 {
2211 	USE_OPLINE
2212 
2213 	SAVE_OPLINE();
2214 
2215 	zend_cannot_pass_by_reference(_arg_num);
2216 	FREE_OP(opline->op1_type, opline->op1.var);
2217 	ZVAL_UNDEF(_arg);
2218 	HANDLE_EXCEPTION();
2219 }
2220 
ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2221 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2222 {
2223 	USE_OPLINE
2224 	zval *args;
2225 	uint32_t arg_num;
2226 
2227 	SAVE_OPLINE();
2228 	args = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
2229 	arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1;
2230 
2231 send_again:
2232 	if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
2233 		HashTable *ht = Z_ARRVAL_P(args);
2234 		zval *arg, *top;
2235 		zend_string *name;
2236 		bool have_named_params = 0;
2237 
2238 		zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht));
2239 
2240 		// TODO: Speed this up using a flag that specifies whether there are any ref parameters.
2241 		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_REFCOUNT_P(args) > 1) {
2242 			uint32_t tmp_arg_num = arg_num;
2243 			bool separate = 0;
2244 
2245 			/* check if any of arguments are going to be passed by reference */
2246 			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
2247 				if (UNEXPECTED(name)) {
2248 					void *cache_slot[2] = {NULL, NULL};
2249 					tmp_arg_num = zend_get_arg_offset_by_name(
2250 						EX(call)->func, name, cache_slot) + 1;
2251 				}
2252 				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, tmp_arg_num)) {
2253 					separate = 1;
2254 					break;
2255 				}
2256 				tmp_arg_num++;
2257 			} ZEND_HASH_FOREACH_END();
2258 			if (separate) {
2259 				SEPARATE_ARRAY(args);
2260 				ht = Z_ARRVAL_P(args);
2261 			}
2262 		}
2263 
2264 		ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
2265 			if (UNEXPECTED(name)) {
2266 				void *cache_slot[2] = {NULL, NULL};
2267 				have_named_params = 1;
2268 				top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
2269 				if (UNEXPECTED(!top)) {
2270 					FREE_OP(opline->op1_type, opline->op1.var);
2271 					HANDLE_EXCEPTION();
2272 				}
2273 			} else {
2274 				if (have_named_params) {
2275 					zend_throw_error(NULL,
2276 						"Cannot use positional argument after named argument during unpacking");
2277 					FREE_OP(opline->op1_type, opline->op1.var);
2278 					HANDLE_EXCEPTION();
2279 				}
2280 
2281 				top = ZEND_CALL_ARG(EX(call), arg_num);
2282 				ZEND_CALL_NUM_ARGS(EX(call))++;
2283 			}
2284 
2285 			if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2286 				if (Z_ISREF_P(arg)) {
2287 					Z_ADDREF_P(arg);
2288 					ZVAL_REF(top, Z_REF_P(arg));
2289 				} else if (opline->op1_type & (IS_VAR|IS_CV)) {
2290 					/* array is already separated above */
2291 					ZVAL_MAKE_REF_EX(arg, 2);
2292 					ZVAL_REF(top, Z_REF_P(arg));
2293 				} else {
2294 					Z_TRY_ADDREF_P(arg);
2295 					ZVAL_NEW_REF(top, arg);
2296 				}
2297 			} else {
2298 				ZVAL_COPY_DEREF(top, arg);
2299 			}
2300 
2301 			arg_num++;
2302 		} ZEND_HASH_FOREACH_END();
2303 
2304 	} else if (EXPECTED(Z_TYPE_P(args) == IS_OBJECT)) {
2305 		zend_class_entry *ce = Z_OBJCE_P(args);
2306 		zend_object_iterator *iter;
2307 		bool have_named_params = 0;
2308 
2309 		if (!ce || !ce->get_iterator) {
2310 			zend_type_error("Only arrays and Traversables can be unpacked");
2311 		} else {
2312 
2313 			iter = ce->get_iterator(ce, args, 0);
2314 			if (UNEXPECTED(!iter)) {
2315 				FREE_OP(opline->op1_type, opline->op1.var);
2316 				if (!EG(exception)) {
2317 					zend_throw_exception_ex(
2318 						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
2319 					);
2320 				}
2321 				HANDLE_EXCEPTION();
2322 			}
2323 
2324 			const zend_object_iterator_funcs *funcs = iter->funcs;
2325 			if (funcs->rewind) {
2326 				funcs->rewind(iter);
2327 			}
2328 
2329 			for (; funcs->valid(iter) == SUCCESS; ++arg_num) {
2330 				zval *arg, *top;
2331 
2332 				if (UNEXPECTED(EG(exception) != NULL)) {
2333 					break;
2334 				}
2335 
2336 				arg = funcs->get_current_data(iter);
2337 				if (UNEXPECTED(EG(exception) != NULL)) {
2338 					break;
2339 				}
2340 
2341 				zend_string *name = NULL;
2342 				if (funcs->get_current_key) {
2343 					zval key;
2344 					funcs->get_current_key(iter, &key);
2345 					if (UNEXPECTED(EG(exception) != NULL)) {
2346 						break;
2347 					}
2348 
2349 					if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) {
2350 						if (UNEXPECTED(Z_TYPE(key) != IS_STRING)) {
2351 							zend_throw_error(NULL,
2352 								"Keys must be of type int|string during argument unpacking");
2353 							zval_ptr_dtor(&key);
2354 							break;
2355 						}
2356 
2357 						name = Z_STR_P(&key);
2358 					}
2359 				}
2360 
2361 				if (UNEXPECTED(name)) {
2362 					void *cache_slot[2] = {NULL, NULL};
2363 					have_named_params = 1;
2364 					top = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
2365 					if (UNEXPECTED(!top)) {
2366 						zend_string_release(name);
2367 						break;
2368 					}
2369 
2370 					ZVAL_DEREF(arg);
2371 					Z_TRY_ADDREF_P(arg);
2372 
2373 					if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2374 						zend_error(
2375 							E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
2376 							" by unpacking a Traversable, passing by-value instead", arg_num,
2377 							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
2378 							EX(call)->func->common.scope ? "::" : "",
2379 							ZSTR_VAL(EX(call)->func->common.function_name)
2380 						);
2381 						ZVAL_NEW_REF(top, arg);
2382 					} else {
2383 						ZVAL_COPY_VALUE(top, arg);
2384 					}
2385 
2386 					zend_string_release(name);
2387 				} else {
2388 					if (have_named_params) {
2389 						zend_throw_error(NULL,
2390 							"Cannot use positional argument after named argument during unpacking");
2391 						break;
2392 					}
2393 
2394 					zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1);
2395 					top = ZEND_CALL_ARG(EX(call), arg_num);
2396 					ZVAL_DEREF(arg);
2397 					Z_TRY_ADDREF_P(arg);
2398 
2399 					if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2400 						zend_error(
2401 							E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()"
2402 							" by unpacking a Traversable, passing by-value instead", arg_num,
2403 							EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "",
2404 							EX(call)->func->common.scope ? "::" : "",
2405 							ZSTR_VAL(EX(call)->func->common.function_name)
2406 						);
2407 						ZVAL_NEW_REF(top, arg);
2408 					} else {
2409 						ZVAL_COPY_VALUE(top, arg);
2410 					}
2411 
2412 					ZEND_CALL_NUM_ARGS(EX(call))++;
2413 				}
2414 
2415 				funcs->move_forward(iter);
2416 			}
2417 
2418 			zend_iterator_dtor(iter);
2419 		}
2420 	} else if (EXPECTED(Z_ISREF_P(args))) {
2421 		args = Z_REFVAL_P(args);
2422 		goto send_again;
2423 	} else {
2424 		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
2425 			ZVAL_UNDEFINED_OP1();
2426 		}
2427 		zend_type_error("Only arrays and Traversables can be unpacked");
2428 	}
2429 
2430 	FREE_OP(opline->op1_type, opline->op1.var);
2431 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2432 }
2433 
ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2434 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2435 {
2436 	USE_OPLINE
2437 	zval *args;
2438 
2439 	SAVE_OPLINE();
2440 	args = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
2441 
2442 	if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) {
2443 		if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) {
2444 			args = Z_REFVAL_P(args);
2445 			if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) {
2446 				goto send_array;
2447 			}
2448 		}
2449 		zend_type_error("call_user_func_array(): Argument #2 ($args) must be of type array, %s given", zend_zval_value_name(args));
2450 		FREE_OP(opline->op2_type, opline->op2.var);
2451 		FREE_OP(opline->op1_type, opline->op1.var);
2452 		HANDLE_EXCEPTION();
2453 	} else {
2454 		uint32_t arg_num;
2455 		HashTable *ht;
2456 		zval *arg, *param;
2457 
2458 send_array:
2459 		ht = Z_ARRVAL_P(args);
2460 		if (opline->op2_type != IS_UNUSED) {
2461 			/* We don't need to handle named params in this case,
2462 			 * because array_slice() is called with $preserve_keys == false. */
2463 			zval *op2 = get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R);
2464 			uint32_t skip = opline->extended_value;
2465 			uint32_t count = zend_hash_num_elements(ht);
2466 			zend_long len;
2467 			if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
2468 				len = Z_LVAL_P(op2);
2469 			} else if (Z_TYPE_P(op2) == IS_NULL) {
2470 				len = count - skip;
2471 			} else if (EX_USES_STRICT_TYPES()
2472 					|| !zend_parse_arg_long_weak(op2, &len, /* arg_num */ 3)) {
2473 				zend_type_error(
2474 					"array_slice(): Argument #3 ($length) must be of type ?int, %s given",
2475 					zend_zval_value_name(op2));
2476 				FREE_OP(opline->op2_type, opline->op2.var);
2477 				FREE_OP(opline->op1_type, opline->op1.var);
2478 				HANDLE_EXCEPTION();
2479 			}
2480 
2481 			if (len < 0) {
2482 				len += (zend_long)(count - skip);
2483 			}
2484 			if (skip < count && len > 0) {
2485 				if (len > (zend_long)(count - skip)) {
2486 					len = (zend_long)(count - skip);
2487 				}
2488 				zend_vm_stack_extend_call_frame(&EX(call), 0, len);
2489 				arg_num = 1;
2490 				param = ZEND_CALL_ARG(EX(call), 1);
2491 				ZEND_HASH_FOREACH_VAL(ht, arg) {
2492 					bool must_wrap = 0;
2493 					if (skip > 0) {
2494 						skip--;
2495 						continue;
2496 					} else if ((zend_long)(arg_num - 1) >= len) {
2497 						break;
2498 					} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2499 						if (UNEXPECTED(!Z_ISREF_P(arg))) {
2500 							if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2501 								/* By-value send is not allowed -- emit a warning,
2502 								 * but still perform the call. */
2503 								zend_param_must_be_ref(EX(call)->func, arg_num);
2504 								must_wrap = 1;
2505 							}
2506 						}
2507 					} else {
2508 						if (Z_ISREF_P(arg) &&
2509 						    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
2510 							/* don't separate references for __call */
2511 							arg = Z_REFVAL_P(arg);
2512 						}
2513 					}
2514 					if (EXPECTED(!must_wrap)) {
2515 						ZVAL_COPY(param, arg);
2516 					} else {
2517 						Z_TRY_ADDREF_P(arg);
2518 						ZVAL_NEW_REF(param, arg);
2519 					}
2520 					ZEND_CALL_NUM_ARGS(EX(call))++;
2521 					arg_num++;
2522 					param++;
2523 				} ZEND_HASH_FOREACH_END();
2524 			}
2525 			FREE_OP(opline->op2_type, opline->op2.var);
2526 		} else {
2527 			zend_string *name;
2528 			bool have_named_params;
2529 			zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht));
2530 			arg_num = 1;
2531 			param = ZEND_CALL_ARG(EX(call), 1);
2532 			have_named_params = 0;
2533 			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) {
2534 				if (name) {
2535 					void *cache_slot[2] = {NULL, NULL};
2536 					have_named_params = 1;
2537 					param = zend_handle_named_arg(&EX(call), name, &arg_num, cache_slot);
2538 					if (!param) {
2539 						FREE_OP(opline->op1_type, opline->op1.var);
2540 						HANDLE_EXCEPTION();
2541 					}
2542 				} else if (have_named_params) {
2543 					zend_throw_error(NULL,
2544 						"Cannot use positional argument after named argument");
2545 					FREE_OP(opline->op1_type, opline->op1.var);
2546 					HANDLE_EXCEPTION();
2547 				}
2548 
2549 				bool must_wrap = 0;
2550 				if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2551 					if (UNEXPECTED(!Z_ISREF_P(arg))) {
2552 						if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
2553 							/* By-value send is not allowed -- emit a warning,
2554 							 * but still perform the call. */
2555 							zend_param_must_be_ref(EX(call)->func, arg_num);
2556 							must_wrap = 1;
2557 						}
2558 					}
2559 				} else {
2560 					if (Z_ISREF_P(arg) &&
2561 					    !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
2562 						/* don't separate references for __call */
2563 						arg = Z_REFVAL_P(arg);
2564 					}
2565 				}
2566 
2567 				if (EXPECTED(!must_wrap)) {
2568 					ZVAL_COPY(param, arg);
2569 				} else {
2570 					Z_TRY_ADDREF_P(arg);
2571 					ZVAL_NEW_REF(param, arg);
2572 				}
2573 				if (!name) {
2574 					ZEND_CALL_NUM_ARGS(EX(call))++;
2575 					arg_num++;
2576 					param++;
2577 				}
2578 			} ZEND_HASH_FOREACH_END();
2579 		}
2580 	}
2581 	FREE_OP(opline->op1_type, opline->op1.var);
2582 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2583 }
2584 
zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)2585 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
2586 {
2587 #ifdef ZEND_VM_IP_GLOBAL_REG
2588 	USE_OPLINE
2589 
2590 	SAVE_OPLINE();
2591 #endif
2592 	zend_missing_arg_error(execute_data);
2593 	HANDLE_EXCEPTION();
2594 }
2595 
zend_verify_recv_arg_type_helper_SPEC(zval * op_1 ZEND_OPCODE_HANDLER_ARGS_DC)2596 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_verify_recv_arg_type_helper_SPEC(zval *op_1 ZEND_OPCODE_HANDLER_ARGS_DC)
2597 {
2598 	USE_OPLINE
2599 
2600 	SAVE_OPLINE();
2601 	if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), opline->op1.num, op_1, CACHE_ADDR(opline->extended_value)))) {
2602 		HANDLE_EXCEPTION();
2603 	}
2604 
2605 	ZEND_VM_NEXT_OPCODE();
2606 }
2607 
ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2608 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2609 {
2610 	USE_OPLINE
2611 	uint32_t arg_num = opline->op1.num;
2612 
2613 	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
2614 		ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
2615 	}
2616 
2617 	ZEND_VM_NEXT_OPCODE();
2618 }
2619 
zend_case_helper_SPEC(zval * op_1,zval * op_2 ZEND_OPCODE_HANDLER_ARGS_DC)2620 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)
2621 {
2622 	int ret;
2623 	USE_OPLINE
2624 
2625 	SAVE_OPLINE();
2626 	if (UNEXPECTED(Z_TYPE_INFO_P(op_1) == IS_UNDEF)) {
2627 		op_1 = ZVAL_UNDEFINED_OP1();
2628 	}
2629 	if (UNEXPECTED(Z_TYPE_INFO_P(op_2) == IS_UNDEF)) {
2630 		op_2 = ZVAL_UNDEFINED_OP2();
2631 	}
2632 	ret = zend_compare(op_1, op_2);
2633 	if (opline->op2_type & (IS_TMP_VAR|IS_VAR)) {
2634 		zval_ptr_dtor_nogc(op_2);
2635 	}
2636 	ZEND_VM_SMART_BRANCH(ret == 0, 1);
2637 }
2638 
ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2639 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2640 {
2641 	USE_OPLINE
2642 	zval *op1;
2643 	HashTable *result_ht;
2644 
2645 	SAVE_OPLINE();
2646 	op1 = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
2647 	result_ht = Z_ARRVAL_P(EX_VAR(opline->result.var));
2648 
2649 add_unpack_again:
2650 	if (EXPECTED(Z_TYPE_P(op1) == IS_ARRAY)) {
2651 		HashTable *ht = Z_ARRVAL_P(op1);
2652 		zval *val;
2653 
2654 		if (HT_IS_PACKED(ht) && (zend_hash_num_elements(result_ht) == 0 || HT_IS_PACKED(result_ht))) {
2655 			zend_hash_extend(result_ht, result_ht->nNumUsed + zend_hash_num_elements(ht), 1);
2656 			ZEND_HASH_FILL_PACKED(result_ht) {
2657 				ZEND_HASH_PACKED_FOREACH_VAL(ht, val) {
2658 					if (UNEXPECTED(Z_ISREF_P(val)) &&
2659 						UNEXPECTED(Z_REFCOUNT_P(val) == 1)) {
2660 						val = Z_REFVAL_P(val);
2661 					}
2662 					Z_TRY_ADDREF_P(val);
2663 					ZEND_HASH_FILL_ADD(val);
2664 				} ZEND_HASH_FOREACH_END();
2665 			} ZEND_HASH_FILL_END();
2666 		} else {
2667 			zend_string *key;
2668 
2669 			ZEND_HASH_FOREACH_STR_KEY_VAL(ht, key, val) {
2670 				if (UNEXPECTED(Z_ISREF_P(val)) &&
2671 					UNEXPECTED(Z_REFCOUNT_P(val) == 1)) {
2672 					val = Z_REFVAL_P(val);
2673 				}
2674 				Z_TRY_ADDREF_P(val);
2675 				if (key) {
2676 					zend_hash_update(result_ht, key, val);
2677 				} else {
2678 					if (!zend_hash_next_index_insert(result_ht, val)) {
2679 						zend_cannot_add_element();
2680 						zval_ptr_dtor_nogc(val);
2681 						break;
2682 					}
2683 				}
2684 			} ZEND_HASH_FOREACH_END();
2685 		}
2686 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_OBJECT)) {
2687 		zend_class_entry *ce = Z_OBJCE_P(op1);
2688 		zend_object_iterator *iter;
2689 
2690 		if (!ce || !ce->get_iterator) {
2691 			zend_type_error("Only arrays and Traversables can be unpacked");
2692 		} else {
2693 			iter = ce->get_iterator(ce, op1, 0);
2694 			if (UNEXPECTED(!iter)) {
2695 				FREE_OP(opline->op1_type, opline->op1.var);
2696 				if (!EG(exception)) {
2697 					zend_throw_exception_ex(
2698 						NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)
2699 					);
2700 				}
2701 				HANDLE_EXCEPTION();
2702 			}
2703 
2704 			const zend_object_iterator_funcs *funcs = iter->funcs;
2705 			if (funcs->rewind) {
2706 				funcs->rewind(iter);
2707 			}
2708 
2709 			for (; funcs->valid(iter) == SUCCESS; ) {
2710 				zval *val;
2711 
2712 				if (UNEXPECTED(EG(exception) != NULL)) {
2713 					break;
2714 				}
2715 
2716 				val = funcs->get_current_data(iter);
2717 				if (UNEXPECTED(EG(exception) != NULL)) {
2718 					break;
2719 				}
2720 
2721 				zval key;
2722 				if (funcs->get_current_key) {
2723 					funcs->get_current_key(iter, &key);
2724 					if (UNEXPECTED(EG(exception) != NULL)) {
2725 						break;
2726 					}
2727 
2728 					if (UNEXPECTED(Z_TYPE(key) != IS_LONG && Z_TYPE(key) != IS_STRING)) {
2729 						zend_throw_error(NULL,
2730 							"Keys must be of type int|string during array unpacking");
2731 						zval_ptr_dtor(&key);
2732 						break;
2733 					}
2734 				} else {
2735 					ZVAL_UNDEF(&key);
2736 				}
2737 
2738 				ZVAL_DEREF(val);
2739 				Z_TRY_ADDREF_P(val);
2740 
2741 				zend_ulong num_key;
2742 				if (Z_TYPE(key) == IS_STRING && !ZEND_HANDLE_NUMERIC(Z_STR(key), num_key)) {
2743 					zend_hash_update(result_ht, Z_STR(key), val);
2744 					zval_ptr_dtor_str(&key);
2745 				} else {
2746 					zval_ptr_dtor(&key);
2747 					if (!zend_hash_next_index_insert(result_ht, val)) {
2748 						zend_cannot_add_element();
2749 						zval_ptr_dtor_nogc(val);
2750 						break;
2751 					}
2752 				}
2753 
2754 				funcs->move_forward(iter);
2755 				if (UNEXPECTED(EG(exception))) {
2756 					break;
2757 				}
2758 			}
2759 
2760 			zend_iterator_dtor(iter);
2761 		}
2762 	} else if (EXPECTED(Z_ISREF_P(op1))) {
2763 		op1 = Z_REFVAL_P(op1);
2764 		goto add_unpack_again;
2765 	} else {
2766 		zend_throw_error(NULL, "Only arrays and Traversables can be unpacked");
2767 	}
2768 
2769 	FREE_OP(opline->op1_type, opline->op1.var);
2770 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2771 }
2772 
ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2773 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2774 {
2775 	USE_OPLINE
2776 	zval *varname;
2777 	zend_string *name, *tmp_name = NULL;
2778 	zend_class_entry *ce;
2779 
2780 	SAVE_OPLINE();
2781 
2782 	if (opline->op2_type == IS_CONST) {
2783 		ce = CACHED_PTR(opline->extended_value);
2784 		if (UNEXPECTED(ce == NULL)) {
2785 			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);
2786 			if (UNEXPECTED(ce == NULL)) {
2787 				FREE_OP(opline->op1_type, opline->op1.var);
2788 				HANDLE_EXCEPTION();
2789 			}
2790 			/*CACHE_PTR(opline->extended_value, ce);*/
2791 		}
2792 	} else if (opline->op2_type == IS_UNUSED) {
2793 		ce = zend_fetch_class(NULL, opline->op2.num);
2794 		if (UNEXPECTED(ce == NULL)) {
2795 			FREE_OP(opline->op1_type, opline->op1.var);
2796 			HANDLE_EXCEPTION();
2797 		}
2798 	} else {
2799 		ce = Z_CE_P(EX_VAR(opline->op2.var));
2800 	}
2801 
2802 	varname = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
2803 	if (opline->op1_type == IS_CONST) {
2804 		name = Z_STR_P(varname);
2805 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
2806 		name = Z_STR_P(varname);
2807 	} else {
2808 		if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
2809 			varname = ZVAL_UNDEFINED_OP1();
2810 		}
2811 		name = zval_try_get_tmp_string(varname, &tmp_name);
2812 		if (UNEXPECTED(!name)) {
2813 			FREE_OP(opline->op1_type, opline->op1.var);
2814 			HANDLE_EXCEPTION();
2815 		}
2816 	}
2817 
2818 	zend_std_unset_static_property(ce, name);
2819 
2820 	zend_tmp_string_release(tmp_name);
2821 	FREE_OP(opline->op1_type, opline->op1.var);
2822 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2823 }
2824 
zend_fe_fetch_object_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)2825 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fe_fetch_object_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
2826 {
2827 	USE_OPLINE
2828 	zval *array;
2829 	zval *value;
2830 	uint32_t value_type;
2831 	HashTable *fe_ht;
2832 	HashPosition pos;
2833 	Bucket *p;
2834 	zend_object_iterator *iter;
2835 
2836 	array = EX_VAR(opline->op1.var);
2837 	SAVE_OPLINE();
2838 
2839 	ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT);
2840 	if ((iter = zend_iterator_unwrap(array)) == NULL) {
2841 		/* plain object */
2842 
2843 		fe_ht = Z_OBJPROP_P(array);
2844 		pos = zend_hash_iterator_pos(Z_FE_ITER_P(array), fe_ht);
2845 		p = fe_ht->arData + pos;
2846 		while (1) {
2847 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
2848 				/* reached end of iteration */
2849 				goto fe_fetch_r_exit;
2850 			}
2851 			pos++;
2852 			value = &p->val;
2853 			value_type = Z_TYPE_INFO_P(value);
2854 			if (EXPECTED(value_type != IS_UNDEF)) {
2855 				if (UNEXPECTED(value_type == IS_INDIRECT)) {
2856 					value = Z_INDIRECT_P(value);
2857 					value_type = Z_TYPE_INFO_P(value);
2858 					if (EXPECTED(value_type != IS_UNDEF)
2859 					 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
2860 						break;
2861 					}
2862 				} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
2863 						|| !p->key
2864 						|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
2865 					break;
2866 				}
2867 			}
2868 			p++;
2869 		}
2870 		EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos;
2871 		if (RETURN_VALUE_USED(opline)) {
2872 			if (UNEXPECTED(!p->key)) {
2873 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
2874 			} else if (ZSTR_VAL(p->key)[0]) {
2875 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
2876 			} else {
2877 				const char *class_name, *prop_name;
2878 				size_t prop_name_len;
2879 				zend_unmangle_property_name_ex(
2880 					p->key, &class_name, &prop_name, &prop_name_len);
2881 				ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
2882 			}
2883 		}
2884 	} else {
2885 		const zend_object_iterator_funcs *funcs = iter->funcs;
2886 		if (EXPECTED(++iter->index > 0)) {
2887 			/* This could cause an endless loop if index becomes zero again.
2888 			 * In case that ever happens we need an additional flag. */
2889 			funcs->move_forward(iter);
2890 			if (UNEXPECTED(EG(exception) != NULL)) {
2891 				UNDEF_RESULT();
2892 				HANDLE_EXCEPTION();
2893 			}
2894 			if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
2895 				/* reached end of iteration */
2896 				if (UNEXPECTED(EG(exception) != NULL)) {
2897 					UNDEF_RESULT();
2898 					HANDLE_EXCEPTION();
2899 				}
2900 fe_fetch_r_exit:
2901 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
2902 				ZEND_VM_CONTINUE();
2903 			}
2904 		}
2905 		value = funcs->get_current_data(iter);
2906 		if (UNEXPECTED(EG(exception) != NULL)) {
2907 			UNDEF_RESULT();
2908 			HANDLE_EXCEPTION();
2909 		}
2910 		if (!value) {
2911 			/* failure in get_current_data */
2912 			goto fe_fetch_r_exit;
2913 		}
2914 		if (RETURN_VALUE_USED(opline)) {
2915 			if (funcs->get_current_key) {
2916 				funcs->get_current_key(iter, EX_VAR(opline->result.var));
2917 				if (UNEXPECTED(EG(exception) != NULL)) {
2918 					UNDEF_RESULT();
2919 					HANDLE_EXCEPTION();
2920 				}
2921 			} else {
2922 				ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
2923 			}
2924 		}
2925 		value_type = Z_TYPE_INFO_P(value);
2926 	}
2927 
2928 	if (EXPECTED(opline->op2_type == IS_CV)) {
2929 		zval *variable_ptr = EX_VAR(opline->op2.var);
2930 		zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
2931 	} else {
2932 		zval *res = EX_VAR(opline->op2.var);
2933 		zend_refcounted *gc = Z_COUNTED_P(value);
2934 
2935 		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
2936 		if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
2937 			GC_ADDREF(gc);
2938 		}
2939 	}
2940 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
2941 }
2942 
ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2943 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2944 {
2945 	USE_OPLINE
2946 	zval *value;
2947 	zend_result fetch_result;
2948 	bool result;
2949 
2950 	SAVE_OPLINE();
2951 
2952 	fetch_result = zend_fetch_static_property_address(&value, NULL, opline->extended_value & ~ZEND_ISEMPTY, BP_VAR_IS, 0 OPLINE_CC EXECUTE_DATA_CC);
2953 
2954 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
2955 		result = fetch_result == SUCCESS && Z_TYPE_P(value) > IS_NULL &&
2956 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
2957 	} else {
2958 		result = fetch_result != SUCCESS || !i_zend_is_true(value);
2959 	}
2960 
2961 	ZEND_VM_SMART_BRANCH(result, 1);
2962 }
2963 
ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2964 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2965 {
2966 	USE_OPLINE
2967 
2968 	SAVE_OPLINE();
2969 	if (opline->op1_type != IS_UNUSED) {
2970 		zval *ptr = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
2971 
2972 		do {
2973 			if (Z_TYPE_P(ptr) == IS_LONG) {
2974 				EG(exit_status) = Z_LVAL_P(ptr);
2975 			} else {
2976 				if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) {
2977 					ptr = Z_REFVAL_P(ptr);
2978 					if (Z_TYPE_P(ptr) == IS_LONG) {
2979 						EG(exit_status) = Z_LVAL_P(ptr);
2980 						break;
2981 					}
2982 				}
2983 				zend_print_zval(ptr, 0);
2984 			}
2985 		} while (0);
2986 		FREE_OP(opline->op1_type, opline->op1.var);
2987 	}
2988 
2989 	if (!EG(exception)) {
2990 		zend_throw_unwind_exit();
2991 	}
2992 	HANDLE_EXCEPTION();
2993 }
2994 
ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)2995 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2996 {
2997 	USE_OPLINE
2998 
2999 	ZVAL_LONG(EX_VAR(opline->result.var), EG(error_reporting));
3000 
3001 	if (!E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))) {
3002 		do {
3003 			/* Do not silence fatal errors */
3004 			EG(error_reporting) &= E_FATAL_ERRORS;
3005 			if (!EG(error_reporting_ini_entry)) {
3006 				zval *zv = zend_hash_find_known_hash(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING));
3007 				if (zv) {
3008 					EG(error_reporting_ini_entry) = (zend_ini_entry *)Z_PTR_P(zv);
3009 				} else {
3010 					break;
3011 				}
3012 			}
3013 			if (!EG(error_reporting_ini_entry)->modified) {
3014 				if (!EG(modified_ini_directives)) {
3015 					ALLOC_HASHTABLE(EG(modified_ini_directives));
3016 					zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0);
3017 				}
3018 				if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), EG(error_reporting_ini_entry)) != NULL)) {
3019 					EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value;
3020 					EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable;
3021 					EG(error_reporting_ini_entry)->modified = 1;
3022 				}
3023 			}
3024 		} while (0);
3025 	}
3026 	ZEND_VM_NEXT_OPCODE();
3027 }
3028 
ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3029 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3030 {
3031 	USE_OPLINE
3032 
3033 	if (!EG(no_extensions)) {
3034 		SAVE_OPLINE();
3035 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data);
3036 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3037 	}
3038 	ZEND_VM_NEXT_OPCODE();
3039 }
3040 
ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3041 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3042 {
3043 	USE_OPLINE
3044 
3045 	if (!EG(no_extensions)) {
3046 		SAVE_OPLINE();
3047 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data);
3048 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3049 	}
3050 	ZEND_VM_NEXT_OPCODE();
3051 }
3052 
ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3053 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3054 {
3055 	USE_OPLINE
3056 
3057 	if (!EG(no_extensions)) {
3058 		SAVE_OPLINE();
3059 		zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data);
3060 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3061 	}
3062 	ZEND_VM_NEXT_OPCODE();
3063 }
3064 
ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3065 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3066 {
3067 	zval *zv;
3068 	zend_class_entry *ce;
3069 	USE_OPLINE
3070 
3071 	ce = CACHED_PTR(opline->extended_value);
3072 	if (UNEXPECTED(ce == NULL)) {
3073 		zend_string *rtd_key = Z_STR_P(RT_CONSTANT(opline, opline->op1));
3074 		zv = zend_hash_find_known_hash(EG(class_table), rtd_key);
3075 		ZEND_ASSERT(zv != NULL);
3076 		ce = Z_CE_P(zv);
3077 		if (!(ce->ce_flags & ZEND_ACC_LINKED)) {
3078 			SAVE_OPLINE();
3079 			ce = zend_do_link_class(ce, (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL, rtd_key);
3080 			if (!ce) {
3081 				HANDLE_EXCEPTION();
3082 			}
3083 		}
3084 		CACHE_PTR(opline->extended_value, ce);
3085 	}
3086 	Z_CE_P(EX_VAR(opline->result.var)) = ce;
3087 	ZEND_VM_NEXT_OPCODE();
3088 }
3089 
ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3090 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3091 {
3092 	zend_function *func;
3093 	USE_OPLINE
3094 
3095 	SAVE_OPLINE();
3096 	func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
3097 	do_bind_function(func, RT_CONSTANT(opline, opline->op1));
3098 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3099 }
3100 
ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3101 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3102 {
3103 	USE_OPLINE
3104 
3105 	if ((uint32_t)++EG(ticks_count) >= opline->extended_value) {
3106 		EG(ticks_count) = 0;
3107 		if (zend_ticks_function) {
3108 			SAVE_OPLINE();
3109 			zend_fiber_switch_block();
3110 			zend_ticks_function(opline->extended_value);
3111 			zend_fiber_switch_unblock();
3112 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3113 		}
3114 	}
3115 	ZEND_VM_NEXT_OPCODE();
3116 }
3117 
ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3118 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3119 {
3120 	USE_OPLINE
3121 
3122 	ZEND_VM_NEXT_OPCODE();
3123 }
3124 
ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3125 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3126 {
3127 	USE_OPLINE
3128 
3129 	ZEND_VM_NEXT_OPCODE();
3130 }
3131 
zend_dispatch_try_catch_finally_helper_SPEC(uint32_t try_catch_offset,uint32_t op_num ZEND_OPCODE_HANDLER_ARGS_DC)3132 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)
3133 {
3134 	/* May be NULL during generator closing (only finally blocks are executed) */
3135 	zend_object *ex = EG(exception);
3136 
3137 	/* Walk try/catch/finally structures upwards, performing the necessary actions */
3138 	for (; try_catch_offset != (uint32_t) -1; try_catch_offset--) {
3139 		zend_try_catch_element *try_catch =
3140 			&EX(func)->op_array.try_catch_array[try_catch_offset];
3141 
3142 		if (op_num < try_catch->catch_op && ex) {
3143 			/* Go to catch block */
3144 			cleanup_live_vars(execute_data, op_num, try_catch->catch_op);
3145 			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->catch_op], 0);
3146 
3147 		} else if (op_num < try_catch->finally_op) {
3148 			if (ex && zend_is_unwind_exit(ex)) {
3149 				/* Don't execute finally blocks on exit (for now) */
3150 				continue;
3151 			}
3152 
3153 			/* Go to finally block */
3154 			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
3155 			cleanup_live_vars(execute_data, op_num, try_catch->finally_op);
3156 			Z_OBJ_P(fast_call) = EG(exception);
3157 			EG(exception) = NULL;
3158 			Z_OPLINE_NUM_P(fast_call) = (uint32_t)-1;
3159 			ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->finally_op], 0);
3160 
3161 		} else if (op_num < try_catch->finally_end) {
3162 			zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var);
3163 
3164 			/* cleanup incomplete RETURN statement */
3165 			if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
3166 			 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
3167 				zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
3168 
3169 				zval_ptr_dtor(return_value);
3170 			}
3171 
3172 			/* Chain potential exception from wrapping finally block */
3173 			if (Z_OBJ_P(fast_call)) {
3174 				if (ex) {
3175 					if (zend_is_unwind_exit(ex) || zend_is_graceful_exit(ex)) {
3176 						/* discard the previously thrown exception */
3177 						OBJ_RELEASE(Z_OBJ_P(fast_call));
3178 					} else {
3179 						zend_exception_set_previous(ex, Z_OBJ_P(fast_call));
3180 					}
3181 				} else {
3182 					ex = EG(exception) = Z_OBJ_P(fast_call);
3183 				}
3184 			}
3185 		}
3186 	}
3187 
3188 	/* Uncaught exception */
3189 	if (zend_observer_fcall_op_array_extension != -1) {
3190 		zend_observer_fcall_end(execute_data, NULL);
3191 	}
3192 	cleanup_live_vars(execute_data, op_num, 0);
3193 	if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
3194 		zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
3195 		EG(current_execute_data) = EX(prev_execute_data);
3196 		zend_generator_close(generator, 1);
3197 		ZEND_VM_RETURN();
3198 	} else {
3199 		/* We didn't execute RETURN, and have to initialize return_value */
3200 		if (EX(return_value)) {
3201 			ZVAL_UNDEF(EX(return_value));
3202 		}
3203 		ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3204 	}
3205 }
3206 
ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3207 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3208 {
3209 	const zend_op *throw_op = EG(opline_before_exception);
3210 
3211 	/* Exception was thrown before executing any op */
3212 	if (UNEXPECTED(!throw_op)) {
3213 		ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(-1, 0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
3214 	}
3215 
3216 	uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes;
3217 	int i, current_try_catch_offset = -1;
3218 
3219 	if ((throw_op->opcode == ZEND_FREE || throw_op->opcode == ZEND_FE_FREE)
3220 		&& throw_op->extended_value & ZEND_FREE_ON_RETURN) {
3221 		/* exceptions thrown because of loop var destruction on return/break/...
3222 		 * are logically thrown at the end of the foreach loop, so adjust the
3223 		 * throw_op_num.
3224 		 */
3225 		const zend_live_range *range = find_live_range(
3226 			&EX(func)->op_array, throw_op_num, throw_op->op1.var);
3227 		/* free op1 of the corresponding RETURN */
3228 		for (i = throw_op_num; i < range->end; i++) {
3229 			if (EX(func)->op_array.opcodes[i].opcode == ZEND_FREE
3230 			 || EX(func)->op_array.opcodes[i].opcode == ZEND_FE_FREE) {
3231 				/* pass */
3232 			} else {
3233 				if (EX(func)->op_array.opcodes[i].opcode == ZEND_RETURN
3234 				 && (EX(func)->op_array.opcodes[i].op1_type & (IS_VAR|IS_TMP_VAR))) {
3235 					zval_ptr_dtor(EX_VAR(EX(func)->op_array.opcodes[i].op1.var));
3236 				}
3237 				break;
3238 			}
3239 		}
3240 		throw_op_num = range->end;
3241 	}
3242 
3243 	/* Find the innermost try/catch/finally the exception was thrown in */
3244 	for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
3245 		zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i];
3246 		if (try_catch->try_op > throw_op_num) {
3247 			/* further blocks will not be relevant... */
3248 			break;
3249 		}
3250 		if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) {
3251 			current_try_catch_offset = i;
3252 		}
3253 	}
3254 
3255 	cleanup_unfinished_calls(execute_data, throw_op_num);
3256 
3257 	if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
3258 		switch (throw_op->opcode) {
3259 			case ZEND_ADD_ARRAY_ELEMENT:
3260 			case ZEND_ADD_ARRAY_UNPACK:
3261 			case ZEND_ROPE_INIT:
3262 			case ZEND_ROPE_ADD:
3263 				break; /* exception while building structures, live range handling will free those */
3264 
3265 			case ZEND_FETCH_CLASS:
3266 			case ZEND_DECLARE_ANON_CLASS:
3267 				break; /* return value is zend_class_entry pointer */
3268 
3269 			default:
3270 				/* smart branch opcodes may not initialize result */
3271 				if (!zend_is_smart_branch(throw_op)) {
3272 					zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var));
3273 				}
3274 		}
3275 	}
3276 
3277 	ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
3278 }
3279 
ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3280 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3281 {
3282 	USE_OPLINE
3283 	int ret;
3284 
3285 	SAVE_OPLINE();
3286 	ret = zend_user_opcode_handlers[opline->opcode](execute_data);
3287 	opline = EX(opline);
3288 
3289 	switch (ret) {
3290 		case ZEND_USER_OPCODE_CONTINUE:
3291 			ZEND_VM_CONTINUE();
3292 		case ZEND_USER_OPCODE_RETURN:
3293 			if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) {
3294 				zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
3295 				EG(current_execute_data) = EX(prev_execute_data);
3296 				zend_generator_close(generator, 1);
3297 				ZEND_VM_RETURN();
3298 			} else {
3299 				ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3300 			}
3301 		case ZEND_USER_OPCODE_ENTER:
3302 			ZEND_VM_ENTER();
3303 		case ZEND_USER_OPCODE_LEAVE:
3304 			ZEND_VM_LEAVE();
3305 		case ZEND_USER_OPCODE_DISPATCH:
3306 			ZEND_VM_DISPATCH(opline->opcode, opline);
3307 		default:
3308 			ZEND_VM_DISPATCH((uint8_t)(ret & 0xff), opline);
3309 	}
3310 }
3311 
zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)3312 static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
3313 {
3314 	USE_OPLINE
3315 
3316 	SAVE_OPLINE();
3317 	zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator");
3318 	FREE_OP(opline->op2_type, opline->op2.var);
3319 	FREE_OP(opline->op1_type, opline->op1.var);
3320 	UNDEF_RESULT();
3321 	HANDLE_EXCEPTION();
3322 }
3323 
ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3324 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3325 {
3326 	USE_OPLINE
3327 	zval *fast_call = EX_VAR(opline->op1.var);
3328 	SAVE_OPLINE();
3329 
3330 	/* cleanup incomplete RETURN statement */
3331 	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1
3332 	 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) {
3333 		zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var);
3334 
3335 		zval_ptr_dtor(return_value);
3336 	}
3337 
3338 	/* cleanup delayed exception */
3339 	if (Z_OBJ_P(fast_call) != NULL) {
3340 		/* discard the previously thrown exception */
3341 		OBJ_RELEASE(Z_OBJ_P(fast_call));
3342 		Z_OBJ_P(fast_call) = NULL;
3343 	}
3344 
3345 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3346 }
3347 
ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3348 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3349 {
3350 	USE_OPLINE
3351 	zval *fast_call = EX_VAR(opline->result.var);
3352 
3353 	Z_OBJ_P(fast_call) = NULL;
3354 	/* set return address */
3355 	Z_OPLINE_NUM_P(fast_call) = opline - EX(func)->op_array.opcodes;
3356 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0);
3357 }
3358 
ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3359 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3360 {
3361 	USE_OPLINE
3362 	zval *fast_call = EX_VAR(opline->op1.var);
3363 	uint32_t current_try_catch_offset, current_op_num;
3364 
3365 	if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1) {
3366 		const zend_op *fast_ret = EX(func)->op_array.opcodes + Z_OPLINE_NUM_P(fast_call);
3367 
3368 		ZEND_VM_JMP_EX(fast_ret + 1, 0);
3369 	}
3370 
3371 	/* special case for unhandled exceptions */
3372 	EG(exception) = Z_OBJ_P(fast_call);
3373 	Z_OBJ_P(fast_call) = NULL;
3374 	current_try_catch_offset = opline->op2.num;
3375 	current_op_num = opline - EX(func)->op_array.opcodes;
3376 	ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, current_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
3377 }
3378 
ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3379 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3380 {
3381 	USE_OPLINE
3382 
3383 	if (EG(assertions) <= 0) {
3384 		zend_op *target = OP_JMP_ADDR(opline, opline->op2);
3385 		if (RETURN_VALUE_USED(opline)) {
3386 			ZVAL_TRUE(EX_VAR(opline->result.var));
3387 		}
3388 		ZEND_VM_JMP_EX(target, 0);
3389 	} else {
3390 		ZEND_VM_NEXT_OPCODE();
3391 	}
3392 }
3393 
ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3394 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3395 {
3396 	zend_array *args = NULL;
3397 	zend_function *fbc = EX(func);
3398 	zval *ret = EX(return_value);
3399 	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
3400 	uint32_t num_args = EX_NUM_ARGS();
3401 	zend_execute_data *call;
3402 
3403 	SAVE_OPLINE();
3404 
3405 	if (num_args) {
3406 		zval *p = ZEND_CALL_ARG(execute_data, 1);
3407 		zval *end = p + num_args;
3408 
3409 		args = zend_new_array(num_args);
3410 		zend_hash_real_init_packed(args);
3411 		ZEND_HASH_FILL_PACKED(args) {
3412 			do {
3413 				ZEND_HASH_FILL_ADD(p);
3414 				p++;
3415 			} while (p != end);
3416 		} ZEND_HASH_FILL_END();
3417 	}
3418 
3419 	call = execute_data;
3420 	execute_data = EG(current_execute_data) = EX(prev_execute_data);
3421 
3422 	call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
3423 	ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
3424 	ZEND_CALL_NUM_ARGS(call) = 2;
3425 
3426 	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
3427 
3428 	zval *call_args = ZEND_CALL_ARG(call, 2);
3429 	if (args) {
3430 		ZVAL_ARR(call_args, args);
3431 	} else {
3432 		ZVAL_EMPTY_ARRAY(call_args);
3433 	}
3434 	if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
3435 		if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
3436 			GC_ADDREF(call->extra_named_params);
3437 			ZVAL_ARR(call_args, call->extra_named_params);
3438 		} else {
3439 			SEPARATE_ARRAY(call_args);
3440 			zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
3441 		}
3442 	}
3443 	zend_free_trampoline(fbc);
3444 	fbc = call->func;
3445 
3446 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
3447 		if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3448 			init_func_run_time_cache(&fbc->op_array);
3449 		}
3450 		execute_data = call;
3451 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
3452 		if (EXPECTED(zend_execute_ex == execute_ex)) {
3453 			LOAD_OPLINE_EX();
3454 
3455 
3456 			ZEND_VM_ENTER_EX();
3457 		} else {
3458 			SAVE_OPLINE_EX();
3459 
3460 			execute_data = EX(prev_execute_data);
3461 			if (execute_data) {
3462 				LOAD_OPLINE();
3463 			}
3464 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
3465 			zend_execute_ex(call);
3466 		}
3467 	} else {
3468 		zval retval;
3469 
3470 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
3471 
3472 		EG(current_execute_data) = call;
3473 
3474 #if ZEND_DEBUG
3475 		bool should_throw = zend_internal_call_should_throw(fbc, call);
3476 #endif
3477 
3478 		if (ret == NULL) {
3479 			ret = &retval;
3480 		}
3481 
3482 		ZVAL_NULL(ret);
3483 
3484 		if (!zend_execute_internal) {
3485 			/* saves one function call if zend_execute_internal is not used */
3486 			fbc->internal_function.handler(call, ret);
3487 		} else {
3488 			zend_execute_internal(call, ret);
3489 		}
3490 
3491 #if ZEND_DEBUG
3492 		if (!EG(exception) && call->func) {
3493 			if (should_throw) {
3494 				zend_internal_call_arginfo_violation(call->func);
3495 			}
3496 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
3497 				zend_verify_internal_return_type(call->func, ret));
3498 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
3499 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
3500 			zend_verify_internal_func_info(call->func, ret);
3501 		}
3502 #endif
3503 
3504 		EG(current_execute_data) = call->prev_execute_data;
3505 
3506 		zend_vm_stack_free_args(call);
3507 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
3508 			zend_free_extra_named_params(call->extra_named_params);
3509 		}
3510 		if (ret == &retval) {
3511 			zval_ptr_dtor(ret);
3512 		}
3513 	}
3514 
3515 	execute_data = EG(current_execute_data);
3516 
3517 	if (!execute_data || !EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
3518 		ZEND_VM_RETURN();
3519 	}
3520 
3521 	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
3522 		zend_object *object = Z_OBJ(call->This);
3523 		OBJ_RELEASE(object);
3524 	}
3525 	zend_vm_stack_free_call_frame(call);
3526 
3527 	if (UNEXPECTED(EG(exception) != NULL)) {
3528 		zend_rethrow_exception(execute_data);
3529 		HANDLE_EXCEPTION_LEAVE();
3530 	}
3531 
3532 	LOAD_OPLINE();
3533 	ZEND_VM_INC_OPCODE();
3534 	ZEND_VM_LEAVE();
3535 }
3536 
ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3537 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3538 {
3539 	zend_array *args = NULL;
3540 	zend_function *fbc = EX(func);
3541 	zval *ret = EX(return_value);
3542 	uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
3543 	uint32_t num_args = EX_NUM_ARGS();
3544 	zend_execute_data *call;
3545 
3546 	SAVE_OPLINE();
3547 
3548 	if (num_args) {
3549 		zval *p = ZEND_CALL_ARG(execute_data, 1);
3550 		zval *end = p + num_args;
3551 
3552 		args = zend_new_array(num_args);
3553 		zend_hash_real_init_packed(args);
3554 		ZEND_HASH_FILL_PACKED(args) {
3555 			do {
3556 				ZEND_HASH_FILL_ADD(p);
3557 				p++;
3558 			} while (p != end);
3559 		} ZEND_HASH_FILL_END();
3560 	}
3561 
3562 	call = execute_data;
3563 	execute_data = EG(current_execute_data) = EX(prev_execute_data);
3564 
3565 	call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
3566 	ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
3567 	ZEND_CALL_NUM_ARGS(call) = 2;
3568 
3569 	ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
3570 
3571 	zval *call_args = ZEND_CALL_ARG(call, 2);
3572 	if (args) {
3573 		ZVAL_ARR(call_args, args);
3574 	} else {
3575 		ZVAL_EMPTY_ARRAY(call_args);
3576 	}
3577 	if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
3578 		if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
3579 			GC_ADDREF(call->extra_named_params);
3580 			ZVAL_ARR(call_args, call->extra_named_params);
3581 		} else {
3582 			SEPARATE_ARRAY(call_args);
3583 			zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
3584 		}
3585 	}
3586 	zend_free_trampoline(fbc);
3587 	fbc = call->func;
3588 
3589 	if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
3590 		if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3591 			init_func_run_time_cache(&fbc->op_array);
3592 		}
3593 		execute_data = call;
3594 		i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
3595 		if (EXPECTED(zend_execute_ex == execute_ex)) {
3596 			LOAD_OPLINE_EX();
3597 			SAVE_OPLINE();
3598 			zend_observer_fcall_begin(execute_data);
3599 			ZEND_VM_ENTER_EX();
3600 		} else {
3601 			SAVE_OPLINE_EX();
3602 			zend_observer_fcall_begin(execute_data);
3603 			execute_data = EX(prev_execute_data);
3604 			if (execute_data) {
3605 				LOAD_OPLINE();
3606 			}
3607 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
3608 			zend_execute_ex(call);
3609 		}
3610 	} else {
3611 		zval retval;
3612 
3613 		ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
3614 
3615 		EG(current_execute_data) = call;
3616 
3617 #if ZEND_DEBUG
3618 		bool should_throw = zend_internal_call_should_throw(fbc, call);
3619 #endif
3620 
3621 		if (ret == NULL) {
3622 			ret = &retval;
3623 		}
3624 
3625 		ZVAL_NULL(ret);
3626 		zend_observer_fcall_begin(call);
3627 		if (!zend_execute_internal) {
3628 			/* saves one function call if zend_execute_internal is not used */
3629 			fbc->internal_function.handler(call, ret);
3630 		} else {
3631 			zend_execute_internal(call, ret);
3632 		}
3633 
3634 #if ZEND_DEBUG
3635 		if (!EG(exception) && call->func) {
3636 			if (should_throw) {
3637 				zend_internal_call_arginfo_violation(call->func);
3638 			}
3639 			ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
3640 				zend_verify_internal_return_type(call->func, ret));
3641 			ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
3642 				? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
3643 			zend_verify_internal_func_info(call->func, ret);
3644 		}
3645 #endif
3646 		zend_observer_fcall_end(call, EG(exception) ? NULL : ret);
3647 
3648 		EG(current_execute_data) = call->prev_execute_data;
3649 
3650 		zend_vm_stack_free_args(call);
3651 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
3652 			zend_free_extra_named_params(call->extra_named_params);
3653 		}
3654 		if (ret == &retval) {
3655 			zval_ptr_dtor(ret);
3656 		}
3657 	}
3658 
3659 	execute_data = EG(current_execute_data);
3660 
3661 	if (!execute_data || !EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
3662 		ZEND_VM_RETURN();
3663 	}
3664 
3665 	if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
3666 		zend_object *object = Z_OBJ(call->This);
3667 		OBJ_RELEASE(object);
3668 	}
3669 	zend_vm_stack_free_call_frame(call);
3670 
3671 	if (UNEXPECTED(EG(exception) != NULL)) {
3672 		zend_rethrow_exception(execute_data);
3673 		HANDLE_EXCEPTION_LEAVE();
3674 	}
3675 
3676 	LOAD_OPLINE();
3677 	ZEND_VM_INC_OPCODE();
3678 	ZEND_VM_LEAVE();
3679 }
3680 
ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3681 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3682 {
3683 	USE_OPLINE
3684 
3685 	OPLINE = OP_JMP_ADDR(opline, opline->op1);
3686 	ZEND_VM_CONTINUE();
3687 }
3688 
zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)3689 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
3690 {
3691 	zend_atomic_bool_store_ex(&EG(vm_interrupt), false);
3692 	SAVE_OPLINE();
3693 	if (zend_atomic_bool_load_ex(&EG(timed_out))) {
3694 		zend_timeout();
3695 	} else if (zend_interrupt_function) {
3696 		zend_interrupt_function(execute_data);
3697 		if (EG(exception)) {
3698 			/* We have to UNDEF result, because ZEND_HANDLE_EXCEPTION is going to free it */
3699 			const zend_op *throw_op = EG(opline_before_exception);
3700 
3701 			if (throw_op
3702 			 && throw_op->result_type & (IS_TMP_VAR|IS_VAR)
3703 			 && throw_op->opcode != ZEND_ADD_ARRAY_ELEMENT
3704 			 && throw_op->opcode != ZEND_ADD_ARRAY_UNPACK
3705 			 && throw_op->opcode != ZEND_ROPE_INIT
3706 			 && throw_op->opcode != ZEND_ROPE_ADD) {
3707 				ZVAL_UNDEF(ZEND_CALL_VAR(EG(current_execute_data), throw_op->result.var));
3708 
3709 			}
3710 		}
3711 		ZEND_VM_ENTER();
3712 	}
3713 	ZEND_VM_CONTINUE();
3714 }
ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3715 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3716 {
3717 	USE_OPLINE
3718 	zend_function *fbc;
3719 	zval *function_name, *func;
3720 	zend_execute_data *call;
3721 
3722 	fbc = CACHED_PTR(opline->result.num);
3723 	if (UNEXPECTED(fbc == NULL)) {
3724 		function_name = (zval*)RT_CONSTANT(opline, opline->op2);
3725 		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(function_name+1));
3726 		if (UNEXPECTED(func == NULL)) {
3727 			ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3728 		}
3729 		fbc = Z_FUNC_P(func);
3730 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3731 			init_func_run_time_cache(&fbc->op_array);
3732 		}
3733 		CACHE_PTR(opline->result.num, fbc);
3734 	}
3735 	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
3736 		fbc, opline->extended_value, NULL);
3737 	call->prev_execute_data = EX(call);
3738 	EX(call) = call;
3739 
3740 	ZEND_VM_NEXT_OPCODE();
3741 }
3742 
ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3743 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3744 {
3745 	USE_OPLINE
3746 	zval *function_name;
3747 	zend_execute_data *call;
3748 
3749 	SAVE_OPLINE();
3750 	function_name = RT_CONSTANT(opline, opline->op2);
3751 
3752 try_function_name:
3753 	if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
3754 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
3755 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
3756 		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
3757 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
3758 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
3759 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
3760 		function_name = Z_REFVAL_P(function_name);
3761 		goto try_function_name;
3762 	} else {
3763 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
3764 			function_name = ZVAL_UNDEFINED_OP2();
3765 			if (UNEXPECTED(EG(exception) != NULL)) {
3766 				HANDLE_EXCEPTION();
3767 			}
3768 		}
3769 		zend_throw_error(NULL, "Value of type %s is not callable",
3770 			zend_zval_type_name(function_name));
3771 		call = NULL;
3772 	}
3773 
3774 	if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
3775 
3776 		if (UNEXPECTED(EG(exception))) {
3777 			if (call) {
3778 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
3779 					zend_string_release_ex(call->func->common.function_name, 0);
3780 					zend_free_trampoline(call->func);
3781 				}
3782 				zend_vm_stack_free_call_frame(call);
3783 			}
3784 			HANDLE_EXCEPTION();
3785 		}
3786 	} else if (!call) {
3787 		HANDLE_EXCEPTION();
3788 	}
3789 
3790 	call->prev_execute_data = EX(call);
3791 	EX(call) = call;
3792 
3793 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3794 }
3795 
ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3796 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3797 {
3798 	USE_OPLINE
3799 	zval *func_name;
3800 	zval *func;
3801 	zend_function *fbc;
3802 	zend_execute_data *call;
3803 
3804 	fbc = CACHED_PTR(opline->result.num);
3805 	if (UNEXPECTED(fbc == NULL)) {
3806 		func_name = (zval *)RT_CONSTANT(opline, opline->op2);
3807 		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 1));
3808 		if (func == NULL) {
3809 			func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(func_name + 2));
3810 			if (UNEXPECTED(func == NULL)) {
3811 				ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3812 			}
3813 		}
3814 		fbc = Z_FUNC_P(func);
3815 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3816 			init_func_run_time_cache(&fbc->op_array);
3817 		}
3818 		CACHE_PTR(opline->result.num, fbc);
3819 	}
3820 
3821 	call = _zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION,
3822 		fbc, opline->extended_value, NULL);
3823 	call->prev_execute_data = EX(call);
3824 	EX(call) = call;
3825 
3826 	ZEND_VM_NEXT_OPCODE();
3827 }
3828 
ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3829 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3830 {
3831 	USE_OPLINE
3832 	zval *fname;
3833 	zval *func;
3834 	zend_function *fbc;
3835 	zend_execute_data *call;
3836 
3837 	fbc = CACHED_PTR(opline->result.num);
3838 	if (UNEXPECTED(fbc == NULL)) {
3839 		fname = (zval*)RT_CONSTANT(opline, opline->op2);
3840 		func = zend_hash_find_known_hash(EG(function_table), Z_STR_P(fname));
3841 		ZEND_ASSERT(func != NULL && "Function existence must be checked at compile time");
3842 		fbc = Z_FUNC_P(func);
3843 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
3844 			init_func_run_time_cache(&fbc->op_array);
3845 		}
3846 		CACHE_PTR(opline->result.num, fbc);
3847 	}
3848 
3849 	call = _zend_vm_stack_push_call_frame_ex(
3850 		opline->op1.num, ZEND_CALL_NESTED_FUNCTION,
3851 		fbc, opline->extended_value, NULL);
3852 	call->prev_execute_data = EX(call);
3853 	EX(call) = call;
3854 
3855 	ZEND_VM_NEXT_OPCODE();
3856 }
3857 
ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3858 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3859 {
3860 	USE_OPLINE
3861 	uint32_t arg_num;
3862 	zval *param;
3863 
3864 	ZEND_VM_REPEATABLE_OPCODE
3865 
3866 	arg_num = opline->op1.num;
3867 	param = EX_VAR(opline->result.var);
3868 	if (arg_num > EX_NUM_ARGS()) {
3869 		zval *default_value = RT_CONSTANT(opline, opline->op2);
3870 
3871 		if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) {
3872 			zval *cache_val = (zval*)CACHE_ADDR(Z_CACHE_SLOT_P(default_value));
3873 
3874 			/* we keep in cache only not refcounted values */
3875 			if (Z_TYPE_P(cache_val) != IS_UNDEF) {
3876 				ZVAL_COPY_VALUE(param, cache_val);
3877 			} else {
3878 				SAVE_OPLINE();
3879 				ZVAL_COPY(param, default_value);
3880 				zend_ast_evaluate_ctx ctx = {0};
3881 				if (UNEXPECTED(zval_update_constant_with_ctx(param, EX(func)->op_array.scope, &ctx) != SUCCESS)) {
3882 					zval_ptr_dtor_nogc(param);
3883 					ZVAL_UNDEF(param);
3884 					HANDLE_EXCEPTION();
3885 				}
3886 				if (!Z_REFCOUNTED_P(param) && !ctx.had_side_effects) {
3887 					ZVAL_COPY_VALUE(cache_val, param);
3888 				}
3889 			}
3890 			goto recv_init_check_type;
3891 		} else {
3892 			ZVAL_COPY(param, default_value);
3893 		}
3894 	} else {
3895 recv_init_check_type:
3896 		if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
3897 			SAVE_OPLINE();
3898 			if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, CACHE_ADDR(opline->extended_value)))) {
3899 				HANDLE_EXCEPTION();
3900 			}
3901 		}
3902 	}
3903 
3904 	ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
3905 	ZEND_VM_NEXT_OPCODE();
3906 }
3907 
ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3908 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3909 {
3910 	USE_OPLINE
3911 	zval *function_name;
3912 	zend_execute_data *call;
3913 
3914 	SAVE_OPLINE();
3915 	function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
3916 
3917 try_function_name:
3918 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
3919 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
3920 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
3921 		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
3922 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
3923 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
3924 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
3925 		function_name = Z_REFVAL_P(function_name);
3926 		goto try_function_name;
3927 	} else {
3928 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
3929 			function_name = ZVAL_UNDEFINED_OP2();
3930 			if (UNEXPECTED(EG(exception) != NULL)) {
3931 				HANDLE_EXCEPTION();
3932 			}
3933 		}
3934 		zend_throw_error(NULL, "Value of type %s is not callable",
3935 			zend_zval_type_name(function_name));
3936 		call = NULL;
3937 	}
3938 
3939 	if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
3940 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
3941 		if (UNEXPECTED(EG(exception))) {
3942 			if (call) {
3943 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
3944 					zend_string_release_ex(call->func->common.function_name, 0);
3945 					zend_free_trampoline(call->func);
3946 				}
3947 				zend_vm_stack_free_call_frame(call);
3948 			}
3949 			HANDLE_EXCEPTION();
3950 		}
3951 	} else if (!call) {
3952 		HANDLE_EXCEPTION();
3953 	}
3954 
3955 	call->prev_execute_data = EX(call);
3956 	EX(call) = call;
3957 
3958 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
3959 }
3960 
ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3961 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3962 {
3963 	USE_OPLINE
3964 	uint32_t arg_num = opline->op1.num;
3965 	zval *param;
3966 
3967 	if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
3968 		ZEND_VM_TAIL_CALL(zend_missing_arg_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
3969 	}
3970 
3971 	param = EX_VAR(opline->result.var);
3972 
3973 	if (UNEXPECTED(!(opline->op2.num & (1u << Z_TYPE_P(param))))) {
3974 		ZEND_VM_TAIL_CALL(zend_verify_recv_arg_type_helper_SPEC(param ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
3975 	}
3976 
3977 	ZEND_VM_NEXT_OPCODE();
3978 }
3979 
ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)3980 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3981 {
3982 	USE_OPLINE
3983 	uint32_t arg_num = opline->op1.num;
3984 	uint32_t arg_count = EX_NUM_ARGS();
3985 	zval *params;
3986 
3987 	SAVE_OPLINE();
3988 
3989 	params = EX_VAR(opline->result.var);
3990 
3991 	if (arg_num <= arg_count) {
3992 		ZEND_ASSERT(EX(func)->common.fn_flags & ZEND_ACC_VARIADIC);
3993 		ZEND_ASSERT(EX(func)->common.num_args == arg_num - 1);
3994 		zend_arg_info *arg_info = &EX(func)->common.arg_info[arg_num - 1];
3995 
3996 		array_init_size(params, arg_count - arg_num + 1);
3997 		zend_hash_real_init_packed(Z_ARRVAL_P(params));
3998 		ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) {
3999 			zval *param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
4000 			if (UNEXPECTED(ZEND_TYPE_IS_SET(arg_info->type))) {
4001 				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS);
4002 				do {
4003 					if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
4004 						ZEND_HASH_FILL_FINISH();
4005 						HANDLE_EXCEPTION();
4006 					}
4007 
4008 					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
4009 					ZEND_HASH_FILL_ADD(param);
4010 					param++;
4011 				} while (++arg_num <= arg_count);
4012 			} else {
4013 				do {
4014 					if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param);
4015 					ZEND_HASH_FILL_ADD(param);
4016 					param++;
4017 				} while (++arg_num <= arg_count);
4018 			}
4019 		} ZEND_HASH_FILL_END();
4020 	} else {
4021 		ZVAL_EMPTY_ARRAY(params);
4022 	}
4023 
4024 	if (EX_CALL_INFO() & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
4025 		zend_string *name;
4026 		zval *param;
4027 		zend_arg_info *arg_info = &EX(func)->common.arg_info[EX(func)->common.num_args];
4028 		if (ZEND_TYPE_IS_SET(arg_info->type)) {
4029 			SEPARATE_ARRAY(params);
4030 			ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
4031 				if (UNEXPECTED(!zend_verify_variadic_arg_type(EX(func), arg_info, arg_num, param, CACHE_ADDR(opline->extended_value)))) {
4032 					HANDLE_EXCEPTION();
4033 				}
4034 				Z_TRY_ADDREF_P(param);
4035 				zend_hash_add_new(Z_ARRVAL_P(params), name, param);
4036 			} ZEND_HASH_FOREACH_END();
4037 		} else if (zend_hash_num_elements(Z_ARRVAL_P(params)) == 0) {
4038 			GC_ADDREF(EX(extra_named_params));
4039 			ZVAL_ARR(params, EX(extra_named_params));
4040 		} else {
4041 			SEPARATE_ARRAY(params);
4042 			ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(EX(extra_named_params), name, param) {
4043 				Z_TRY_ADDREF_P(param);
4044 				zend_hash_add_new(Z_ARRVAL_P(params), name, param);
4045 			} ZEND_HASH_FOREACH_END();
4046 		}
4047 	}
4048 
4049 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4050 }
4051 
ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4052 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4053 {
4054 	USE_OPLINE
4055 	zval *function_name;
4056 	zend_execute_data *call;
4057 
4058 	SAVE_OPLINE();
4059 	function_name = EX_VAR(opline->op2.var);
4060 
4061 try_function_name:
4062 	if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
4063 		call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value);
4064 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) {
4065 		call = zend_init_dynamic_call_object(Z_OBJ_P(function_name), opline->extended_value);
4066 	} else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) {
4067 		call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value);
4068 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) {
4069 		function_name = Z_REFVAL_P(function_name);
4070 		goto try_function_name;
4071 	} else {
4072 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
4073 			function_name = ZVAL_UNDEFINED_OP2();
4074 			if (UNEXPECTED(EG(exception) != NULL)) {
4075 				HANDLE_EXCEPTION();
4076 			}
4077 		}
4078 		zend_throw_error(NULL, "Value of type %s is not callable",
4079 			zend_zval_type_name(function_name));
4080 		call = NULL;
4081 	}
4082 
4083 	if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
4084 
4085 		if (UNEXPECTED(EG(exception))) {
4086 			if (call) {
4087 				 if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
4088 					zend_string_release_ex(call->func->common.function_name, 0);
4089 					zend_free_trampoline(call->func);
4090 				}
4091 				zend_vm_stack_free_call_frame(call);
4092 			}
4093 			HANDLE_EXCEPTION();
4094 		}
4095 	} else if (!call) {
4096 		HANDLE_EXCEPTION();
4097 	}
4098 
4099 	call->prev_execute_data = EX(call);
4100 	EX(call) = call;
4101 
4102 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4103 }
4104 
ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4105 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4106 {
4107 	USE_OPLINE
4108 	zval *op1;
4109 
4110 	op1 = RT_CONSTANT(opline, opline->op1);
4111 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
4112 		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
4113 		ZEND_VM_NEXT_OPCODE();
4114 	}
4115 
4116 	ZEND_VM_TAIL_CALL(zend_bw_not_helper_SPEC(op1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
4117 }
4118 
ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4119 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4120 {
4121 	USE_OPLINE
4122 	zval *val;
4123 
4124 	val = RT_CONSTANT(opline, opline->op1);
4125 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4126 		ZVAL_FALSE(EX_VAR(opline->result.var));
4127 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4128 		/* The result and op1 can be the same cv zval */
4129 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
4130 		ZVAL_TRUE(EX_VAR(opline->result.var));
4131 		if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
4132 			SAVE_OPLINE();
4133 			ZVAL_UNDEFINED_OP1();
4134 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4135 		}
4136 	} else {
4137 		SAVE_OPLINE();
4138 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
4139 
4140 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4141 	}
4142 	ZEND_VM_NEXT_OPCODE();
4143 }
4144 
ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4145 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4146 {
4147 	USE_OPLINE
4148 	zval *z;
4149 
4150 	SAVE_OPLINE();
4151 	z = RT_CONSTANT(opline, opline->op1);
4152 
4153 	if (Z_TYPE_P(z) == IS_STRING) {
4154 		zend_string *str = Z_STR_P(z);
4155 
4156 		if (ZSTR_LEN(str) != 0) {
4157 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
4158 		}
4159 	} else {
4160 		zend_string *str = zval_get_string_func(z);
4161 
4162 		if (ZSTR_LEN(str) != 0) {
4163 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
4164 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
4165 			ZVAL_UNDEFINED_OP1();
4166 		}
4167 		zend_string_release_ex(str, 0);
4168 	}
4169 
4170 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4171 }
4172 
ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4173 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4174 {
4175 	USE_OPLINE
4176 	zval *val;
4177 	uint8_t op1_type;
4178 
4179 	val = RT_CONSTANT(opline, opline->op1);
4180 
4181 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4182 		ZEND_VM_NEXT_OPCODE();
4183 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4184 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
4185 			SAVE_OPLINE();
4186 			ZVAL_UNDEFINED_OP1();
4187 			if (UNEXPECTED(EG(exception))) {
4188 				HANDLE_EXCEPTION();
4189 			}
4190 		}
4191 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4192 	}
4193 
4194 	SAVE_OPLINE();
4195 	op1_type = IS_CONST;
4196 	if (i_zend_is_true(val)) {
4197 		opline++;
4198 	} else {
4199 		opline = OP_JMP_ADDR(opline, opline->op2);
4200 	}
4201 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
4202 		zval_ptr_dtor_nogc(val);
4203 	}
4204 	ZEND_VM_JMP(opline);
4205 }
4206 
ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4207 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4208 {
4209 	USE_OPLINE
4210 	zval *val;
4211 	uint8_t op1_type;
4212 
4213 	val = RT_CONSTANT(opline, opline->op1);
4214 
4215 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4216 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4217 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4218 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
4219 			SAVE_OPLINE();
4220 			ZVAL_UNDEFINED_OP1();
4221 			if (UNEXPECTED(EG(exception))) {
4222 				HANDLE_EXCEPTION();
4223 			}
4224 		}
4225 		ZEND_VM_NEXT_OPCODE();
4226 	}
4227 
4228 	SAVE_OPLINE();
4229 	op1_type = IS_CONST;
4230 	if (i_zend_is_true(val)) {
4231 		opline = OP_JMP_ADDR(opline, opline->op2);
4232 	} else {
4233 		opline++;
4234 	}
4235 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
4236 		zval_ptr_dtor_nogc(val);
4237 	}
4238 	ZEND_VM_JMP(opline);
4239 }
4240 
ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4241 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4242 {
4243 	USE_OPLINE
4244 	zval *val;
4245 	bool ret;
4246 
4247 	val = RT_CONSTANT(opline, opline->op1);
4248 
4249 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4250 		ZVAL_TRUE(EX_VAR(opline->result.var));
4251 		ZEND_VM_NEXT_OPCODE();
4252 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4253 		ZVAL_FALSE(EX_VAR(opline->result.var));
4254 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
4255 			SAVE_OPLINE();
4256 			ZVAL_UNDEFINED_OP1();
4257 			if (UNEXPECTED(EG(exception))) {
4258 				HANDLE_EXCEPTION();
4259 			}
4260 		}
4261 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4262 	}
4263 
4264 	SAVE_OPLINE();
4265 	ret = i_zend_is_true(val);
4266 
4267 	if (ret) {
4268 		ZVAL_TRUE(EX_VAR(opline->result.var));
4269 		opline++;
4270 	} else {
4271 		ZVAL_FALSE(EX_VAR(opline->result.var));
4272 		opline = OP_JMP_ADDR(opline, opline->op2);
4273 	}
4274 	ZEND_VM_JMP(opline);
4275 }
4276 
ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4277 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4278 {
4279 	USE_OPLINE
4280 	zval *val;
4281 	bool ret;
4282 
4283 	val = RT_CONSTANT(opline, opline->op1);
4284 
4285 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4286 		ZVAL_TRUE(EX_VAR(opline->result.var));
4287 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4288 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4289 		ZVAL_FALSE(EX_VAR(opline->result.var));
4290 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
4291 			SAVE_OPLINE();
4292 			ZVAL_UNDEFINED_OP1();
4293 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4294 		} else {
4295 			ZEND_VM_NEXT_OPCODE();
4296 		}
4297 	}
4298 
4299 	SAVE_OPLINE();
4300 	ret = i_zend_is_true(val);
4301 
4302 	if (ret) {
4303 		ZVAL_TRUE(EX_VAR(opline->result.var));
4304 		opline = OP_JMP_ADDR(opline, opline->op2);
4305 	} else {
4306 		ZVAL_FALSE(EX_VAR(opline->result.var));
4307 		opline++;
4308 	}
4309 	ZEND_VM_JMP(opline);
4310 }
4311 
ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4312 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4313 {
4314 	USE_OPLINE
4315 	zval *retval_ptr;
4316 	zval *return_value;
4317 
4318 	retval_ptr = RT_CONSTANT(opline, opline->op1);
4319 	return_value = EX(return_value);
4320 
4321 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
4322 		SAVE_OPLINE();
4323 		retval_ptr = ZVAL_UNDEFINED_OP1();
4324 		if (return_value) {
4325 			ZVAL_NULL(return_value);
4326 		}
4327 	} else if (!return_value) {
4328 		if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
4329 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
4330 				SAVE_OPLINE();
4331 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
4332 			}
4333 		}
4334 	} else {
4335 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
4336 			ZVAL_COPY_VALUE(return_value, retval_ptr);
4337 			if (IS_CONST == IS_CONST) {
4338 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
4339 					Z_ADDREF_P(return_value);
4340 				}
4341 			}
4342 		} else if (IS_CONST == IS_CV) {
4343 			do {
4344 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4345 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
4346 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
4347 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4348 							ZVAL_COPY_VALUE(return_value, retval_ptr);
4349 							if (GC_MAY_LEAK(ref)) {
4350 								SAVE_OPLINE();
4351 								gc_possible_root(ref);
4352 							}
4353 							ZVAL_NULL(retval_ptr);
4354 							break;
4355 						} else {
4356 							Z_ADDREF_P(retval_ptr);
4357 						}
4358 					} else {
4359 						retval_ptr = Z_REFVAL_P(retval_ptr);
4360 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4361 							Z_ADDREF_P(retval_ptr);
4362 						}
4363 					}
4364 				}
4365 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4366 			} while (0);
4367 		} else /* if (IS_CONST == IS_VAR) */ {
4368 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4369 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4370 
4371 				retval_ptr = Z_REFVAL_P(retval_ptr);
4372 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4373 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4374 					efree_size(ref, sizeof(zend_reference));
4375 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4376 					Z_ADDREF_P(retval_ptr);
4377 				}
4378 			} else {
4379 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4380 			}
4381 		}
4382 	}
4383 
4384 
4385 
4386 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4387 }
4388 
ZEND_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4389 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4390 {
4391 	USE_OPLINE
4392 	zval *retval_ptr;
4393 	zval *return_value;
4394 	zval observer_retval;
4395 
4396 	retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
4397 	return_value = EX(return_value);
4398 	if (!return_value) { return_value = &observer_retval; };
4399 	if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
4400 		SAVE_OPLINE();
4401 		retval_ptr = ZVAL_UNDEFINED_OP1();
4402 		if (return_value) {
4403 			ZVAL_NULL(return_value);
4404 		}
4405 	} else if (!return_value) {
4406 		if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
4407 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
4408 				SAVE_OPLINE();
4409 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
4410 			}
4411 		}
4412 	} else {
4413 		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
4414 			ZVAL_COPY_VALUE(return_value, retval_ptr);
4415 			if (opline->op1_type == IS_CONST) {
4416 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
4417 					Z_ADDREF_P(return_value);
4418 				}
4419 			}
4420 		} else if (opline->op1_type == IS_CV) {
4421 			do {
4422 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4423 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
4424 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
4425 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4426 							ZVAL_COPY_VALUE(return_value, retval_ptr);
4427 							if (GC_MAY_LEAK(ref)) {
4428 								SAVE_OPLINE();
4429 								gc_possible_root(ref);
4430 							}
4431 							ZVAL_NULL(retval_ptr);
4432 							break;
4433 						} else {
4434 							Z_ADDREF_P(retval_ptr);
4435 						}
4436 					} else {
4437 						retval_ptr = Z_REFVAL_P(retval_ptr);
4438 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4439 							Z_ADDREF_P(retval_ptr);
4440 						}
4441 					}
4442 				}
4443 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4444 			} while (0);
4445 		} else /* if (opline->op1_type == IS_VAR) */ {
4446 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4447 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
4448 
4449 				retval_ptr = Z_REFVAL_P(retval_ptr);
4450 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4451 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4452 					efree_size(ref, sizeof(zend_reference));
4453 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
4454 					Z_ADDREF_P(retval_ptr);
4455 				}
4456 			} else {
4457 				ZVAL_COPY_VALUE(return_value, retval_ptr);
4458 			}
4459 		}
4460 	}
4461 	SAVE_OPLINE();
4462 	zend_observer_fcall_end(execute_data, return_value);
4463 	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
4464 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4465 }
4466 
ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4467 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4468 {
4469 	USE_OPLINE
4470 	zval *retval_ptr;
4471 	zval *return_value;
4472 
4473 	SAVE_OPLINE();
4474 
4475 	return_value = EX(return_value);
4476 
4477 	do {
4478 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR)) ||
4479 		    (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
4480 			/* Not supposed to happen, but we'll allow it */
4481 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
4482 
4483 			retval_ptr = RT_CONSTANT(opline, opline->op1);
4484 			if (!return_value) {
4485 
4486 			} else {
4487 				if (IS_CONST == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4488 					ZVAL_COPY_VALUE(return_value, retval_ptr);
4489 					break;
4490 				}
4491 
4492 				ZVAL_NEW_REF(return_value, retval_ptr);
4493 				if (IS_CONST == IS_CONST) {
4494 					Z_TRY_ADDREF_P(retval_ptr);
4495 				}
4496 			}
4497 			break;
4498 		}
4499 
4500 		retval_ptr = zend_get_bad_ptr();
4501 
4502 		if (IS_CONST == IS_VAR) {
4503 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
4504 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
4505 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
4506 				if (return_value) {
4507 					ZVAL_NEW_REF(return_value, retval_ptr);
4508 				} else {
4509 
4510 				}
4511 				break;
4512 			}
4513 		}
4514 
4515 		if (return_value) {
4516 			if (Z_ISREF_P(retval_ptr)) {
4517 				Z_ADDREF_P(retval_ptr);
4518 			} else {
4519 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
4520 			}
4521 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
4522 		}
4523 
4524 	} while (0);
4525 
4526 
4527 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4528 }
4529 
ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4530 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4531 {
4532 	USE_OPLINE
4533 	zval *retval_ptr;
4534 	zval *return_value;
4535 	zval observer_retval;
4536 
4537 	SAVE_OPLINE();
4538 
4539 	return_value = EX(return_value);
4540 	if (!return_value) { return_value = &observer_retval; };
4541 	do {
4542 		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR)) ||
4543 		    (opline->op1_type == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
4544 			/* Not supposed to happen, but we'll allow it */
4545 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
4546 
4547 			retval_ptr = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
4548 			if (!return_value) {
4549 				FREE_OP(opline->op1_type, opline->op1.var);
4550 			} else {
4551 				if (opline->op1_type == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
4552 					ZVAL_COPY_VALUE(return_value, retval_ptr);
4553 					break;
4554 				}
4555 
4556 				ZVAL_NEW_REF(return_value, retval_ptr);
4557 				if (opline->op1_type == IS_CONST) {
4558 					Z_TRY_ADDREF_P(retval_ptr);
4559 				}
4560 			}
4561 			break;
4562 		}
4563 
4564 		retval_ptr = get_zval_ptr_ptr(opline->op1_type, opline->op1, BP_VAR_W);
4565 
4566 		if (opline->op1_type == IS_VAR) {
4567 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
4568 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
4569 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
4570 				if (return_value) {
4571 					ZVAL_NEW_REF(return_value, retval_ptr);
4572 				} else {
4573 					FREE_OP(opline->op1_type, opline->op1.var);
4574 				}
4575 				break;
4576 			}
4577 		}
4578 
4579 		if (return_value) {
4580 			if (Z_ISREF_P(retval_ptr)) {
4581 				Z_ADDREF_P(retval_ptr);
4582 			} else {
4583 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
4584 			}
4585 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
4586 		}
4587 
4588 		FREE_OP(opline->op1_type, opline->op1.var);
4589 	} while (0);
4590 
4591 	zend_observer_fcall_end(execute_data, return_value);
4592 	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
4593 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
4594 }
4595 
ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4596 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4597 {
4598 	USE_OPLINE
4599 	zval *retval;
4600 
4601 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
4602 
4603 	SAVE_OPLINE();
4604 	retval = RT_CONSTANT(opline, opline->op1);
4605 
4606 	/* Copy return value into generator->retval */
4607 	if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
4608 		ZVAL_COPY_VALUE(&generator->retval, retval);
4609 		if (IS_CONST == IS_CONST) {
4610 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
4611 				Z_ADDREF(generator->retval);
4612 			}
4613 		}
4614 	} else if (IS_CONST == IS_CV) {
4615 		ZVAL_COPY_DEREF(&generator->retval, retval);
4616 	} else /* if (IS_CONST == IS_VAR) */ {
4617 		if (UNEXPECTED(Z_ISREF_P(retval))) {
4618 			zend_refcounted *ref = Z_COUNTED_P(retval);
4619 
4620 			retval = Z_REFVAL_P(retval);
4621 			ZVAL_COPY_VALUE(&generator->retval, retval);
4622 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4623 				efree_size(ref, sizeof(zend_reference));
4624 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
4625 				Z_ADDREF_P(retval);
4626 			}
4627 		} else {
4628 			ZVAL_COPY_VALUE(&generator->retval, retval);
4629 		}
4630 	}
4631 
4632 	EG(current_execute_data) = EX(prev_execute_data);
4633 
4634 	/* Close the generator to free up resources */
4635 	zend_generator_close(generator, 1);
4636 
4637 	/* Pass execution back to handling code */
4638 	ZEND_VM_RETURN();
4639 }
4640 
ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4641 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4642 {
4643 	USE_OPLINE
4644 	zval *retval;
4645 
4646 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
4647 
4648 	SAVE_OPLINE();
4649 	retval = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
4650 
4651 	/* Copy return value into generator->retval */
4652 	if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
4653 		ZVAL_COPY_VALUE(&generator->retval, retval);
4654 		if (opline->op1_type == IS_CONST) {
4655 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
4656 				Z_ADDREF(generator->retval);
4657 			}
4658 		}
4659 	} else if (opline->op1_type == IS_CV) {
4660 		ZVAL_COPY_DEREF(&generator->retval, retval);
4661 	} else /* if (opline->op1_type == IS_VAR) */ {
4662 		if (UNEXPECTED(Z_ISREF_P(retval))) {
4663 			zend_refcounted *ref = Z_COUNTED_P(retval);
4664 
4665 			retval = Z_REFVAL_P(retval);
4666 			ZVAL_COPY_VALUE(&generator->retval, retval);
4667 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
4668 				efree_size(ref, sizeof(zend_reference));
4669 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
4670 				Z_ADDREF_P(retval);
4671 			}
4672 		} else {
4673 			ZVAL_COPY_VALUE(&generator->retval, retval);
4674 		}
4675 	}
4676 
4677 	zend_observer_fcall_end(generator->execute_data, &generator->retval);
4678 
4679 	EG(current_execute_data) = EX(prev_execute_data);
4680 
4681 	/* Close the generator to free up resources */
4682 	zend_generator_close(generator, 1);
4683 
4684 	/* Pass execution back to handling code */
4685 	ZEND_VM_RETURN();
4686 }
4687 
ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4688 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4689 {
4690 	USE_OPLINE
4691 	zval *value;
4692 
4693 	SAVE_OPLINE();
4694 	value = RT_CONSTANT(opline, opline->op1);
4695 
4696 	do {
4697 		if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
4698 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
4699 				value = Z_REFVAL_P(value);
4700 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
4701 					break;
4702 				}
4703 			}
4704 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
4705 				ZVAL_UNDEFINED_OP1();
4706 				if (UNEXPECTED(EG(exception) != NULL)) {
4707 					HANDLE_EXCEPTION();
4708 				}
4709 			}
4710 			zend_throw_error(NULL, "Can only throw objects");
4711 
4712 			HANDLE_EXCEPTION();
4713 		}
4714 	} while (0);
4715 
4716 	zend_exception_save();
4717 	Z_TRY_ADDREF_P(value);
4718 	zend_throw_exception_object(value);
4719 	zend_exception_restore();
4720 
4721 	HANDLE_EXCEPTION();
4722 }
4723 
ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4724 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4725 {
4726 	USE_OPLINE
4727 	zend_class_entry *ce, *catch_ce;
4728 	zend_object *exception;
4729 
4730 	SAVE_OPLINE();
4731 	/* Check whether an exception has been thrown, if not, jump over code */
4732 	zend_exception_restore();
4733 	if (EG(exception) == NULL) {
4734 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4735 	}
4736 	catch_ce = CACHED_PTR(opline->extended_value & ~ZEND_LAST_CATCH);
4737 	if (UNEXPECTED(catch_ce == NULL)) {
4738 		catch_ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), Z_STR_P(RT_CONSTANT(opline, opline->op1) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD | ZEND_FETCH_CLASS_SILENT);
4739 
4740 		CACHE_PTR(opline->extended_value & ~ZEND_LAST_CATCH, catch_ce);
4741 	}
4742 	ce = EG(exception)->ce;
4743 
4744 #ifdef HAVE_DTRACE
4745 	if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
4746 		DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
4747 	}
4748 #endif /* HAVE_DTRACE */
4749 
4750 	if (ce != catch_ce) {
4751 		if (!catch_ce || !instanceof_function(ce, catch_ce)) {
4752 			if (opline->extended_value & ZEND_LAST_CATCH) {
4753 				zend_rethrow_exception(execute_data);
4754 				HANDLE_EXCEPTION();
4755 			}
4756 			ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
4757 		}
4758 	}
4759 
4760 	exception = EG(exception);
4761 	EG(exception) = NULL;
4762 	if (RETURN_VALUE_USED(opline)) {
4763 		/* Always perform a strict assignment. There is a reasonable expectation that if you
4764 		 * write "catch (Exception $e)" then $e will actually be instanceof Exception. As such,
4765 		 * we should not permit coercion to string here. */
4766 		zval tmp;
4767 		ZVAL_OBJ(&tmp, exception);
4768 		zend_assign_to_variable(EX_VAR(opline->result.var), &tmp, IS_TMP_VAR, /* strict */ 1);
4769 	} else {
4770 		OBJ_RELEASE(exception);
4771 	}
4772 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4773 }
4774 
ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4775 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4776 {
4777 	USE_OPLINE
4778 	zval *arg, *param;
4779 
4780 	SAVE_OPLINE();
4781 
4782 	arg = RT_CONSTANT(opline, opline->op1);
4783 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
4784 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
4785 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
4786 		Z_TRY_ADDREF_P(arg);
4787 		ZVAL_NEW_REF(param, arg);
4788 	} else {
4789 		ZVAL_COPY(param, arg);
4790 	}
4791 
4792 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4793 }
4794 
ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4795 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4796 {
4797 	USE_OPLINE
4798 	zval *val;
4799 
4800 	val = RT_CONSTANT(opline, opline->op1);
4801 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
4802 		ZVAL_TRUE(EX_VAR(opline->result.var));
4803 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
4804 		/* The result and op1 can be the same cv zval */
4805 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
4806 		ZVAL_FALSE(EX_VAR(opline->result.var));
4807 		if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
4808 			SAVE_OPLINE();
4809 			ZVAL_UNDEFINED_OP1();
4810 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4811 		}
4812 	} else {
4813 		SAVE_OPLINE();
4814 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
4815 
4816 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4817 	}
4818 	ZEND_VM_NEXT_OPCODE();
4819 }
4820 
ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4821 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4822 {
4823 	USE_OPLINE
4824 	zval *obj;
4825 	zend_object *zobj;
4826 	zend_class_entry *ce, *scope;
4827 	zend_function *clone;
4828 	zend_object_clone_obj_t clone_call;
4829 
4830 	SAVE_OPLINE();
4831 	obj = RT_CONSTANT(opline, opline->op1);
4832 
4833 	do {
4834 		if (IS_CONST == IS_CONST ||
4835 		    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
4836 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
4837 				obj = Z_REFVAL_P(obj);
4838 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
4839 					break;
4840 				}
4841 			}
4842 			ZVAL_UNDEF(EX_VAR(opline->result.var));
4843 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
4844 				ZVAL_UNDEFINED_OP1();
4845 				if (UNEXPECTED(EG(exception) != NULL)) {
4846 					HANDLE_EXCEPTION();
4847 				}
4848 			}
4849 			zend_throw_error(NULL, "__clone method called on non-object");
4850 
4851 			HANDLE_EXCEPTION();
4852 		}
4853 	} while (0);
4854 
4855 	zobj = Z_OBJ_P(obj);
4856 	ce = zobj->ce;
4857 	clone = ce->clone;
4858 	clone_call = zobj->handlers->clone_obj;
4859 	if (UNEXPECTED(clone_call == NULL)) {
4860 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
4861 
4862 		ZVAL_UNDEF(EX_VAR(opline->result.var));
4863 		HANDLE_EXCEPTION();
4864 	}
4865 
4866 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
4867 		scope = EX(func)->op_array.scope;
4868 		if (clone->common.scope != scope) {
4869 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
4870 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
4871 				zend_wrong_clone_call(clone, scope);
4872 
4873 				ZVAL_UNDEF(EX_VAR(opline->result.var));
4874 				HANDLE_EXCEPTION();
4875 			}
4876 		}
4877 	}
4878 
4879 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
4880 
4881 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4882 }
4883 
ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4884 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4885 {
4886 	USE_OPLINE
4887 	zval *expr;
4888 	zval *result = EX_VAR(opline->result.var);
4889 	HashTable *ht;
4890 
4891 	SAVE_OPLINE();
4892 	expr = RT_CONSTANT(opline, opline->op1);
4893 
4894 	switch (opline->extended_value) {
4895 		case IS_LONG:
4896 			ZVAL_LONG(result, zval_get_long(expr));
4897 			break;
4898 		case IS_DOUBLE:
4899 			ZVAL_DOUBLE(result, zval_get_double(expr));
4900 			break;
4901 		case IS_STRING:
4902 			ZVAL_STR(result, zval_get_string(expr));
4903 			break;
4904 		default:
4905 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
4906 			if (IS_CONST & (IS_VAR|IS_CV)) {
4907 				ZVAL_DEREF(expr);
4908 			}
4909 			/* If value is already of correct type, return it directly */
4910 			if (Z_TYPE_P(expr) == opline->extended_value) {
4911 				ZVAL_COPY_VALUE(result, expr);
4912 				if (IS_CONST == IS_CONST) {
4913 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
4914 				} else if (IS_CONST != IS_TMP_VAR) {
4915 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
4916 				}
4917 
4918 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4919 			}
4920 
4921 			if (opline->extended_value == IS_ARRAY) {
4922 				if (IS_CONST == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
4923 					if (Z_TYPE_P(expr) != IS_NULL) {
4924 						ZVAL_ARR(result, zend_new_array(1));
4925 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
4926 						if (IS_CONST == IS_CONST) {
4927 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
4928 						} else {
4929 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
4930 						}
4931 					} else {
4932 						ZVAL_EMPTY_ARRAY(result);
4933 					}
4934 				} else if (Z_OBJ_P(expr)->properties == NULL
4935 				 && Z_OBJ_HT_P(expr)->get_properties_for == NULL
4936 				 && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
4937 					/* Optimized version without rebuilding properties HashTable */
4938 					ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
4939 				} else {
4940 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
4941 					if (obj_ht) {
4942 						/* fast copy */
4943 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
4944 							(Z_OBJCE_P(expr)->default_properties_count ||
4945 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
4946 							 GC_IS_RECURSIVE(obj_ht))));
4947 						zend_release_properties(obj_ht);
4948 					} else {
4949 						ZVAL_EMPTY_ARRAY(result);
4950 					}
4951 				}
4952 			} else {
4953 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
4954 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
4955 				if (Z_TYPE_P(expr) == IS_ARRAY) {
4956 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
4957 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
4958 						/* TODO: try not to duplicate immutable arrays as well ??? */
4959 						ht = zend_array_dup(ht);
4960 					}
4961 					Z_OBJ_P(result)->properties = ht;
4962 				} else if (Z_TYPE_P(expr) != IS_NULL) {
4963 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
4964 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
4965 					if (IS_CONST == IS_CONST) {
4966 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
4967 					} else {
4968 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
4969 					}
4970 				}
4971 			}
4972 	}
4973 
4974 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
4975 }
4976 
ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)4977 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4978 {
4979 	USE_OPLINE
4980 	zend_op_array *new_op_array;
4981 	zval *inc_filename;
4982 
4983 	SAVE_OPLINE();
4984 	inc_filename = RT_CONSTANT(opline, opline->op1);
4985 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
4986 	if (UNEXPECTED(EG(exception) != NULL)) {
4987 
4988 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
4989 			destroy_op_array(new_op_array);
4990 			efree_size(new_op_array, sizeof(zend_op_array));
4991 		}
4992 		UNDEF_RESULT();
4993 		HANDLE_EXCEPTION();
4994 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
4995 		if (RETURN_VALUE_USED(opline)) {
4996 			ZVAL_TRUE(EX_VAR(opline->result.var));
4997 		}
4998 	} else if (UNEXPECTED(new_op_array == NULL)) {
4999 		if (RETURN_VALUE_USED(opline)) {
5000 			ZVAL_FALSE(EX_VAR(opline->result.var));
5001 		}
5002 	} else if (new_op_array->last == 1
5003 			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
5004 			&& new_op_array->opcodes[0].op1_type == IS_CONST
5005 			&& EXPECTED(zend_execute_ex == execute_ex)) {
5006 		if (RETURN_VALUE_USED(opline)) {
5007 			const zend_op *op = new_op_array->opcodes;
5008 
5009 			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
5010 		}
5011 		zend_destroy_static_vars(new_op_array);
5012 		destroy_op_array(new_op_array);
5013 		efree_size(new_op_array, sizeof(zend_op_array));
5014 	} else {
5015 		zval *return_value = NULL;
5016 		zend_execute_data *call;
5017 		if (RETURN_VALUE_USED(opline)) {
5018 			return_value = EX_VAR(opline->result.var);
5019 		}
5020 
5021 		new_op_array->scope = EX(func)->op_array.scope;
5022 
5023 		call = zend_vm_stack_push_call_frame(
5024 			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
5025 			(zend_function*)new_op_array, 0,
5026 			Z_PTR(EX(This)));
5027 
5028 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
5029 			call->symbol_table = EX(symbol_table);
5030 		} else {
5031 			call->symbol_table = zend_rebuild_symbol_table();
5032 		}
5033 
5034 		call->prev_execute_data = execute_data;
5035 		i_init_code_execute_data(call, new_op_array, return_value);
5036 
5037 		if (EXPECTED(zend_execute_ex == execute_ex)) {
5038 
5039 			ZEND_VM_ENTER();
5040 		} else {
5041 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
5042 			zend_execute_ex(call);
5043 			zend_vm_stack_free_call_frame(call);
5044 		}
5045 
5046 		zend_destroy_static_vars(new_op_array);
5047 		destroy_op_array(new_op_array);
5048 		efree_size(new_op_array, sizeof(zend_op_array));
5049 		if (UNEXPECTED(EG(exception) != NULL)) {
5050 			zend_rethrow_exception(execute_data);
5051 
5052 			UNDEF_RESULT();
5053 			HANDLE_EXCEPTION();
5054 		}
5055 	}
5056 
5057 	ZEND_VM_NEXT_OPCODE();
5058 }
5059 
ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5060 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5061 {
5062 	USE_OPLINE
5063 	zend_op_array *new_op_array;
5064 	zval *inc_filename;
5065 
5066 	SAVE_OPLINE();
5067 	inc_filename = get_zval_ptr(opline->op1_type, opline->op1, BP_VAR_R);
5068 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
5069 	if (UNEXPECTED(EG(exception) != NULL)) {
5070 		FREE_OP(opline->op1_type, opline->op1.var);
5071 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
5072 			destroy_op_array(new_op_array);
5073 			efree_size(new_op_array, sizeof(zend_op_array));
5074 		}
5075 		UNDEF_RESULT();
5076 		HANDLE_EXCEPTION();
5077 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
5078 		if (RETURN_VALUE_USED(opline)) {
5079 			ZVAL_TRUE(EX_VAR(opline->result.var));
5080 		}
5081 	} else if (UNEXPECTED(new_op_array == NULL)) {
5082 		if (RETURN_VALUE_USED(opline)) {
5083 			ZVAL_FALSE(EX_VAR(opline->result.var));
5084 		}
5085 	} else if (new_op_array->last == 1
5086 			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
5087 			&& new_op_array->opcodes[0].op1_type == IS_CONST
5088 			&& EXPECTED(zend_execute_ex == execute_ex)) {
5089 		if (RETURN_VALUE_USED(opline)) {
5090 			const zend_op *op = new_op_array->opcodes;
5091 
5092 			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
5093 		}
5094 		zend_destroy_static_vars(new_op_array);
5095 		destroy_op_array(new_op_array);
5096 		efree_size(new_op_array, sizeof(zend_op_array));
5097 	} else {
5098 		zval *return_value = NULL;
5099 		zend_execute_data *call;
5100 		if (RETURN_VALUE_USED(opline)) {
5101 			return_value = EX_VAR(opline->result.var);
5102 		}
5103 
5104 		new_op_array->scope = EX(func)->op_array.scope;
5105 
5106 		call = zend_vm_stack_push_call_frame(
5107 			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
5108 			(zend_function*)new_op_array, 0,
5109 			Z_PTR(EX(This)));
5110 
5111 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
5112 			call->symbol_table = EX(symbol_table);
5113 		} else {
5114 			call->symbol_table = zend_rebuild_symbol_table();
5115 		}
5116 
5117 		call->prev_execute_data = execute_data;
5118 		i_init_code_execute_data(call, new_op_array, return_value);
5119 		zend_observer_fcall_begin(call);
5120 		if (EXPECTED(zend_execute_ex == execute_ex)) {
5121 			FREE_OP(opline->op1_type, opline->op1.var);
5122 			ZEND_VM_ENTER();
5123 		} else {
5124 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
5125 			zend_execute_ex(call);
5126 			zend_vm_stack_free_call_frame(call);
5127 		}
5128 
5129 		zend_destroy_static_vars(new_op_array);
5130 		destroy_op_array(new_op_array);
5131 		efree_size(new_op_array, sizeof(zend_op_array));
5132 		if (UNEXPECTED(EG(exception) != NULL)) {
5133 			zend_rethrow_exception(execute_data);
5134 			FREE_OP(opline->op1_type, opline->op1.var);
5135 			UNDEF_RESULT();
5136 			HANDLE_EXCEPTION();
5137 		}
5138 	}
5139 	FREE_OP(opline->op1_type, opline->op1.var);
5140 	ZEND_VM_NEXT_OPCODE();
5141 }
5142 
ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5143 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5144 {
5145 	USE_OPLINE
5146 	zval *array_ptr, *result;
5147 
5148 	SAVE_OPLINE();
5149 
5150 	array_ptr = RT_CONSTANT(opline, opline->op1);
5151 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
5152 		result = EX_VAR(opline->result.var);
5153 		ZVAL_COPY_VALUE(result, array_ptr);
5154 		if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
5155 			Z_ADDREF_P(array_ptr);
5156 		}
5157 		Z_FE_POS_P(result) = 0;
5158 
5159 		ZEND_VM_NEXT_OPCODE();
5160 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
5161 		zend_object *zobj = Z_OBJ_P(array_ptr);
5162 		if (!zobj->ce->get_iterator) {
5163 			HashTable *properties = zobj->properties;
5164 			if (properties) {
5165 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
5166 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
5167 						GC_DELREF(properties);
5168 					}
5169 					properties = zobj->properties = zend_array_dup(properties);
5170 				}
5171 			} else {
5172 				properties = zobj->handlers->get_properties(zobj);
5173 			}
5174 
5175 			result = EX_VAR(opline->result.var);
5176 			ZVAL_COPY_VALUE(result, array_ptr);
5177 			if (IS_CONST != IS_TMP_VAR) {
5178 				Z_ADDREF_P(array_ptr);
5179 			}
5180 
5181 			if (zend_hash_num_elements(properties) == 0) {
5182 				Z_FE_ITER_P(result) = (uint32_t) -1;
5183 
5184 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
5185 			}
5186 
5187 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
5188 
5189 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5190 		} else {
5191 			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
5192 
5193 			if (UNEXPECTED(EG(exception))) {
5194 				HANDLE_EXCEPTION();
5195 			} else if (is_empty) {
5196 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5197 			} else {
5198 				ZEND_VM_NEXT_OPCODE();
5199 			}
5200 		}
5201 	} else {
5202 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
5203 		ZVAL_UNDEF(EX_VAR(opline->result.var));
5204 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
5205 
5206 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
5207 	}
5208 }
5209 
ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5210 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5211 {
5212 	USE_OPLINE
5213 	zval *array_ptr, *array_ref;
5214 
5215 	SAVE_OPLINE();
5216 
5217 	if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
5218 		array_ref = array_ptr = zend_get_bad_ptr();
5219 		if (Z_ISREF_P(array_ref)) {
5220 			array_ptr = Z_REFVAL_P(array_ref);
5221 		}
5222 	} else {
5223 		array_ref = array_ptr = RT_CONSTANT(opline, opline->op1);
5224 	}
5225 
5226 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
5227 		if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
5228 			if (array_ptr == array_ref) {
5229 				ZVAL_NEW_REF(array_ref, array_ref);
5230 				array_ptr = Z_REFVAL_P(array_ref);
5231 			}
5232 			Z_ADDREF_P(array_ref);
5233 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
5234 		} else {
5235 			array_ref = EX_VAR(opline->result.var);
5236 			ZVAL_NEW_REF(array_ref, array_ptr);
5237 			array_ptr = Z_REFVAL_P(array_ref);
5238 		}
5239 		if (IS_CONST == IS_CONST) {
5240 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
5241 		} else {
5242 			SEPARATE_ARRAY(array_ptr);
5243 		}
5244 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
5245 
5246 		ZEND_VM_NEXT_OPCODE();
5247 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
5248 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
5249 			HashTable *properties;
5250 			if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
5251 				if (array_ptr == array_ref) {
5252 					ZVAL_NEW_REF(array_ref, array_ref);
5253 					array_ptr = Z_REFVAL_P(array_ref);
5254 				}
5255 				Z_ADDREF_P(array_ref);
5256 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
5257 			} else {
5258 				array_ptr = EX_VAR(opline->result.var);
5259 				ZVAL_COPY_VALUE(array_ptr, array_ref);
5260 			}
5261 			if (Z_OBJ_P(array_ptr)->properties
5262 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
5263 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
5264 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
5265 				}
5266 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
5267 			}
5268 
5269 			properties = Z_OBJPROP_P(array_ptr);
5270 			if (zend_hash_num_elements(properties) == 0) {
5271 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
5272 
5273 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
5274 			}
5275 
5276 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
5277 
5278 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5279 		} else {
5280 			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
5281 
5282 			if (UNEXPECTED(EG(exception))) {
5283 				HANDLE_EXCEPTION();
5284 			} else if (is_empty) {
5285 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5286 			} else {
5287 				ZEND_VM_NEXT_OPCODE();
5288 			}
5289 		}
5290 	} else {
5291 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
5292 		ZVAL_UNDEF(EX_VAR(opline->result.var));
5293 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
5294 
5295 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
5296 	}
5297 }
5298 
ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5299 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5300 {
5301 	USE_OPLINE
5302 	zval *value;
5303 	zend_reference *ref = NULL;
5304 	bool ret;
5305 
5306 	SAVE_OPLINE();
5307 	value = RT_CONSTANT(opline, opline->op1);
5308 
5309 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
5310 		if (IS_CONST == IS_VAR) {
5311 			ref = Z_REF_P(value);
5312 		}
5313 		value = Z_REFVAL_P(value);
5314 	}
5315 
5316 	ret = i_zend_is_true(value);
5317 
5318 	if (UNEXPECTED(EG(exception))) {
5319 
5320 		ZVAL_UNDEF(EX_VAR(opline->result.var));
5321 		HANDLE_EXCEPTION();
5322 	}
5323 
5324 	if (ret) {
5325 		zval *result = EX_VAR(opline->result.var);
5326 
5327 		ZVAL_COPY_VALUE(result, value);
5328 		if (IS_CONST == IS_CONST) {
5329 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
5330 		} else if (IS_CONST == IS_CV) {
5331 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
5332 		} else if (IS_CONST == IS_VAR && ref) {
5333 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
5334 				efree_size(ref, sizeof(zend_reference));
5335 			} else if (Z_OPT_REFCOUNTED_P(result)) {
5336 				Z_ADDREF_P(result);
5337 			}
5338 		}
5339 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5340 	}
5341 
5342 	ZEND_VM_NEXT_OPCODE();
5343 }
5344 
ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5345 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5346 {
5347 	USE_OPLINE
5348 	zval *value;
5349 	zend_reference *ref = NULL;
5350 
5351 	SAVE_OPLINE();
5352 	value = RT_CONSTANT(opline, opline->op1);
5353 
5354 	if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
5355 		if (IS_CONST & IS_VAR) {
5356 			ref = Z_REF_P(value);
5357 		}
5358 		value = Z_REFVAL_P(value);
5359 	}
5360 
5361 	if (Z_TYPE_P(value) > IS_NULL) {
5362 		zval *result = EX_VAR(opline->result.var);
5363 		ZVAL_COPY_VALUE(result, value);
5364 		if (IS_CONST == IS_CONST) {
5365 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
5366 		} else if (IS_CONST == IS_CV) {
5367 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
5368 		} else if ((IS_CONST & IS_VAR) && ref) {
5369 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
5370 				efree_size(ref, sizeof(zend_reference));
5371 			} else if (Z_OPT_REFCOUNTED_P(result)) {
5372 				Z_ADDREF_P(result);
5373 			}
5374 		}
5375 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5376 	}
5377 
5378 	if ((IS_CONST & IS_VAR) && ref) {
5379 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
5380 			efree_size(ref, sizeof(zend_reference));
5381 		}
5382 	}
5383 	ZEND_VM_NEXT_OPCODE();
5384 }
5385 
ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5386 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5387 {
5388 	USE_OPLINE
5389 	zval *val, *result;
5390 
5391 	val = RT_CONSTANT(opline, opline->op1);
5392 
5393 	if (Z_TYPE_P(val) > IS_NULL) {
5394 		do {
5395 			if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
5396 				val = Z_REFVAL_P(val);
5397 				if (Z_TYPE_P(val) <= IS_NULL) {
5398 
5399 					break;
5400 				}
5401 			}
5402 			ZEND_VM_NEXT_OPCODE();
5403 		} while (0);
5404 	}
5405 
5406 	result = EX_VAR(opline->result.var);
5407 	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
5408 	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
5409 		ZVAL_NULL(result);
5410 		if (IS_CONST == IS_CV
5411 			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
5412 			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
5413 		) {
5414 			SAVE_OPLINE();
5415 			ZVAL_UNDEFINED_OP1();
5416 			if (UNEXPECTED(EG(exception) != NULL)) {
5417 				HANDLE_EXCEPTION();
5418 			}
5419 		}
5420 	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
5421 		ZVAL_FALSE(result);
5422 	} else {
5423 		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
5424 		ZVAL_TRUE(result);
5425 	}
5426 
5427 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
5428 }
5429 
ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5430 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5431 {
5432 	USE_OPLINE
5433 	zval *value;
5434 	zval *result = EX_VAR(opline->result.var);
5435 
5436 	value = RT_CONSTANT(opline, opline->op1);
5437 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
5438 		SAVE_OPLINE();
5439 		ZVAL_UNDEFINED_OP1();
5440 		ZVAL_NULL(result);
5441 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5442 	}
5443 
5444 	if (IS_CONST == IS_CV) {
5445 		ZVAL_COPY_DEREF(result, value);
5446 	} else if (IS_CONST == IS_VAR) {
5447 		if (UNEXPECTED(Z_ISREF_P(value))) {
5448 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
5449 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
5450 				efree_size(Z_REF_P(value), sizeof(zend_reference));
5451 			} else if (Z_OPT_REFCOUNTED_P(result)) {
5452 				Z_ADDREF_P(result);
5453 			}
5454 		} else {
5455 			ZVAL_COPY_VALUE(result, value);
5456 		}
5457 	} else {
5458 		ZVAL_COPY_VALUE(result, value);
5459 		if (IS_CONST == IS_CONST) {
5460 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
5461 				Z_ADDREF_P(result);
5462 			}
5463 		}
5464 	}
5465 	ZEND_VM_NEXT_OPCODE();
5466 }
5467 
ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5468 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5469 {
5470 	USE_OPLINE
5471 
5472 	SAVE_OPLINE();
5473 	do_bind_class(RT_CONSTANT(opline, opline->op1), (opline->op2_type == IS_CONST) ? Z_STR_P(RT_CONSTANT(opline, opline->op2)) : NULL);
5474 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5475 }
5476 
ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5477 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5478 {
5479 	USE_OPLINE
5480 	zend_function *func;
5481 	zval *object;
5482 	zend_class_entry *called_scope;
5483 
5484 	func = (zend_function *) EX(func)->op_array.dynamic_func_defs[opline->op2.num];
5485 	if (Z_TYPE(EX(This)) == IS_OBJECT) {
5486 		called_scope = Z_OBJCE(EX(This));
5487 		if (UNEXPECTED((func->common.fn_flags & ZEND_ACC_STATIC) ||
5488 				(EX(func)->common.fn_flags & ZEND_ACC_STATIC))) {
5489 			object = NULL;
5490 		} else {
5491 			object = &EX(This);
5492 		}
5493 	} else {
5494 		called_scope = Z_CE(EX(This));
5495 		object = NULL;
5496 	}
5497 	SAVE_OPLINE();
5498 	zend_create_closure(EX_VAR(opline->result.var), func,
5499 		EX(func)->op_array.scope, called_scope, object);
5500 
5501 	ZEND_VM_NEXT_OPCODE();
5502 }
5503 
ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5504 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5505 {
5506 	USE_OPLINE
5507 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
5508 	zval *val;
5509 
5510 	SAVE_OPLINE();
5511 	val = RT_CONSTANT(opline, opline->op1);
5512 
5513 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
5514 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
5515 
5516 		UNDEF_RESULT();
5517 		HANDLE_EXCEPTION();
5518 	}
5519 
5520 yield_from_try_again:
5521 	if (Z_TYPE_P(val) == IS_ARRAY) {
5522 		ZVAL_COPY_VALUE(&generator->values, val);
5523 		if (Z_OPT_REFCOUNTED_P(val)) {
5524 			Z_ADDREF_P(val);
5525 		}
5526 		Z_FE_POS(generator->values) = 0;
5527 
5528 	} else if (IS_CONST != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
5529 		zend_class_entry *ce = Z_OBJCE_P(val);
5530 		if (ce == zend_ce_generator) {
5531 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
5532 
5533 			Z_ADDREF_P(val);
5534 
5535 			if (UNEXPECTED(new_gen->execute_data == NULL)) {
5536 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
5537 				zval_ptr_dtor(val);
5538 				UNDEF_RESULT();
5539 				HANDLE_EXCEPTION();
5540 			} else if (Z_ISUNDEF(new_gen->retval)) {
5541 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
5542 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
5543 					zval_ptr_dtor(val);
5544 					UNDEF_RESULT();
5545 					HANDLE_EXCEPTION();
5546 				} else {
5547 					zend_generator_yield_from(generator, new_gen);
5548 				}
5549 			} else {
5550 				if (RETURN_VALUE_USED(opline)) {
5551 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
5552 				}
5553 				ZEND_VM_NEXT_OPCODE();
5554 			}
5555 		} else {
5556 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
5557 
5558 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
5559 				if (!EG(exception)) {
5560 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
5561 				}
5562 				UNDEF_RESULT();
5563 				HANDLE_EXCEPTION();
5564 			}
5565 
5566 			iter->index = 0;
5567 			if (iter->funcs->rewind) {
5568 				iter->funcs->rewind(iter);
5569 				if (UNEXPECTED(EG(exception) != NULL)) {
5570 					OBJ_RELEASE(&iter->std);
5571 					UNDEF_RESULT();
5572 					HANDLE_EXCEPTION();
5573 				}
5574 			}
5575 
5576 			ZVAL_OBJ(&generator->values, &iter->std);
5577 		}
5578 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
5579 		val = Z_REFVAL_P(val);
5580 		goto yield_from_try_again;
5581 	} else {
5582 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
5583 
5584 		UNDEF_RESULT();
5585 		HANDLE_EXCEPTION();
5586 	}
5587 
5588 	/* This is the default return value
5589 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
5590 	if (RETURN_VALUE_USED(opline)) {
5591 		ZVAL_NULL(EX_VAR(opline->result.var));
5592 	}
5593 
5594 	/* This generator has no send target (though the generator we delegate to might have one) */
5595 	generator->send_target = NULL;
5596 
5597 	/* We increment to the next op, so we are at the correct position when the
5598 	 * generator is resumed. */
5599 	ZEND_VM_INC_OPCODE();
5600 
5601 	/* The GOTO VM uses a local opline variable. We need to set the opline
5602 	 * variable in execute_data so we don't resume at an old position. */
5603 	SAVE_OPLINE();
5604 
5605 	ZEND_VM_RETURN();
5606 }
5607 
ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5608 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5609 {
5610 	USE_OPLINE
5611 	zval *value;
5612 
5613 	value = RT_CONSTANT(opline, opline->op1);
5614 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
5615 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
5616 		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5617 			zval_ptr_dtor_str(value);
5618 		}
5619 		ZEND_VM_NEXT_OPCODE();
5620 	} else {
5621 		bool strict;
5622 
5623 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
5624 			value = Z_REFVAL_P(value);
5625 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
5626 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
5627 
5628 				ZEND_VM_NEXT_OPCODE();
5629 			}
5630 		}
5631 
5632 		SAVE_OPLINE();
5633 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
5634 			value = ZVAL_UNDEFINED_OP1();
5635 		}
5636 		strict = EX_USES_STRICT_TYPES();
5637 		do {
5638 			if (EXPECTED(!strict)) {
5639 				zend_string *str;
5640 				zval tmp;
5641 
5642 				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
5643 					zend_error(E_DEPRECATED,
5644 						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
5645 					ZVAL_LONG(EX_VAR(opline->result.var), 0);
5646 					if (UNEXPECTED(EG(exception))) {
5647 						HANDLE_EXCEPTION();
5648 					}
5649 					break;
5650 				}
5651 
5652 				ZVAL_COPY(&tmp, value);
5653 				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
5654 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
5655 					zval_ptr_dtor(&tmp);
5656 					break;
5657 				}
5658 				zval_ptr_dtor(&tmp);
5659 			}
5660 			if (!EG(exception)) {
5661 				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_value_name(value));
5662 			}
5663 			ZVAL_UNDEF(EX_VAR(opline->result.var));
5664 		} while (0);
5665 	}
5666 
5667 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5668 }
5669 
ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5670 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5671 {
5672 	USE_OPLINE
5673 	zval *value;
5674 	int result = 0;
5675 
5676 	value = RT_CONSTANT(opline, opline->op1);
5677 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
5678 type_check_resource:
5679 		if (opline->extended_value != MAY_BE_RESOURCE
5680 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
5681 			result = 1;
5682 		}
5683 	} else if ((IS_CONST & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
5684 		value = Z_REFVAL_P(value);
5685 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
5686 			goto type_check_resource;
5687 		}
5688 	} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
5689 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
5690 		SAVE_OPLINE();
5691 		ZVAL_UNDEFINED_OP1();
5692 		if (UNEXPECTED(EG(exception))) {
5693 			ZVAL_UNDEF(EX_VAR(opline->result.var));
5694 			HANDLE_EXCEPTION();
5695 		}
5696 	}
5697 	if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
5698 		SAVE_OPLINE();
5699 
5700 		ZEND_VM_SMART_BRANCH(result, 1);
5701 	} else {
5702 		ZEND_VM_SMART_BRANCH(result, 0);
5703 	}
5704 }
5705 
ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5706 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5707 {
5708 	USE_OPLINE
5709 	zend_constant *c;
5710 
5711 	c = CACHED_PTR(opline->extended_value);
5712 	if (EXPECTED(c != NULL)) {
5713 		if (!IS_SPECIAL_CACHE_VAL(c)) {
5714 defined_true:
5715 			ZEND_VM_SMART_BRANCH_TRUE();
5716 		} else if (EXPECTED(zend_hash_num_elements(EG(zend_constants)) == DECODE_SPECIAL_CACHE_NUM(c))) {
5717 defined_false:
5718 			ZEND_VM_SMART_BRANCH_FALSE();
5719 		}
5720 	}
5721 	if (zend_quick_check_constant(RT_CONSTANT(opline, opline->op1) OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) {
5722 		CACHE_PTR(opline->extended_value, ENCODE_SPECIAL_CACHE_NUM(zend_hash_num_elements(EG(zend_constants))));
5723 		goto defined_false;
5724 	} else {
5725 		goto defined_true;
5726 	}
5727 }
5728 
ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5729 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5730 {
5731 	USE_OPLINE
5732 	zval *value;
5733 
5734 	value = RT_CONSTANT(opline, opline->op1);
5735 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
5736 	ZEND_VM_NEXT_OPCODE();
5737 }
5738 
ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5739 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5740 {
5741 	USE_OPLINE
5742 	zval *value;
5743 
5744 	value = RT_CONSTANT(opline, opline->op1);
5745 	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
5746 	ZEND_VM_NEXT_OPCODE();
5747 }
5748 
ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5749 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5750 {
5751 	USE_OPLINE
5752 	zval *value;
5753 
5754 	value = RT_CONSTANT(opline, opline->op1);
5755 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
5756 	ZEND_VM_NEXT_OPCODE();
5757 }
5758 
ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5759 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5760 {
5761 	USE_OPLINE
5762 	zval *value, *arg;
5763 
5764 	value = RT_CONSTANT(opline, opline->op1);
5765 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
5766 	ZVAL_COPY_VALUE(arg, value);
5767 	ZEND_VM_NEXT_OPCODE();
5768 }
5769 
ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5770 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5771 {
5772 	USE_OPLINE
5773 	zval *value, *arg;
5774 	uint32_t arg_num = opline->op2.num;
5775 
5776 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
5777 	if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
5778 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5779 	}
5780 	value = RT_CONSTANT(opline, opline->op1);
5781 	ZVAL_COPY_VALUE(arg, value);
5782 	ZEND_VM_NEXT_OPCODE();
5783 }
5784 
ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5785 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5786 {
5787 	USE_OPLINE
5788 	zval *op1, *op2, *result;
5789 	double d1, d2;
5790 
5791 	op1 = RT_CONSTANT(opline, opline->op1);
5792 	op2 = RT_CONSTANT(opline, opline->op2);
5793 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5794 		/* pass */
5795 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5796 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5797 			result = EX_VAR(opline->result.var);
5798 			fast_long_add_function(result, op1, op2);
5799 			ZEND_VM_NEXT_OPCODE();
5800 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5801 			d1 = (double)Z_LVAL_P(op1);
5802 			d2 = Z_DVAL_P(op2);
5803 			goto add_double;
5804 		}
5805 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
5806 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5807 			d1 = Z_DVAL_P(op1);
5808 			d2 = Z_DVAL_P(op2);
5809 add_double:
5810 			result = EX_VAR(opline->result.var);
5811 			ZVAL_DOUBLE(result, d1 + d2);
5812 			ZEND_VM_NEXT_OPCODE();
5813 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5814 			d1 = Z_DVAL_P(op1);
5815 			d2 = (double)Z_LVAL_P(op2);
5816 			goto add_double;
5817 		}
5818 	}
5819 
5820 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5821 }
5822 
ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5823 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5824 {
5825 	USE_OPLINE
5826 	zval *op1, *op2, *result;
5827 	double d1, d2;
5828 
5829 	op1 = RT_CONSTANT(opline, opline->op1);
5830 	op2 = RT_CONSTANT(opline, opline->op2);
5831 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5832 		/* pass */
5833 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5834 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5835 			result = EX_VAR(opline->result.var);
5836 			fast_long_sub_function(result, op1, op2);
5837 			ZEND_VM_NEXT_OPCODE();
5838 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5839 			d1 = (double)Z_LVAL_P(op1);
5840 			d2 = Z_DVAL_P(op2);
5841 			goto sub_double;
5842 		}
5843 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
5844 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5845 			d1 = Z_DVAL_P(op1);
5846 			d2 = Z_DVAL_P(op2);
5847 sub_double:
5848 			result = EX_VAR(opline->result.var);
5849 			ZVAL_DOUBLE(result, d1 - d2);
5850 			ZEND_VM_NEXT_OPCODE();
5851 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5852 			d1 = Z_DVAL_P(op1);
5853 			d2 = (double)Z_LVAL_P(op2);
5854 			goto sub_double;
5855 		}
5856 	}
5857 
5858 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5859 }
5860 
ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5861 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5862 {
5863 	USE_OPLINE
5864 	zval *op1, *op2, *result;
5865 	double d1, d2;
5866 
5867 	op1 = RT_CONSTANT(opline, opline->op1);
5868 	op2 = RT_CONSTANT(opline, opline->op2);
5869 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5870 		/* pass */
5871 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5872 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5873 			zend_long overflow;
5874 
5875 			result = EX_VAR(opline->result.var);
5876 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
5877 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
5878 			ZEND_VM_NEXT_OPCODE();
5879 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5880 			d1 = (double)Z_LVAL_P(op1);
5881 			d2 = Z_DVAL_P(op2);
5882 			goto mul_double;
5883 		}
5884 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
5885 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
5886 			d1 = Z_DVAL_P(op1);
5887 			d2 = Z_DVAL_P(op2);
5888 mul_double:
5889 			result = EX_VAR(opline->result.var);
5890 			ZVAL_DOUBLE(result, d1 * d2);
5891 			ZEND_VM_NEXT_OPCODE();
5892 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5893 			d1 = Z_DVAL_P(op1);
5894 			d2 = (double)Z_LVAL_P(op2);
5895 			goto mul_double;
5896 		}
5897 	}
5898 
5899 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5900 }
5901 
ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5902 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5903 {
5904 	USE_OPLINE
5905 	zval *op1, *op2;
5906 
5907 	SAVE_OPLINE();
5908 	op1 = RT_CONSTANT(opline, opline->op1);
5909 	op2 = RT_CONSTANT(opline, opline->op2);
5910 	div_function(EX_VAR(opline->result.var), op1, op2);
5911 
5912 
5913 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5914 }
5915 
ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5916 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5917 {
5918 	USE_OPLINE
5919 	zval *op1, *op2, *result;
5920 
5921 	op1 = RT_CONSTANT(opline, opline->op1);
5922 	op2 = RT_CONSTANT(opline, opline->op2);
5923 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5924 		/* pass */
5925 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
5926 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
5927 			result = EX_VAR(opline->result.var);
5928 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
5929 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
5930 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
5931 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
5932 				ZVAL_LONG(result, 0);
5933 			} else {
5934 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
5935 			}
5936 			ZEND_VM_NEXT_OPCODE();
5937 		}
5938 	}
5939 
5940 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5941 }
5942 
ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5943 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5944 {
5945 	USE_OPLINE
5946 	zval *op1, *op2;
5947 
5948 	op1 = RT_CONSTANT(opline, opline->op1);
5949 	op2 = RT_CONSTANT(opline, opline->op2);
5950 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5951 		/* pass */
5952 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
5953 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
5954 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
5955 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
5956 		ZVAL_LONG(EX_VAR(opline->result.var),
5957 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
5958 		ZEND_VM_NEXT_OPCODE();
5959 	}
5960 
5961 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5962 }
5963 
ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5964 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5965 {
5966 	USE_OPLINE
5967 	zval *op1, *op2;
5968 
5969 	op1 = RT_CONSTANT(opline, opline->op1);
5970 	op2 = RT_CONSTANT(opline, opline->op2);
5971 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
5972 		/* pass */
5973 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
5974 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
5975 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
5976 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
5977 		ZEND_VM_NEXT_OPCODE();
5978 	}
5979 
5980 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
5981 }
5982 
ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5983 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5984 {
5985 	USE_OPLINE
5986 	zval *op1, *op2;
5987 
5988 	SAVE_OPLINE();
5989 	op1 = RT_CONSTANT(opline, opline->op1);
5990 	op2 = RT_CONSTANT(opline, opline->op2);
5991 	pow_function(EX_VAR(opline->result.var), op1, op2);
5992 
5993 
5994 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5995 }
5996 
ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)5997 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5998 {
5999 	USE_OPLINE
6000 	zval *op1, *op2;
6001 	bool result;
6002 
6003 	SAVE_OPLINE();
6004 	op1 = RT_CONSTANT(opline, opline->op1);
6005 	op2 = RT_CONSTANT(opline, opline->op2);
6006 	result = fast_is_identical_function(op1, op2);
6007 
6008 
6009 	ZEND_VM_SMART_BRANCH(result, 1);
6010 }
6011 
ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6012 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6013 {
6014 	USE_OPLINE
6015 	zval *op1, *op2;
6016 	bool result;
6017 
6018 	SAVE_OPLINE();
6019 	op1 = RT_CONSTANT(opline, opline->op1);
6020 	op2 = RT_CONSTANT(opline, opline->op2);
6021 	result = fast_is_not_identical_function(op1, op2);
6022 
6023 
6024 	ZEND_VM_SMART_BRANCH(result, 1);
6025 }
6026 
ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6027 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6028 {
6029 	USE_OPLINE
6030 	zval *op1, *op2;
6031 	double d1, d2;
6032 
6033 	op1 = RT_CONSTANT(opline, opline->op1);
6034 	op2 = RT_CONSTANT(opline, opline->op2);
6035 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6036 		/* pass */
6037 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
6038 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
6039 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
6040 is_equal_true:
6041 				ZEND_VM_SMART_BRANCH_TRUE();
6042 			} else {
6043 is_equal_false:
6044 				ZEND_VM_SMART_BRANCH_FALSE();
6045 			}
6046 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
6047 			d1 = (double)Z_LVAL_P(op1);
6048 			d2 = Z_DVAL_P(op2);
6049 			goto is_equal_double;
6050 		}
6051 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
6052 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
6053 			d1 = Z_DVAL_P(op1);
6054 			d2 = Z_DVAL_P(op2);
6055 is_equal_double:
6056 			if (d1 == d2) {
6057 				goto is_equal_true;
6058 			} else {
6059 				goto is_equal_false;
6060 			}
6061 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
6062 			d1 = Z_DVAL_P(op1);
6063 			d2 = (double)Z_LVAL_P(op2);
6064 			goto is_equal_double;
6065 		}
6066 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
6067 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
6068 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
6069 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6070 				zval_ptr_dtor_str(op1);
6071 			}
6072 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6073 				zval_ptr_dtor_str(op2);
6074 			}
6075 			if (result) {
6076 				goto is_equal_true;
6077 			} else {
6078 				goto is_equal_false;
6079 			}
6080 		}
6081 	}
6082 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6083 }
6084 
ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6085 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6086 {
6087 	USE_OPLINE
6088 	zval *op1, *op2;
6089 	double d1, d2;
6090 
6091 	op1 = RT_CONSTANT(opline, opline->op1);
6092 	op2 = RT_CONSTANT(opline, opline->op2);
6093 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6094 		/* pass */
6095 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
6096 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
6097 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
6098 is_not_equal_true:
6099 				ZEND_VM_SMART_BRANCH_TRUE();
6100 			} else {
6101 is_not_equal_false:
6102 				ZEND_VM_SMART_BRANCH_FALSE();
6103 			}
6104 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
6105 			d1 = (double)Z_LVAL_P(op1);
6106 			d2 = Z_DVAL_P(op2);
6107 			goto is_not_equal_double;
6108 		}
6109 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
6110 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
6111 			d1 = Z_DVAL_P(op1);
6112 			d2 = Z_DVAL_P(op2);
6113 is_not_equal_double:
6114 			if (d1 != d2) {
6115 				goto is_not_equal_true;
6116 			} else {
6117 				goto is_not_equal_false;
6118 			}
6119 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
6120 			d1 = Z_DVAL_P(op1);
6121 			d2 = (double)Z_LVAL_P(op2);
6122 			goto is_not_equal_double;
6123 		}
6124 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
6125 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
6126 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
6127 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6128 				zval_ptr_dtor_str(op1);
6129 			}
6130 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6131 				zval_ptr_dtor_str(op2);
6132 			}
6133 			if (!result) {
6134 				goto is_not_equal_true;
6135 			} else {
6136 				goto is_not_equal_false;
6137 			}
6138 		}
6139 	}
6140 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6141 }
6142 
ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6143 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6144 {
6145 	USE_OPLINE
6146 	zval *op1, *op2;
6147 	double d1, d2;
6148 
6149 	op1 = RT_CONSTANT(opline, opline->op1);
6150 	op2 = RT_CONSTANT(opline, opline->op2);
6151 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6152 		/* pass */
6153 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6154 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6155 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
6156 is_smaller_true:
6157 				ZEND_VM_SMART_BRANCH_TRUE();
6158 			} else {
6159 is_smaller_false:
6160 				ZEND_VM_SMART_BRANCH_FALSE();
6161 			}
6162 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6163 			d1 = (double)Z_LVAL_P(op1);
6164 			d2 = Z_DVAL_P(op2);
6165 			goto is_smaller_double;
6166 		}
6167 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
6168 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6169 			d1 = Z_DVAL_P(op1);
6170 			d2 = Z_DVAL_P(op2);
6171 is_smaller_double:
6172 			if (d1 < d2) {
6173 				goto is_smaller_true;
6174 			} else {
6175 				goto is_smaller_false;
6176 			}
6177 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6178 			d1 = Z_DVAL_P(op1);
6179 			d2 = (double)Z_LVAL_P(op2);
6180 			goto is_smaller_double;
6181 		}
6182 	}
6183 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6184 }
6185 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6186 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6187 {
6188 	USE_OPLINE
6189 	zval *op1, *op2;
6190 	double d1, d2;
6191 
6192 	op1 = RT_CONSTANT(opline, opline->op1);
6193 	op2 = RT_CONSTANT(opline, opline->op2);
6194 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6195 		/* pass */
6196 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
6197 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6198 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
6199 is_smaller_or_equal_true:
6200 				ZEND_VM_SMART_BRANCH_TRUE();
6201 				ZVAL_TRUE(EX_VAR(opline->result.var));
6202 				ZEND_VM_NEXT_OPCODE();
6203 			} else {
6204 is_smaller_or_equal_false:
6205 				ZEND_VM_SMART_BRANCH_FALSE();
6206 				ZVAL_FALSE(EX_VAR(opline->result.var));
6207 				ZEND_VM_NEXT_OPCODE();
6208 			}
6209 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6210 			d1 = (double)Z_LVAL_P(op1);
6211 			d2 = Z_DVAL_P(op2);
6212 			goto is_smaller_or_equal_double;
6213 		}
6214 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
6215 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
6216 			d1 = Z_DVAL_P(op1);
6217 			d2 = Z_DVAL_P(op2);
6218 is_smaller_or_equal_double:
6219 			if (d1 <= d2) {
6220 				goto is_smaller_or_equal_true;
6221 			} else {
6222 				goto is_smaller_or_equal_false;
6223 			}
6224 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6225 			d1 = Z_DVAL_P(op1);
6226 			d2 = (double)Z_LVAL_P(op2);
6227 			goto is_smaller_or_equal_double;
6228 		}
6229 	}
6230 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6231 }
6232 
ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6233 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6234 {
6235 	USE_OPLINE
6236 	zval *op1, *op2;
6237 
6238 	SAVE_OPLINE();
6239 	op1 = RT_CONSTANT(opline, opline->op1);
6240 	op2 = RT_CONSTANT(opline, opline->op2);
6241 	compare_function(EX_VAR(opline->result.var), op1, op2);
6242 
6243 
6244 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6245 }
6246 
ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6247 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6248 {
6249 	USE_OPLINE
6250 	zval *op1, *op2;
6251 
6252 	op1 = RT_CONSTANT(opline, opline->op1);
6253 	op2 = RT_CONSTANT(opline, opline->op2);
6254 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6255 		/* pass */
6256 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
6257 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6258 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
6259 		ZEND_VM_NEXT_OPCODE();
6260 	}
6261 
6262 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6263 }
6264 
ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6265 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6266 {
6267 	USE_OPLINE
6268 	zval *op1, *op2;
6269 
6270 	op1 = RT_CONSTANT(opline, opline->op1);
6271 	op2 = RT_CONSTANT(opline, opline->op2);
6272 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6273 		/* pass */
6274 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
6275 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6276 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
6277 		ZEND_VM_NEXT_OPCODE();
6278 	}
6279 
6280 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6281 }
6282 
ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6283 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6284 {
6285 	USE_OPLINE
6286 	zval *op1, *op2;
6287 
6288 	op1 = RT_CONSTANT(opline, opline->op1);
6289 	op2 = RT_CONSTANT(opline, opline->op2);
6290 	if (1 && IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
6291 		/* pass */
6292 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
6293 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
6294 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
6295 		ZEND_VM_NEXT_OPCODE();
6296 	}
6297 
6298 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
6299 }
6300 
ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6301 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6302 {
6303 	USE_OPLINE
6304 	zval *op1, *op2;
6305 
6306 	SAVE_OPLINE();
6307 	op1 = RT_CONSTANT(opline, opline->op1);
6308 	op2 = RT_CONSTANT(opline, opline->op2);
6309 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
6310 
6311 
6312 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6313 }
6314 
ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6315 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6316 {
6317 	USE_OPLINE
6318 	zval *container, *dim, *value;
6319 
6320 	SAVE_OPLINE();
6321 	container = RT_CONSTANT(opline, opline->op1);
6322 	dim = RT_CONSTANT(opline, opline->op2);
6323 	if (IS_CONST != IS_CONST) {
6324 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6325 fetch_dim_r_array:
6326 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
6327 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
6328 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
6329 			container = Z_REFVAL_P(container);
6330 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
6331 				goto fetch_dim_r_array;
6332 			} else {
6333 				goto fetch_dim_r_slow;
6334 			}
6335 		} else {
6336 fetch_dim_r_slow:
6337 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
6338 				dim++;
6339 			}
6340 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
6341 		}
6342 	} else {
6343 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
6344 	}
6345 
6346 
6347 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6348 }
6349 
ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6350 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6351 {
6352 	USE_OPLINE
6353 	zval *container;
6354 
6355 	SAVE_OPLINE();
6356 	container = RT_CONSTANT(opline, opline->op1);
6357 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
6358 
6359 
6360 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6361 }
6362 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6363 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6364 {
6365 #if 0
6366 	USE_OPLINE
6367 #endif
6368 
6369 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
6370 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
6371 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6372 		}
6373 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6374 	} else {
6375 		if (IS_CONST == IS_UNUSED) {
6376 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6377 		}
6378 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6379 	}
6380 }
6381 
ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6382 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6383 {
6384 	USE_OPLINE
6385 	zval *container;
6386 	void **cache_slot = NULL;
6387 
6388 	SAVE_OPLINE();
6389 	container = RT_CONSTANT(opline, opline->op1);
6390 
6391 	if (IS_CONST == IS_CONST ||
6392 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
6393 		do {
6394 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
6395 				container = Z_REFVAL_P(container);
6396 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
6397 					break;
6398 				}
6399 			}
6400 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
6401 				ZVAL_UNDEFINED_OP1();
6402 			}
6403 			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
6404 			ZVAL_NULL(EX_VAR(opline->result.var));
6405 			goto fetch_obj_r_finish;
6406 		} while (0);
6407 	}
6408 
6409 	/* here we are sure we are dealing with an object */
6410 	do {
6411 		zend_object *zobj = Z_OBJ_P(container);
6412 		zend_string *name, *tmp_name;
6413 		zval *retval;
6414 
6415 		if (IS_CONST == IS_CONST) {
6416 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
6417 
6418 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
6419 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
6420 
6421 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
6422 					retval = OBJ_PROP(zobj, prop_offset);
6423 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
6424 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6425 							goto fetch_obj_r_copy;
6426 						} else {
6427 fetch_obj_r_fast_copy:
6428 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6429 							ZEND_VM_NEXT_OPCODE();
6430 						}
6431 					}
6432 				} else if (EXPECTED(zobj->properties != NULL)) {
6433 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6434 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
6435 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
6436 
6437 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
6438 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
6439 
6440 							if (EXPECTED(p->key == name) ||
6441 							    (EXPECTED(p->h == ZSTR_H(name)) &&
6442 							     EXPECTED(p->key != NULL) &&
6443 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
6444 								retval = &p->val;
6445 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6446 									goto fetch_obj_r_copy;
6447 								} else {
6448 									goto fetch_obj_r_fast_copy;
6449 								}
6450 							}
6451 						}
6452 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
6453 					}
6454 					retval = zend_hash_find_known_hash(zobj->properties, name);
6455 					if (EXPECTED(retval)) {
6456 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
6457 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
6458 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6459 							goto fetch_obj_r_copy;
6460 						} else {
6461 							goto fetch_obj_r_fast_copy;
6462 						}
6463 					}
6464 				}
6465 			}
6466 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6467 		} else {
6468 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
6469 			if (UNEXPECTED(!name)) {
6470 				ZVAL_UNDEF(EX_VAR(opline->result.var));
6471 				break;
6472 			}
6473 		}
6474 
6475 #if ZEND_DEBUG
6476 		/* For non-standard object handlers, verify a declared property type in debug builds.
6477 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
6478 		zend_property_info *prop_info = NULL;
6479 		if (zobj->handlers->read_property != zend_std_read_property) {
6480 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
6481 		}
6482 #endif
6483 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
6484 #if ZEND_DEBUG
6485 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
6486 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
6487 			ZVAL_OPT_DEREF(retval);
6488 			zend_verify_property_type(prop_info, retval, /* strict */ true);
6489 		}
6490 #endif
6491 
6492 		if (IS_CONST != IS_CONST) {
6493 			zend_tmp_string_release(tmp_name);
6494 		}
6495 
6496 		if (retval != EX_VAR(opline->result.var)) {
6497 fetch_obj_r_copy:
6498 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6499 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
6500 			zend_unwrap_reference(retval);
6501 		}
6502 	} while (0);
6503 
6504 fetch_obj_r_finish:
6505 
6506 
6507 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6508 }
6509 
ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6510 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6511 {
6512 	USE_OPLINE
6513 	zval *container;
6514 	void **cache_slot = NULL;
6515 
6516 	SAVE_OPLINE();
6517 	container = RT_CONSTANT(opline, opline->op1);
6518 
6519 	if (IS_CONST == IS_CONST ||
6520 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
6521 		do {
6522 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
6523 				container = Z_REFVAL_P(container);
6524 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
6525 					break;
6526 				}
6527 			}
6528 			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
6529 				ZVAL_UNDEFINED_OP2();
6530 			}
6531 			ZVAL_NULL(EX_VAR(opline->result.var));
6532 			goto fetch_obj_is_finish;
6533 		} while (0);
6534 	}
6535 
6536 	/* here we are sure we are dealing with an object */
6537 	do {
6538 		zend_object *zobj = Z_OBJ_P(container);
6539 		zend_string *name, *tmp_name;
6540 		zval *retval;
6541 
6542 		if (IS_CONST == IS_CONST) {
6543 			cache_slot = CACHE_ADDR(opline->extended_value);
6544 
6545 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
6546 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
6547 
6548 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
6549 					retval = OBJ_PROP(zobj, prop_offset);
6550 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
6551 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6552 							goto fetch_obj_is_copy;
6553 						} else {
6554 fetch_obj_is_fast_copy:
6555 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6556 							ZEND_VM_NEXT_OPCODE();
6557 						}
6558 					}
6559 				} else if (EXPECTED(zobj->properties != NULL)) {
6560 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6561 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
6562 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
6563 
6564 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
6565 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
6566 
6567 							if (EXPECTED(p->key == name) ||
6568 							    (EXPECTED(p->h == ZSTR_H(name)) &&
6569 							     EXPECTED(p->key != NULL) &&
6570 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
6571 								retval = &p->val;
6572 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6573 									goto fetch_obj_is_copy;
6574 								} else {
6575 									goto fetch_obj_is_fast_copy;
6576 								}
6577 							}
6578 						}
6579 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
6580 					}
6581 					retval = zend_hash_find_known_hash(zobj->properties, name);
6582 					if (EXPECTED(retval)) {
6583 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
6584 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
6585 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
6586 							goto fetch_obj_is_copy;
6587 						} else {
6588 							goto fetch_obj_is_fast_copy;
6589 						}
6590 					}
6591 				}
6592 			}
6593 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
6594 		} else {
6595 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
6596 			if (UNEXPECTED(!name)) {
6597 				ZVAL_UNDEF(EX_VAR(opline->result.var));
6598 				break;
6599 			}
6600 		}
6601 
6602 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
6603 
6604 		if (IS_CONST != IS_CONST) {
6605 			zend_tmp_string_release(tmp_name);
6606 		}
6607 
6608 		if (retval != EX_VAR(opline->result.var)) {
6609 fetch_obj_is_copy:
6610 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
6611 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
6612 			zend_unwrap_reference(retval);
6613 		}
6614 	} while (0);
6615 
6616 fetch_obj_is_finish:
6617 
6618 
6619 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6620 }
6621 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6622 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6623 {
6624 #if 0
6625 	USE_OPLINE
6626 #endif
6627 
6628 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
6629 		/* Behave like FETCH_OBJ_W */
6630 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
6631 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6632 		}
6633 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6634 	} else {
6635 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
6636 	}
6637 }
6638 
ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6639 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6640 {
6641 	USE_OPLINE
6642 	zval *container;
6643 
6644 	SAVE_OPLINE();
6645 	container = RT_CONSTANT(opline, opline->op1);
6646 	zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
6647 
6648 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6649 }
6650 
ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6651 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6652 {
6653 	USE_OPLINE
6654 	zval *op1, *op2;
6655 	zend_string *op1_str, *op2_str, *str;
6656 
6657 
6658 	op1 = RT_CONSTANT(opline, opline->op1);
6659 	op2 = RT_CONSTANT(opline, opline->op2);
6660 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
6661 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
6662 		zend_string *op1_str = Z_STR_P(op1);
6663 		zend_string *op2_str = Z_STR_P(op2);
6664 		zend_string *str;
6665 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
6666 
6667 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
6668 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
6669 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
6670 			} else {
6671 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
6672 			}
6673 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6674 				zend_string_release_ex(op1_str, 0);
6675 			}
6676 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
6677 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
6678 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
6679 			} else {
6680 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
6681 			}
6682 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6683 				zend_string_release_ex(op2_str, 0);
6684 			}
6685 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
6686 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
6687 			size_t len = ZSTR_LEN(op1_str);
6688 
6689 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
6690 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
6691 			GC_ADD_FLAGS(str, flags);
6692 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
6693 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6694 				zend_string_release_ex(op2_str, 0);
6695 			}
6696 		} else {
6697 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
6698 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
6699 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
6700 			GC_ADD_FLAGS(str, flags);
6701 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
6702 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6703 				zend_string_release_ex(op1_str, 0);
6704 			}
6705 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
6706 				zend_string_release_ex(op2_str, 0);
6707 			}
6708 		}
6709 		ZEND_VM_NEXT_OPCODE();
6710 	}
6711 
6712 	SAVE_OPLINE();
6713 	if (IS_CONST == IS_CONST) {
6714 		op1_str = Z_STR_P(op1);
6715 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
6716 		op1_str = zend_string_copy(Z_STR_P(op1));
6717 	} else {
6718 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
6719 			ZVAL_UNDEFINED_OP1();
6720 		}
6721 		op1_str = zval_get_string_func(op1);
6722 	}
6723 	if (IS_CONST == IS_CONST) {
6724 		op2_str = Z_STR_P(op2);
6725 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
6726 		op2_str = zend_string_copy(Z_STR_P(op2));
6727 	} else {
6728 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
6729 			ZVAL_UNDEFINED_OP2();
6730 		}
6731 		op2_str = zval_get_string_func(op2);
6732 	}
6733 	do {
6734 		if (IS_CONST != IS_CONST) {
6735 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
6736 				if (IS_CONST == IS_CONST) {
6737 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
6738 						GC_ADDREF(op2_str);
6739 					}
6740 				}
6741 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
6742 				zend_string_release_ex(op1_str, 0);
6743 				break;
6744 			}
6745 		}
6746 		if (IS_CONST != IS_CONST) {
6747 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
6748 				if (IS_CONST == IS_CONST) {
6749 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
6750 						GC_ADDREF(op1_str);
6751 					}
6752 				}
6753 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
6754 				zend_string_release_ex(op2_str, 0);
6755 				break;
6756 			}
6757 		}
6758 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
6759 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
6760 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
6761 
6762 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
6763 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
6764 		if (IS_CONST != IS_CONST) {
6765 			zend_string_release_ex(op1_str, 0);
6766 		}
6767 		if (IS_CONST != IS_CONST) {
6768 			zend_string_release_ex(op2_str, 0);
6769 		}
6770 	} while (0);
6771 
6772 
6773 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
6774 }
6775 
ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6776 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6777 {
6778 	USE_OPLINE
6779 	zval *function_name;
6780 	zval *object;
6781 	zend_function *fbc;
6782 	zend_class_entry *called_scope;
6783 	zend_object *obj;
6784 	zend_execute_data *call;
6785 	uint32_t call_info;
6786 
6787 	SAVE_OPLINE();
6788 
6789 	object = RT_CONSTANT(opline, opline->op1);
6790 
6791 	if (IS_CONST != IS_CONST) {
6792 		function_name = RT_CONSTANT(opline, opline->op2);
6793 	}
6794 
6795 	if (IS_CONST != IS_CONST &&
6796 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
6797 		do {
6798 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
6799 				function_name = Z_REFVAL_P(function_name);
6800 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
6801 					break;
6802 				}
6803 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
6804 				ZVAL_UNDEFINED_OP2();
6805 				if (UNEXPECTED(EG(exception) != NULL)) {
6806 
6807 					HANDLE_EXCEPTION();
6808 				}
6809 			}
6810 			zend_throw_error(NULL, "Method name must be a string");
6811 
6812 
6813 			HANDLE_EXCEPTION();
6814 		} while (0);
6815 	}
6816 
6817 	if (IS_CONST == IS_UNUSED) {
6818 		obj = Z_OBJ_P(object);
6819 	} else {
6820 		do {
6821 			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
6822 				obj = Z_OBJ_P(object);
6823 			} else {
6824 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
6825 					zend_reference *ref = Z_REF_P(object);
6826 
6827 					object = &ref->val;
6828 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
6829 						obj = Z_OBJ_P(object);
6830 						if (IS_CONST & IS_VAR) {
6831 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
6832 								efree_size(ref, sizeof(zend_reference));
6833 							} else {
6834 								Z_ADDREF_P(object);
6835 							}
6836 						}
6837 						break;
6838 					}
6839 				}
6840 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
6841 					object = ZVAL_UNDEFINED_OP1();
6842 					if (UNEXPECTED(EG(exception) != NULL)) {
6843 						if (IS_CONST != IS_CONST) {
6844 
6845 						}
6846 						HANDLE_EXCEPTION();
6847 					}
6848 				}
6849 				if (IS_CONST == IS_CONST) {
6850 					function_name = RT_CONSTANT(opline, opline->op2);
6851 				}
6852 				zend_invalid_method_call(object, function_name);
6853 
6854 
6855 				HANDLE_EXCEPTION();
6856 			}
6857 		} while (0);
6858 	}
6859 
6860 	called_scope = obj->ce;
6861 
6862 	if (IS_CONST == IS_CONST &&
6863 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
6864 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
6865 	} else {
6866 		zend_object *orig_obj = obj;
6867 
6868 		if (IS_CONST == IS_CONST) {
6869 			function_name = RT_CONSTANT(opline, opline->op2);
6870 		}
6871 
6872 		/* First, locate the function. */
6873 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
6874 		if (UNEXPECTED(fbc == NULL)) {
6875 			if (EXPECTED(!EG(exception))) {
6876 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
6877 			}
6878 
6879 			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
6880 				zend_objects_store_del(orig_obj);
6881 			}
6882 			HANDLE_EXCEPTION();
6883 		}
6884 		if (IS_CONST == IS_CONST &&
6885 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
6886 		    EXPECTED(obj == orig_obj)) {
6887 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
6888 		}
6889 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
6890 			GC_ADDREF(obj); /* For $this pointer */
6891 			if (GC_DELREF(orig_obj) == 0) {
6892 				zend_objects_store_del(orig_obj);
6893 			}
6894 		}
6895 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
6896 			init_func_run_time_cache(&fbc->op_array);
6897 		}
6898 	}
6899 
6900 	if (IS_CONST != IS_CONST) {
6901 
6902 	}
6903 
6904 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
6905 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
6906 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
6907 			zend_objects_store_del(obj);
6908 			if (UNEXPECTED(EG(exception))) {
6909 				HANDLE_EXCEPTION();
6910 			}
6911 		}
6912 		/* call static method */
6913 		obj = (zend_object*)called_scope;
6914 		call_info = ZEND_CALL_NESTED_FUNCTION;
6915 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
6916 		if (IS_CONST == IS_CV) {
6917 			GC_ADDREF(obj); /* For $this pointer */
6918 		}
6919 		/* CV may be changed indirectly (e.g. when it's a reference) */
6920 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
6921 	}
6922 
6923 	call = zend_vm_stack_push_call_frame(call_info,
6924 		fbc, opline->extended_value, obj);
6925 	call->prev_execute_data = EX(call);
6926 	EX(call) = call;
6927 
6928 	ZEND_VM_NEXT_OPCODE();
6929 }
6930 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)6931 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6932 {
6933 	USE_OPLINE
6934 	zval *function_name;
6935 	zend_class_entry *ce;
6936 	uint32_t call_info;
6937 	zend_function *fbc;
6938 	zend_execute_data *call;
6939 
6940 	SAVE_OPLINE();
6941 
6942 	if (IS_CONST == IS_CONST) {
6943 		/* no function found. try a static method in class */
6944 		ce = CACHED_PTR(opline->result.num);
6945 		if (UNEXPECTED(ce == NULL)) {
6946 			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);
6947 			if (UNEXPECTED(ce == NULL)) {
6948 
6949 				HANDLE_EXCEPTION();
6950 			}
6951 			if (IS_CONST != IS_CONST) {
6952 				CACHE_PTR(opline->result.num, ce);
6953 			}
6954 		}
6955 	} else if (IS_CONST == IS_UNUSED) {
6956 		ce = zend_fetch_class(NULL, opline->op1.num);
6957 		if (UNEXPECTED(ce == NULL)) {
6958 
6959 			HANDLE_EXCEPTION();
6960 		}
6961 	} else {
6962 		ce = Z_CE_P(EX_VAR(opline->op1.var));
6963 	}
6964 
6965 	if (IS_CONST == IS_CONST &&
6966 	    IS_CONST == IS_CONST &&
6967 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
6968 		/* nothing to do */
6969 	} else if (IS_CONST != IS_CONST &&
6970 	           IS_CONST == IS_CONST &&
6971 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
6972 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
6973 	} else if (IS_CONST != IS_UNUSED) {
6974 		function_name = RT_CONSTANT(opline, opline->op2);
6975 		if (IS_CONST != IS_CONST) {
6976 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
6977 				do {
6978 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
6979 						function_name = Z_REFVAL_P(function_name);
6980 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
6981 							break;
6982 						}
6983 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
6984 						ZVAL_UNDEFINED_OP2();
6985 						if (UNEXPECTED(EG(exception) != NULL)) {
6986 							HANDLE_EXCEPTION();
6987 						}
6988 					}
6989 					zend_throw_error(NULL, "Method name must be a string");
6990 
6991 					HANDLE_EXCEPTION();
6992 				} while (0);
6993 			}
6994 		}
6995 
6996 		if (ce->get_static_method) {
6997 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
6998 		} else {
6999 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
7000 		}
7001 		if (UNEXPECTED(fbc == NULL)) {
7002 			if (EXPECTED(!EG(exception))) {
7003 				zend_undefined_method(ce, Z_STR_P(function_name));
7004 			}
7005 
7006 			HANDLE_EXCEPTION();
7007 		}
7008 		if (IS_CONST == IS_CONST &&
7009 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
7010 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
7011 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
7012 		}
7013 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
7014 			init_func_run_time_cache(&fbc->op_array);
7015 		}
7016 		if (IS_CONST != IS_CONST) {
7017 
7018 		}
7019 	} else {
7020 		if (UNEXPECTED(ce->constructor == NULL)) {
7021 			zend_throw_error(NULL, "Cannot call constructor");
7022 			HANDLE_EXCEPTION();
7023 		}
7024 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
7025 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
7026 			HANDLE_EXCEPTION();
7027 		}
7028 		fbc = ce->constructor;
7029 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
7030 			init_func_run_time_cache(&fbc->op_array);
7031 		}
7032 	}
7033 
7034 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
7035 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
7036 			ce = (zend_class_entry*)Z_OBJ(EX(This));
7037 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
7038 		} else {
7039 			zend_non_static_method_call(fbc);
7040 			HANDLE_EXCEPTION();
7041 		}
7042 	} else {
7043 		/* previous opcode is ZEND_FETCH_CLASS */
7044 		if (IS_CONST == IS_UNUSED
7045 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
7046 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
7047 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
7048 				ce = Z_OBJCE(EX(This));
7049 			} else {
7050 				ce = Z_CE(EX(This));
7051 			}
7052 		}
7053 		call_info = ZEND_CALL_NESTED_FUNCTION;
7054 	}
7055 
7056 	call = zend_vm_stack_push_call_frame(call_info,
7057 		fbc, opline->extended_value, ce);
7058 	call->prev_execute_data = EX(call);
7059 	EX(call) = call;
7060 
7061 	ZEND_VM_NEXT_OPCODE();
7062 }
7063 
ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7064 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7065 {
7066 	USE_OPLINE
7067 	zval *function_name;
7068 	zend_fcall_info_cache fcc;
7069 	char *error = NULL;
7070 	zend_function *func;
7071 	void *object_or_called_scope;
7072 	zend_execute_data *call;
7073 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
7074 
7075 	SAVE_OPLINE();
7076 	function_name = RT_CONSTANT(opline, opline->op2);
7077 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
7078 		ZEND_ASSERT(!error);
7079 		func = fcc.function_handler;
7080 		object_or_called_scope = fcc.called_scope;
7081 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
7082 			/* Delay closure destruction until its invocation */
7083 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
7084 			call_info |= ZEND_CALL_CLOSURE;
7085 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
7086 				call_info |= ZEND_CALL_FAKE_CLOSURE;
7087 			}
7088 			if (fcc.object) {
7089 				object_or_called_scope = fcc.object;
7090 				call_info |= ZEND_CALL_HAS_THIS;
7091 			}
7092 		} else if (fcc.object) {
7093 			GC_ADDREF(fcc.object); /* For $this pointer */
7094 			object_or_called_scope = fcc.object;
7095 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
7096 		}
7097 
7098 		if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
7099 			if (call_info & ZEND_CALL_CLOSURE) {
7100 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
7101 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
7102 				zend_object_release(fcc.object);
7103 			}
7104 			HANDLE_EXCEPTION();
7105 		}
7106 
7107 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
7108 			init_func_run_time_cache(&func->op_array);
7109 		}
7110 	} else {
7111 		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
7112 		efree(error);
7113 
7114 		HANDLE_EXCEPTION();
7115 	}
7116 
7117 	call = zend_vm_stack_push_call_frame(call_info,
7118 		func, opline->extended_value, object_or_called_scope);
7119 	call->prev_execute_data = EX(call);
7120 	EX(call) = call;
7121 
7122 	ZEND_VM_NEXT_OPCODE();
7123 }
7124 
ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7125 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7126 {
7127 	USE_OPLINE
7128 	zval *value, *arg;
7129 
7130 	if (IS_CONST == IS_CONST) {
7131 		SAVE_OPLINE();
7132 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
7133 		uint32_t arg_num;
7134 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
7135 		if (UNEXPECTED(!arg)) {
7136 
7137 			HANDLE_EXCEPTION();
7138 		}
7139 	} else {
7140 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
7141 	}
7142 
7143 	value = RT_CONSTANT(opline, opline->op1);
7144 	ZVAL_COPY_VALUE(arg, value);
7145 	if (IS_CONST == IS_CONST) {
7146 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
7147 			Z_ADDREF_P(arg);
7148 		}
7149 	}
7150 	ZEND_VM_NEXT_OPCODE();
7151 }
7152 
ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7153 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7154 {
7155 	USE_OPLINE
7156 	zval *value, *arg;
7157 	uint32_t arg_num;
7158 
7159 	if (IS_CONST == IS_CONST) {
7160 		SAVE_OPLINE();
7161 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
7162 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
7163 		if (UNEXPECTED(!arg)) {
7164 
7165 			HANDLE_EXCEPTION();
7166 		}
7167 	} else {
7168 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
7169 		arg_num = opline->op2.num;
7170 	}
7171 
7172 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
7173 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
7174 			goto send_val_by_ref;
7175 		}
7176 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
7177 send_val_by_ref:
7178 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7179 	}
7180 	value = RT_CONSTANT(opline, opline->op1);
7181 	ZVAL_COPY_VALUE(arg, value);
7182 	if (IS_CONST == IS_CONST) {
7183 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
7184 			Z_ADDREF_P(arg);
7185 		}
7186 	}
7187 	ZEND_VM_NEXT_OPCODE();
7188 }
7189 
ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7190 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7191 {
7192 	zend_class_entry *ce, *scope;
7193 	zend_class_constant *c;
7194 	zval *value, *zv, *constant_zv;
7195 	zend_string *constant_name;
7196 	USE_OPLINE
7197 
7198 	SAVE_OPLINE();
7199 
7200 	do {
7201 		if (IS_CONST == IS_CONST && IS_CONST == IS_CONST) {
7202 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
7203 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
7204 				break;
7205 			}
7206 		}
7207 		if (IS_CONST == IS_CONST) {
7208 			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
7209 				ce = CACHED_PTR(opline->extended_value);
7210 			} else {
7211 				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);
7212 				if (UNEXPECTED(ce == NULL)) {
7213 					ZVAL_UNDEF(EX_VAR(opline->result.var));
7214 
7215 					HANDLE_EXCEPTION();
7216 				}
7217 				CACHE_PTR(opline->extended_value, ce);
7218 			}
7219 		} else if (IS_CONST == IS_UNUSED) {
7220 			ce = zend_fetch_class(NULL, opline->op1.num);
7221 			if (UNEXPECTED(ce == NULL)) {
7222 				ZVAL_UNDEF(EX_VAR(opline->result.var));
7223 
7224 				HANDLE_EXCEPTION();
7225 			}
7226 		} else {
7227 			ce = Z_CE_P(EX_VAR(opline->op1.var));
7228 		}
7229 		if (IS_CONST != IS_CONST
7230 			&& IS_CONST == IS_CONST
7231 			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
7232 			value = CACHED_PTR(opline->extended_value + sizeof(void*));
7233 			break;
7234 		}
7235 
7236 		constant_zv = RT_CONSTANT(opline, opline->op2);
7237 		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
7238 			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
7239 			ZVAL_UNDEF(EX_VAR(opline->result.var));
7240 
7241 			HANDLE_EXCEPTION();
7242 		}
7243 		constant_name = Z_STR_P(constant_zv);
7244 		/* Magic 'class' for constant OP2 is caught at compile-time */
7245 		if (IS_CONST != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
7246 			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
7247 
7248 			ZEND_VM_NEXT_OPCODE();
7249 		}
7250 		zv = IS_CONST == IS_CONST
7251 			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
7252 			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);
7253 
7254 		if (EXPECTED(zv != NULL)) {
7255 			c = Z_PTR_P(zv);
7256 			scope = EX(func)->op_array.scope;
7257 			if (!zend_verify_const_access(c, scope)) {
7258 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
7259 				ZVAL_UNDEF(EX_VAR(opline->result.var));
7260 
7261 				HANDLE_EXCEPTION();
7262 			}
7263 
7264 			if (ce->ce_flags & ZEND_ACC_TRAIT) {
7265 				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
7266 				ZVAL_UNDEF(EX_VAR(opline->result.var));
7267 
7268 				HANDLE_EXCEPTION();
7269 			}
7270 
7271 			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
7272 			if (UNEXPECTED(is_constant_deprecated)) {
7273 				zend_error(E_DEPRECATED, "Constant %s::%s is deprecated", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
7274 
7275 				if (EG(exception)) {
7276 					ZVAL_UNDEF(EX_VAR(opline->result.var));
7277 
7278 					HANDLE_EXCEPTION();
7279 				}
7280 			}
7281 
7282 			value = &c->value;
7283 			// Enums require loading of all class constants to build the backed enum table
7284 			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
7285 				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
7286 					ZVAL_UNDEF(EX_VAR(opline->result.var));
7287 
7288 					HANDLE_EXCEPTION();
7289 				}
7290 			}
7291 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
7292 				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
7293 					ZVAL_UNDEF(EX_VAR(opline->result.var));
7294 
7295 					HANDLE_EXCEPTION();
7296 				}
7297 			}
7298 			if (IS_CONST == IS_CONST && !is_constant_deprecated) {
7299 				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
7300 			}
7301 		} else {
7302 			zend_throw_error(NULL, "Undefined constant %s::%s",
7303 				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
7304 			ZVAL_UNDEF(EX_VAR(opline->result.var));
7305 
7306 			HANDLE_EXCEPTION();
7307 		}
7308 	} while (0);
7309 
7310 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
7311 
7312 	ZEND_VM_NEXT_OPCODE();
7313 }
7314 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7315 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7316 {
7317 	USE_OPLINE
7318 	zval *expr_ptr, new_expr;
7319 
7320 	SAVE_OPLINE();
7321 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
7322 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
7323 		expr_ptr = zend_get_bad_ptr();
7324 		if (Z_ISREF_P(expr_ptr)) {
7325 			Z_ADDREF_P(expr_ptr);
7326 		} else {
7327 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
7328 		}
7329 
7330 	} else {
7331 		expr_ptr = RT_CONSTANT(opline, opline->op1);
7332 		if (IS_CONST == IS_TMP_VAR) {
7333 			/* pass */
7334 		} else if (IS_CONST == IS_CONST) {
7335 			Z_TRY_ADDREF_P(expr_ptr);
7336 		} else if (IS_CONST == IS_CV) {
7337 			ZVAL_DEREF(expr_ptr);
7338 			Z_TRY_ADDREF_P(expr_ptr);
7339 		} else /* if (IS_CONST == IS_VAR) */ {
7340 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
7341 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
7342 
7343 				expr_ptr = Z_REFVAL_P(expr_ptr);
7344 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
7345 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
7346 					expr_ptr = &new_expr;
7347 					efree_size(ref, sizeof(zend_reference));
7348 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
7349 					Z_ADDREF_P(expr_ptr);
7350 				}
7351 			}
7352 		}
7353 	}
7354 
7355 	if (IS_CONST != IS_UNUSED) {
7356 		zval *offset = RT_CONSTANT(opline, opline->op2);
7357 		zend_string *str;
7358 		zend_ulong hval;
7359 
7360 add_again:
7361 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
7362 			str = Z_STR_P(offset);
7363 			if (IS_CONST != IS_CONST) {
7364 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
7365 					goto num_index;
7366 				}
7367 			}
7368 str_index:
7369 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
7370 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
7371 			hval = Z_LVAL_P(offset);
7372 num_index:
7373 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
7374 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
7375 			offset = Z_REFVAL_P(offset);
7376 			goto add_again;
7377 		} else if (Z_TYPE_P(offset) == IS_NULL) {
7378 			str = ZSTR_EMPTY_ALLOC();
7379 			goto str_index;
7380 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
7381 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
7382 			goto num_index;
7383 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
7384 			hval = 0;
7385 			goto num_index;
7386 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
7387 			hval = 1;
7388 			goto num_index;
7389 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
7390 			zend_use_resource_as_offset(offset);
7391 			hval = Z_RES_HANDLE_P(offset);
7392 			goto num_index;
7393 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
7394 			ZVAL_UNDEFINED_OP2();
7395 			str = ZSTR_EMPTY_ALLOC();
7396 			goto str_index;
7397 		} else {
7398 			zend_illegal_array_offset_access(offset);
7399 			zval_ptr_dtor_nogc(expr_ptr);
7400 		}
7401 
7402 	} else {
7403 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
7404 			zend_cannot_add_element();
7405 			zval_ptr_dtor_nogc(expr_ptr);
7406 		}
7407 	}
7408 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7409 }
7410 
ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7411 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7412 {
7413 	zval *array;
7414 	uint32_t size;
7415 	USE_OPLINE
7416 
7417 	array = EX_VAR(opline->result.var);
7418 	if (IS_CONST != IS_UNUSED) {
7419 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
7420 		ZVAL_ARR(array, zend_new_array(size));
7421 		/* Explicitly initialize array as not-packed if flag is set */
7422 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
7423 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
7424 		}
7425 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7426 	} else {
7427 		ZVAL_ARR(array, zend_new_array(0));
7428 		ZEND_VM_NEXT_OPCODE();
7429 	}
7430 }
7431 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7432 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7433 {
7434 	USE_OPLINE
7435 	zval *container;
7436 	bool result;
7437 	zend_ulong hval;
7438 	zval *offset;
7439 
7440 	SAVE_OPLINE();
7441 	container = RT_CONSTANT(opline, opline->op1);
7442 	offset = RT_CONSTANT(opline, opline->op2);
7443 
7444 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
7445 		HashTable *ht;
7446 		zval *value;
7447 		zend_string *str;
7448 
7449 isset_dim_obj_array:
7450 		ht = Z_ARRVAL_P(container);
7451 isset_again:
7452 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
7453 			str = Z_STR_P(offset);
7454 			if (IS_CONST != IS_CONST) {
7455 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
7456 					goto num_index_prop;
7457 				}
7458 			}
7459 			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
7460 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
7461 			hval = Z_LVAL_P(offset);
7462 num_index_prop:
7463 			value = zend_hash_index_find(ht, hval);
7464 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
7465 			offset = Z_REFVAL_P(offset);
7466 			goto isset_again;
7467 		} else {
7468 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
7469 			if (UNEXPECTED(EG(exception))) {
7470 				result = 0;
7471 				goto isset_dim_obj_exit;
7472 			}
7473 		}
7474 
7475 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
7476 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
7477 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
7478 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
7479 
7480 			if (IS_CONST & (IS_CONST|IS_CV)) {
7481 				/* avoid exception check */
7482 
7483 				ZEND_VM_SMART_BRANCH(result, 0);
7484 			}
7485 		} else {
7486 			result = (value == NULL || !i_zend_is_true(value));
7487 		}
7488 		goto isset_dim_obj_exit;
7489 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
7490 		container = Z_REFVAL_P(container);
7491 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
7492 			goto isset_dim_obj_array;
7493 		}
7494 	}
7495 
7496 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
7497 		offset++;
7498 	}
7499 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
7500 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
7501 	} else {
7502 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
7503 	}
7504 
7505 isset_dim_obj_exit:
7506 
7507 
7508 	ZEND_VM_SMART_BRANCH(result, 1);
7509 }
7510 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7511 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7512 {
7513 	USE_OPLINE
7514 	zval *container;
7515 	int result;
7516 	zval *offset;
7517 	zend_string *name, *tmp_name;
7518 
7519 	SAVE_OPLINE();
7520 	container = RT_CONSTANT(opline, opline->op1);
7521 	offset = RT_CONSTANT(opline, opline->op2);
7522 
7523 	if (IS_CONST == IS_CONST ||
7524 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
7525 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
7526 			container = Z_REFVAL_P(container);
7527 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
7528 				result = (opline->extended_value & ZEND_ISEMPTY);
7529 				goto isset_object_finish;
7530 			}
7531 		} else {
7532 			result = (opline->extended_value & ZEND_ISEMPTY);
7533 			goto isset_object_finish;
7534 		}
7535 	}
7536 
7537 	if (IS_CONST == IS_CONST) {
7538 		name = Z_STR_P(offset);
7539 	} else {
7540 		name = zval_try_get_tmp_string(offset, &tmp_name);
7541 		if (UNEXPECTED(!name)) {
7542 			result = 0;
7543 			goto isset_object_finish;
7544 		}
7545 	}
7546 
7547 	result =
7548 		(opline->extended_value & ZEND_ISEMPTY) ^
7549 		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));
7550 
7551 	if (IS_CONST != IS_CONST) {
7552 		zend_tmp_string_release(tmp_name);
7553 	}
7554 
7555 isset_object_finish:
7556 
7557 
7558 	ZEND_VM_SMART_BRANCH(result, 1);
7559 }
7560 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7561 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7562 {
7563 	USE_OPLINE
7564 
7565 	zval *key, *subject;
7566 	HashTable *ht;
7567 	bool result;
7568 
7569 	SAVE_OPLINE();
7570 
7571 	key = RT_CONSTANT(opline, opline->op1);
7572 	subject = RT_CONSTANT(opline, opline->op2);
7573 
7574 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
7575 array_key_exists_array:
7576 		ht = Z_ARRVAL_P(subject);
7577 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
7578 	} else {
7579 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
7580 			subject = Z_REFVAL_P(subject);
7581 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
7582 				goto array_key_exists_array;
7583 			}
7584 		}
7585 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
7586 		result = 0;
7587 	}
7588 
7589 
7590 	ZEND_VM_SMART_BRANCH(result, 1);
7591 }
7592 
7593 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7594 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7595 {
7596 	USE_OPLINE
7597 
7598 	zend_class_entry *ce = CACHED_PTR(opline->extended_value);
7599 	if (ce == NULL) {
7600 		zval *lcname = RT_CONSTANT(opline, opline->op1);
7601 		zval *zv = zend_hash_find_known_hash(EG(class_table), Z_STR_P(lcname + 1));
7602 		if (zv) {
7603 			SAVE_OPLINE();
7604 			ce = zend_bind_class_in_slot(zv, lcname, Z_STR_P(RT_CONSTANT(opline, opline->op2)));
7605 			if (!ce) {
7606 				HANDLE_EXCEPTION();
7607 			}
7608 		}
7609 		CACHE_PTR(opline->extended_value, ce);
7610 	}
7611 	ZEND_VM_NEXT_OPCODE();
7612 }
7613 
ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7614 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7615 {
7616 	USE_OPLINE
7617 	zval *name;
7618 	zval *val;
7619 	zend_constant c;
7620 
7621 	SAVE_OPLINE();
7622 	name  = RT_CONSTANT(opline, opline->op1);
7623 	val   = RT_CONSTANT(opline, opline->op2);
7624 
7625 	ZVAL_COPY(&c.value, val);
7626 	if (Z_OPT_CONSTANT(c.value)) {
7627 		if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) {
7628 			zval_ptr_dtor_nogc(&c.value);
7629 
7630 
7631 			HANDLE_EXCEPTION();
7632 		}
7633 	}
7634 	/* non persistent, case sensitive */
7635 	ZEND_CONSTANT_SET_FLAGS(&c, 0, PHP_USER_CONSTANT);
7636 	c.name = zend_string_copy(Z_STR_P(name));
7637 
7638 	if (zend_register_constant(&c) == FAILURE) {
7639 	}
7640 
7641 
7642 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
7643 }
7644 
ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7645 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7646 {
7647 	USE_OPLINE
7648 
7649 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
7650 
7651 	SAVE_OPLINE();
7652 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
7653 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
7654 	}
7655 
7656 	/* Destroy the previously yielded value */
7657 	zval_ptr_dtor(&generator->value);
7658 
7659 	/* Destroy the previously yielded key */
7660 	zval_ptr_dtor(&generator->key);
7661 
7662 	/* Set the new yielded value */
7663 	if (IS_CONST != IS_UNUSED) {
7664 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
7665 			/* Constants and temporary variables aren't yieldable by reference,
7666 			 * but we still allow them with a notice. */
7667 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
7668 				zval *value;
7669 
7670 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
7671 
7672 				value = RT_CONSTANT(opline, opline->op1);
7673 				ZVAL_COPY_VALUE(&generator->value, value);
7674 				if (IS_CONST == IS_CONST) {
7675 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
7676 						Z_ADDREF(generator->value);
7677 					}
7678 				}
7679 			} else {
7680 				zval *value_ptr = zend_get_bad_ptr();
7681 
7682 				/* If a function call result is yielded and the function did
7683 				 * not return by reference we throw a notice. */
7684 				do {
7685 					if (IS_CONST == IS_VAR) {
7686 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
7687 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
7688 						 && !Z_ISREF_P(value_ptr)) {
7689 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
7690 							ZVAL_COPY(&generator->value, value_ptr);
7691 							break;
7692 						}
7693 					}
7694 					if (Z_ISREF_P(value_ptr)) {
7695 						Z_ADDREF_P(value_ptr);
7696 					} else {
7697 						ZVAL_MAKE_REF_EX(value_ptr, 2);
7698 					}
7699 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
7700 				} while (0);
7701 
7702 			}
7703 		} else {
7704 			zval *value = RT_CONSTANT(opline, opline->op1);
7705 
7706 			/* Consts, temporary variables and references need copying */
7707 			if (IS_CONST == IS_CONST) {
7708 				ZVAL_COPY_VALUE(&generator->value, value);
7709 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
7710 					Z_ADDREF(generator->value);
7711 				}
7712 			} else if (IS_CONST == IS_TMP_VAR) {
7713 				ZVAL_COPY_VALUE(&generator->value, value);
7714 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
7715 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
7716 
7717 			} else {
7718 				ZVAL_COPY_VALUE(&generator->value, value);
7719 				if (IS_CONST == IS_CV) {
7720 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
7721 				}
7722 			}
7723 		}
7724 	} else {
7725 		/* If no value was specified yield null */
7726 		ZVAL_NULL(&generator->value);
7727 	}
7728 
7729 	/* Set the new yielded key */
7730 	if (IS_CONST != IS_UNUSED) {
7731 		zval *key = RT_CONSTANT(opline, opline->op2);
7732 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
7733 			key = Z_REFVAL_P(key);
7734 		}
7735 		ZVAL_COPY(&generator->key, key);
7736 
7737 		if (Z_TYPE(generator->key) == IS_LONG
7738 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
7739 		) {
7740 			generator->largest_used_integer_key = Z_LVAL(generator->key);
7741 		}
7742 	} else {
7743 		/* If no key was specified we use auto-increment keys */
7744 		generator->largest_used_integer_key++;
7745 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
7746 	}
7747 
7748 	if (RETURN_VALUE_USED(opline)) {
7749 		/* If the return value of yield is used set the send
7750 		 * target and initialize it to NULL */
7751 		generator->send_target = EX_VAR(opline->result.var);
7752 		ZVAL_NULL(generator->send_target);
7753 	} else {
7754 		generator->send_target = NULL;
7755 	}
7756 
7757 	/* We increment to the next op, so we are at the correct position when the
7758 	 * generator is resumed. */
7759 	ZEND_VM_INC_OPCODE();
7760 
7761 	/* The GOTO VM uses a local opline variable. We need to set the opline
7762 	 * variable in execute_data so we don't resume at an old position. */
7763 	SAVE_OPLINE();
7764 
7765 	ZEND_VM_RETURN();
7766 }
7767 
ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7768 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7769 {
7770 	USE_OPLINE
7771 	zval *op, *jump_zv;
7772 	HashTable *jumptable;
7773 
7774 	op = RT_CONSTANT(opline, opline->op1);
7775 
7776 	if (Z_TYPE_P(op) != IS_LONG) {
7777 		ZVAL_DEREF(op);
7778 		if (Z_TYPE_P(op) != IS_LONG) {
7779 			/* Wrong type, fall back to ZEND_CASE chain */
7780 			ZEND_VM_NEXT_OPCODE();
7781 		}
7782 	}
7783 
7784 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
7785 	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
7786 	if (jump_zv != NULL) {
7787 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
7788 		ZEND_VM_CONTINUE();
7789 	} else {
7790 		/* default */
7791 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
7792 		ZEND_VM_CONTINUE();
7793 	}
7794 }
7795 
ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7796 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7797 {
7798 	USE_OPLINE
7799 	zval *op, *jump_zv;
7800 	HashTable *jumptable;
7801 
7802 	op = RT_CONSTANT(opline, opline->op1);
7803 
7804 	if (Z_TYPE_P(op) != IS_STRING) {
7805 		if (IS_CONST == IS_CONST) {
7806 			/* Wrong type, fall back to ZEND_CASE chain */
7807 			ZEND_VM_NEXT_OPCODE();
7808 		} else {
7809 			ZVAL_DEREF(op);
7810 			if (Z_TYPE_P(op) != IS_STRING) {
7811 				/* Wrong type, fall back to ZEND_CASE chain */
7812 				ZEND_VM_NEXT_OPCODE();
7813 			}
7814 		}
7815 	}
7816 
7817 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
7818 	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
7819 	if (jump_zv != NULL) {
7820 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
7821 		ZEND_VM_CONTINUE();
7822 	} else {
7823 		/* default */
7824 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
7825 		ZEND_VM_CONTINUE();
7826 	}
7827 }
7828 
ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7829 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7830 {
7831 	USE_OPLINE
7832 	zval *op, *jump_zv;
7833 	HashTable *jumptable;
7834 
7835 	op = RT_CONSTANT(opline, opline->op1);
7836 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
7837 
7838 match_try_again:
7839 	if (Z_TYPE_P(op) == IS_LONG) {
7840 		jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
7841 	} else if (Z_TYPE_P(op) == IS_STRING) {
7842 		jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST);
7843 	} else if (Z_TYPE_P(op) == IS_REFERENCE) {
7844 		op = Z_REFVAL_P(op);
7845 		goto match_try_again;
7846 	} else {
7847 		if (UNEXPECTED((IS_CONST & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
7848 			SAVE_OPLINE();
7849 			op = ZVAL_UNDEFINED_OP1();
7850 			if (UNEXPECTED(EG(exception))) {
7851 				HANDLE_EXCEPTION();
7852 			}
7853 			goto match_try_again;
7854 		}
7855 
7856 		goto default_branch;
7857 	}
7858 
7859 	if (jump_zv != NULL) {
7860 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
7861 		ZEND_VM_CONTINUE();
7862 	} else {
7863 default_branch:
7864 		/* default */
7865 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
7866 		ZEND_VM_CONTINUE();
7867 	}
7868 }
7869 
ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7870 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7871 {
7872 	USE_OPLINE
7873 	zval *op1;
7874 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
7875 	zval *result;
7876 
7877 	op1 = RT_CONSTANT(opline, opline->op1);
7878 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
7879 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CONST == IS_CONST);
7880 		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
7881 			zval_ptr_dtor_str(op1);
7882 		}
7883 		ZEND_VM_SMART_BRANCH(result, 0);
7884 	}
7885 
7886 	if (opline->extended_value) {
7887 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
7888 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
7889 			ZEND_VM_SMART_BRANCH(result, 0);
7890 		}
7891 		SAVE_OPLINE();
7892 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
7893 			op1 = Z_REFVAL_P(op1);
7894 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
7895 				result = zend_hash_find(ht, Z_STR_P(op1));
7896 
7897 				ZEND_VM_SMART_BRANCH(result, 0);
7898 			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
7899 				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
7900 
7901 				ZEND_VM_SMART_BRANCH(result, 0);
7902 			}
7903 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
7904 			ZVAL_UNDEFINED_OP1();
7905 		}
7906 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
7907 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
7908 			SAVE_OPLINE();
7909 			ZVAL_UNDEFINED_OP1();
7910 			if (UNEXPECTED(EG(exception) != NULL)) {
7911 				HANDLE_EXCEPTION();
7912 			}
7913 		}
7914 		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
7915 		ZEND_VM_SMART_BRANCH(result, 0);
7916 	} else {
7917 		zend_string *key;
7918 		zval key_tmp;
7919 
7920 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
7921 			op1 = Z_REFVAL_P(op1);
7922 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
7923 				result = zend_hash_find(ht, Z_STR_P(op1));
7924 
7925 				ZEND_VM_SMART_BRANCH(result, 0);
7926 			}
7927 		}
7928 
7929 		SAVE_OPLINE();
7930 		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
7931 			ZVAL_STR(&key_tmp, key);
7932 			if (zend_compare(op1, &key_tmp) == 0) {
7933 
7934 				ZEND_VM_SMART_BRANCH(1, 1);
7935 			}
7936 		} ZEND_HASH_FOREACH_END();
7937 	}
7938 
7939 	ZEND_VM_SMART_BRANCH(0, 1);
7940 }
7941 
ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7942 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7943 {
7944 	USE_OPLINE
7945 	zval *op1, *op2, *result;
7946 	double d1, d2;
7947 
7948 	op1 = RT_CONSTANT(opline, opline->op1);
7949 	op2 = EX_VAR(opline->op2.var);
7950 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7951 		/* pass */
7952 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7953 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7954 			result = EX_VAR(opline->result.var);
7955 			fast_long_add_function(result, op1, op2);
7956 			ZEND_VM_NEXT_OPCODE();
7957 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7958 			d1 = (double)Z_LVAL_P(op1);
7959 			d2 = Z_DVAL_P(op2);
7960 			goto add_double;
7961 		}
7962 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
7963 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7964 			d1 = Z_DVAL_P(op1);
7965 			d2 = Z_DVAL_P(op2);
7966 add_double:
7967 			result = EX_VAR(opline->result.var);
7968 			ZVAL_DOUBLE(result, d1 + d2);
7969 			ZEND_VM_NEXT_OPCODE();
7970 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7971 			d1 = Z_DVAL_P(op1);
7972 			d2 = (double)Z_LVAL_P(op2);
7973 			goto add_double;
7974 		}
7975 	}
7976 
7977 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
7978 }
7979 
ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)7980 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7981 {
7982 	USE_OPLINE
7983 	zval *op1, *op2, *result;
7984 	double d1, d2;
7985 
7986 	op1 = RT_CONSTANT(opline, opline->op1);
7987 	op2 = EX_VAR(opline->op2.var);
7988 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
7989 		/* pass */
7990 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
7991 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
7992 			result = EX_VAR(opline->result.var);
7993 			fast_long_sub_function(result, op1, op2);
7994 			ZEND_VM_NEXT_OPCODE();
7995 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
7996 			d1 = (double)Z_LVAL_P(op1);
7997 			d2 = Z_DVAL_P(op2);
7998 			goto sub_double;
7999 		}
8000 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8001 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8002 			d1 = Z_DVAL_P(op1);
8003 			d2 = Z_DVAL_P(op2);
8004 sub_double:
8005 			result = EX_VAR(opline->result.var);
8006 			ZVAL_DOUBLE(result, d1 - d2);
8007 			ZEND_VM_NEXT_OPCODE();
8008 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8009 			d1 = Z_DVAL_P(op1);
8010 			d2 = (double)Z_LVAL_P(op2);
8011 			goto sub_double;
8012 		}
8013 	}
8014 
8015 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8016 }
8017 
ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8018 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8019 {
8020 	USE_OPLINE
8021 	zval *op1, *op2, *result;
8022 
8023 	op1 = RT_CONSTANT(opline, opline->op1);
8024 	op2 = EX_VAR(opline->op2.var);
8025 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8026 		/* pass */
8027 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8028 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8029 			result = EX_VAR(opline->result.var);
8030 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
8031 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8032 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
8033 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
8034 				ZVAL_LONG(result, 0);
8035 			} else {
8036 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
8037 			}
8038 			ZEND_VM_NEXT_OPCODE();
8039 		}
8040 	}
8041 
8042 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8043 }
8044 
ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8045 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8046 {
8047 	USE_OPLINE
8048 	zval *op1, *op2;
8049 
8050 	op1 = RT_CONSTANT(opline, opline->op1);
8051 	op2 = EX_VAR(opline->op2.var);
8052 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8053 		/* pass */
8054 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
8055 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
8056 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
8057 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
8058 		ZVAL_LONG(EX_VAR(opline->result.var),
8059 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
8060 		ZEND_VM_NEXT_OPCODE();
8061 	}
8062 
8063 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8064 }
8065 
ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8066 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8067 {
8068 	USE_OPLINE
8069 	zval *op1, *op2;
8070 
8071 	op1 = RT_CONSTANT(opline, opline->op1);
8072 	op2 = EX_VAR(opline->op2.var);
8073 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8074 		/* pass */
8075 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
8076 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
8077 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
8078 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
8079 		ZEND_VM_NEXT_OPCODE();
8080 	}
8081 
8082 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8083 }
8084 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8085 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8086 {
8087 	USE_OPLINE
8088 	zval *op1, *op2;
8089 	double d1, d2;
8090 
8091 	op1 = RT_CONSTANT(opline, opline->op1);
8092 	op2 = EX_VAR(opline->op2.var);
8093 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8094 		/* pass */
8095 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8096 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8097 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
8098 is_smaller_true:
8099 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
8100 			} else {
8101 is_smaller_false:
8102 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
8103 			}
8104 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8105 			d1 = (double)Z_LVAL_P(op1);
8106 			d2 = Z_DVAL_P(op2);
8107 			goto is_smaller_double;
8108 		}
8109 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8110 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8111 			d1 = Z_DVAL_P(op1);
8112 			d2 = Z_DVAL_P(op2);
8113 is_smaller_double:
8114 			if (d1 < d2) {
8115 				goto is_smaller_true;
8116 			} else {
8117 				goto is_smaller_false;
8118 			}
8119 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8120 			d1 = Z_DVAL_P(op1);
8121 			d2 = (double)Z_LVAL_P(op2);
8122 			goto is_smaller_double;
8123 		}
8124 	}
8125 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8126 }
8127 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8128 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8129 {
8130 	USE_OPLINE
8131 	zval *op1, *op2;
8132 	double d1, d2;
8133 
8134 	op1 = RT_CONSTANT(opline, opline->op1);
8135 	op2 = EX_VAR(opline->op2.var);
8136 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8137 		/* pass */
8138 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8139 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8140 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
8141 is_smaller_true:
8142 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
8143 			} else {
8144 is_smaller_false:
8145 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
8146 			}
8147 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8148 			d1 = (double)Z_LVAL_P(op1);
8149 			d2 = Z_DVAL_P(op2);
8150 			goto is_smaller_double;
8151 		}
8152 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8153 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8154 			d1 = Z_DVAL_P(op1);
8155 			d2 = Z_DVAL_P(op2);
8156 is_smaller_double:
8157 			if (d1 < d2) {
8158 				goto is_smaller_true;
8159 			} else {
8160 				goto is_smaller_false;
8161 			}
8162 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8163 			d1 = Z_DVAL_P(op1);
8164 			d2 = (double)Z_LVAL_P(op2);
8165 			goto is_smaller_double;
8166 		}
8167 	}
8168 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8169 }
8170 
ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8171 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8172 {
8173 	USE_OPLINE
8174 	zval *op1, *op2;
8175 	double d1, d2;
8176 
8177 	op1 = RT_CONSTANT(opline, opline->op1);
8178 	op2 = EX_VAR(opline->op2.var);
8179 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8180 		/* pass */
8181 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8182 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8183 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
8184 is_smaller_true:
8185 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
8186 			} else {
8187 is_smaller_false:
8188 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
8189 			}
8190 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8191 			d1 = (double)Z_LVAL_P(op1);
8192 			d2 = Z_DVAL_P(op2);
8193 			goto is_smaller_double;
8194 		}
8195 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8196 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8197 			d1 = Z_DVAL_P(op1);
8198 			d2 = Z_DVAL_P(op2);
8199 is_smaller_double:
8200 			if (d1 < d2) {
8201 				goto is_smaller_true;
8202 			} else {
8203 				goto is_smaller_false;
8204 			}
8205 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8206 			d1 = Z_DVAL_P(op1);
8207 			d2 = (double)Z_LVAL_P(op2);
8208 			goto is_smaller_double;
8209 		}
8210 	}
8211 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8212 }
8213 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8214 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8215 {
8216 	USE_OPLINE
8217 	zval *op1, *op2;
8218 	double d1, d2;
8219 
8220 	op1 = RT_CONSTANT(opline, opline->op1);
8221 	op2 = EX_VAR(opline->op2.var);
8222 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8223 		/* pass */
8224 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8225 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8226 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
8227 is_smaller_or_equal_true:
8228 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
8229 				ZVAL_TRUE(EX_VAR(opline->result.var));
8230 				ZEND_VM_NEXT_OPCODE();
8231 			} else {
8232 is_smaller_or_equal_false:
8233 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
8234 				ZVAL_FALSE(EX_VAR(opline->result.var));
8235 				ZEND_VM_NEXT_OPCODE();
8236 			}
8237 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8238 			d1 = (double)Z_LVAL_P(op1);
8239 			d2 = Z_DVAL_P(op2);
8240 			goto is_smaller_or_equal_double;
8241 		}
8242 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8243 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8244 			d1 = Z_DVAL_P(op1);
8245 			d2 = Z_DVAL_P(op2);
8246 is_smaller_or_equal_double:
8247 			if (d1 <= d2) {
8248 				goto is_smaller_or_equal_true;
8249 			} else {
8250 				goto is_smaller_or_equal_false;
8251 			}
8252 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8253 			d1 = Z_DVAL_P(op1);
8254 			d2 = (double)Z_LVAL_P(op2);
8255 			goto is_smaller_or_equal_double;
8256 		}
8257 	}
8258 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8259 }
8260 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8261 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8262 {
8263 	USE_OPLINE
8264 	zval *op1, *op2;
8265 	double d1, d2;
8266 
8267 	op1 = RT_CONSTANT(opline, opline->op1);
8268 	op2 = EX_VAR(opline->op2.var);
8269 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8270 		/* pass */
8271 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8272 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8273 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
8274 is_smaller_or_equal_true:
8275 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
8276 				ZVAL_TRUE(EX_VAR(opline->result.var));
8277 				ZEND_VM_NEXT_OPCODE();
8278 			} else {
8279 is_smaller_or_equal_false:
8280 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
8281 				ZVAL_FALSE(EX_VAR(opline->result.var));
8282 				ZEND_VM_NEXT_OPCODE();
8283 			}
8284 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8285 			d1 = (double)Z_LVAL_P(op1);
8286 			d2 = Z_DVAL_P(op2);
8287 			goto is_smaller_or_equal_double;
8288 		}
8289 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8290 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8291 			d1 = Z_DVAL_P(op1);
8292 			d2 = Z_DVAL_P(op2);
8293 is_smaller_or_equal_double:
8294 			if (d1 <= d2) {
8295 				goto is_smaller_or_equal_true;
8296 			} else {
8297 				goto is_smaller_or_equal_false;
8298 			}
8299 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8300 			d1 = Z_DVAL_P(op1);
8301 			d2 = (double)Z_LVAL_P(op2);
8302 			goto is_smaller_or_equal_double;
8303 		}
8304 	}
8305 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8306 }
8307 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8308 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8309 {
8310 	USE_OPLINE
8311 	zval *op1, *op2;
8312 	double d1, d2;
8313 
8314 	op1 = RT_CONSTANT(opline, opline->op1);
8315 	op2 = EX_VAR(opline->op2.var);
8316 	if (1 && IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8317 		/* pass */
8318 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
8319 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8320 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
8321 is_smaller_or_equal_true:
8322 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
8323 				ZVAL_TRUE(EX_VAR(opline->result.var));
8324 				ZEND_VM_NEXT_OPCODE();
8325 			} else {
8326 is_smaller_or_equal_false:
8327 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
8328 				ZVAL_FALSE(EX_VAR(opline->result.var));
8329 				ZEND_VM_NEXT_OPCODE();
8330 			}
8331 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8332 			d1 = (double)Z_LVAL_P(op1);
8333 			d2 = Z_DVAL_P(op2);
8334 			goto is_smaller_or_equal_double;
8335 		}
8336 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
8337 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
8338 			d1 = Z_DVAL_P(op1);
8339 			d2 = Z_DVAL_P(op2);
8340 is_smaller_or_equal_double:
8341 			if (d1 <= d2) {
8342 				goto is_smaller_or_equal_true;
8343 			} else {
8344 				goto is_smaller_or_equal_false;
8345 			}
8346 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
8347 			d1 = Z_DVAL_P(op1);
8348 			d2 = (double)Z_LVAL_P(op2);
8349 			goto is_smaller_or_equal_double;
8350 		}
8351 	}
8352 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
8353 }
8354 
ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8355 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8356 {
8357 	zend_class_entry *ce, *scope;
8358 	zend_class_constant *c;
8359 	zval *value, *zv, *constant_zv;
8360 	zend_string *constant_name;
8361 	USE_OPLINE
8362 
8363 	SAVE_OPLINE();
8364 
8365 	do {
8366 		if (IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
8367 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
8368 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
8369 				break;
8370 			}
8371 		}
8372 		if (IS_CONST == IS_CONST) {
8373 			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
8374 				ce = CACHED_PTR(opline->extended_value);
8375 			} else {
8376 				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);
8377 				if (UNEXPECTED(ce == NULL)) {
8378 					ZVAL_UNDEF(EX_VAR(opline->result.var));
8379 					FREE_OP(opline->op2_type, opline->op2.var);
8380 					HANDLE_EXCEPTION();
8381 				}
8382 				CACHE_PTR(opline->extended_value, ce);
8383 			}
8384 		} else if (IS_CONST == IS_UNUSED) {
8385 			ce = zend_fetch_class(NULL, opline->op1.num);
8386 			if (UNEXPECTED(ce == NULL)) {
8387 				ZVAL_UNDEF(EX_VAR(opline->result.var));
8388 				FREE_OP(opline->op2_type, opline->op2.var);
8389 				HANDLE_EXCEPTION();
8390 			}
8391 		} else {
8392 			ce = Z_CE_P(EX_VAR(opline->op1.var));
8393 		}
8394 		if (IS_CONST != IS_CONST
8395 			&& (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
8396 			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
8397 			value = CACHED_PTR(opline->extended_value + sizeof(void*));
8398 			break;
8399 		}
8400 
8401 		constant_zv = _get_zval_ptr_tmpvarcv(opline->op2_type, opline->op2, BP_VAR_R EXECUTE_DATA_CC);
8402 		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
8403 			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
8404 			ZVAL_UNDEF(EX_VAR(opline->result.var));
8405 			FREE_OP(opline->op2_type, opline->op2.var);
8406 			HANDLE_EXCEPTION();
8407 		}
8408 		constant_name = Z_STR_P(constant_zv);
8409 		/* Magic 'class' for constant OP2 is caught at compile-time */
8410 		if ((IS_TMP_VAR|IS_VAR|IS_CV) != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
8411 			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
8412 			FREE_OP(opline->op2_type, opline->op2.var);
8413 			ZEND_VM_NEXT_OPCODE();
8414 		}
8415 		zv = (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
8416 			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
8417 			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);
8418 
8419 		if (EXPECTED(zv != NULL)) {
8420 			c = Z_PTR_P(zv);
8421 			scope = EX(func)->op_array.scope;
8422 			if (!zend_verify_const_access(c, scope)) {
8423 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
8424 				ZVAL_UNDEF(EX_VAR(opline->result.var));
8425 				FREE_OP(opline->op2_type, opline->op2.var);
8426 				HANDLE_EXCEPTION();
8427 			}
8428 
8429 			if (ce->ce_flags & ZEND_ACC_TRAIT) {
8430 				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
8431 				ZVAL_UNDEF(EX_VAR(opline->result.var));
8432 				FREE_OP(opline->op2_type, opline->op2.var);
8433 				HANDLE_EXCEPTION();
8434 			}
8435 
8436 			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
8437 			if (UNEXPECTED(is_constant_deprecated)) {
8438 				zend_error(E_DEPRECATED, "Constant %s::%s is deprecated", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
8439 
8440 				if (EG(exception)) {
8441 					ZVAL_UNDEF(EX_VAR(opline->result.var));
8442 					FREE_OP(opline->op2_type, opline->op2.var);
8443 					HANDLE_EXCEPTION();
8444 				}
8445 			}
8446 
8447 			value = &c->value;
8448 			// Enums require loading of all class constants to build the backed enum table
8449 			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
8450 				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
8451 					ZVAL_UNDEF(EX_VAR(opline->result.var));
8452 					FREE_OP(opline->op2_type, opline->op2.var);
8453 					HANDLE_EXCEPTION();
8454 				}
8455 			}
8456 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
8457 				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
8458 					ZVAL_UNDEF(EX_VAR(opline->result.var));
8459 					FREE_OP(opline->op2_type, opline->op2.var);
8460 					HANDLE_EXCEPTION();
8461 				}
8462 			}
8463 			if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && !is_constant_deprecated) {
8464 				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
8465 			}
8466 		} else {
8467 			zend_throw_error(NULL, "Undefined constant %s::%s",
8468 				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
8469 			ZVAL_UNDEF(EX_VAR(opline->result.var));
8470 			FREE_OP(opline->op2_type, opline->op2.var);
8471 			HANDLE_EXCEPTION();
8472 		}
8473 	} while (0);
8474 
8475 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
8476 
8477 	FREE_OP(opline->op2_type, opline->op2.var);
8478 	ZEND_VM_NEXT_OPCODE();
8479 }
8480 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8481 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8482 {
8483 	USE_OPLINE
8484 	zval *op1, *op2, *result;
8485 
8486 	op1 = RT_CONSTANT(opline, opline->op1);
8487 	op2 = EX_VAR(opline->op2.var);
8488 	result = EX_VAR(opline->result.var);
8489 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
8490 	ZEND_VM_NEXT_OPCODE();
8491 }
8492 
ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8493 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8494 {
8495 	USE_OPLINE
8496 	zval *op1, *op2, *result;
8497 
8498 	op1 = RT_CONSTANT(opline, opline->op1);
8499 	op2 = EX_VAR(opline->op2.var);
8500 	result = EX_VAR(opline->result.var);
8501 	fast_long_sub_function(result, op1, op2);
8502 	ZEND_VM_NEXT_OPCODE();
8503 }
8504 
ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8505 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8506 {
8507 	USE_OPLINE
8508 	zval *op1, *op2, *result;
8509 
8510 	op1 = RT_CONSTANT(opline, opline->op1);
8511 	op2 = EX_VAR(opline->op2.var);
8512 	result = EX_VAR(opline->result.var);
8513 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
8514 	ZEND_VM_NEXT_OPCODE();
8515 }
8516 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8517 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8518 {
8519 	USE_OPLINE
8520 	zval *op1, *op2;
8521 	bool result;
8522 
8523 	op1 = RT_CONSTANT(opline, opline->op1);
8524 	op2 = EX_VAR(opline->op2.var);
8525 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
8526 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8527 }
8528 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8529 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8530 {
8531 	USE_OPLINE
8532 	zval *op1, *op2;
8533 	bool result;
8534 
8535 	op1 = RT_CONSTANT(opline, opline->op1);
8536 	op2 = EX_VAR(opline->op2.var);
8537 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
8538 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8539 }
8540 
ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8541 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8542 {
8543 	USE_OPLINE
8544 	zval *op1, *op2;
8545 	bool result;
8546 
8547 	op1 = RT_CONSTANT(opline, opline->op1);
8548 	op2 = EX_VAR(opline->op2.var);
8549 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
8550 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8551 }
8552 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8553 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8554 {
8555 	USE_OPLINE
8556 	zval *op1, *op2;
8557 	bool result;
8558 
8559 	op1 = RT_CONSTANT(opline, opline->op1);
8560 	op2 = EX_VAR(opline->op2.var);
8561 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
8562 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8563 }
8564 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8565 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8566 {
8567 	USE_OPLINE
8568 	zval *op1, *op2;
8569 	bool result;
8570 
8571 	op1 = RT_CONSTANT(opline, opline->op1);
8572 	op2 = EX_VAR(opline->op2.var);
8573 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
8574 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8575 }
8576 
ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8577 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8578 {
8579 	USE_OPLINE
8580 	zval *op1, *op2;
8581 	bool result;
8582 
8583 	op1 = RT_CONSTANT(opline, opline->op1);
8584 	op2 = EX_VAR(opline->op2.var);
8585 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
8586 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8587 }
8588 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8589 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8590 {
8591 	USE_OPLINE
8592 	zval *op1, *op2;
8593 	bool result;
8594 
8595 	op1 = RT_CONSTANT(opline, opline->op1);
8596 	op2 = EX_VAR(opline->op2.var);
8597 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
8598 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8599 }
8600 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8601 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)
8602 {
8603 	USE_OPLINE
8604 	zval *op1, *op2;
8605 	bool result;
8606 
8607 	op1 = RT_CONSTANT(opline, opline->op1);
8608 	op2 = EX_VAR(opline->op2.var);
8609 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
8610 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8611 }
8612 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8613 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)
8614 {
8615 	USE_OPLINE
8616 	zval *op1, *op2;
8617 	bool result;
8618 
8619 	op1 = RT_CONSTANT(opline, opline->op1);
8620 	op2 = EX_VAR(opline->op2.var);
8621 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
8622 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8623 }
8624 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8625 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8626 {
8627 	USE_OPLINE
8628 	zval *op1, *op2;
8629 	bool result;
8630 
8631 	op1 = RT_CONSTANT(opline, opline->op1);
8632 	op2 = EX_VAR(opline->op2.var);
8633 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
8634 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
8635 }
8636 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8637 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)
8638 {
8639 	USE_OPLINE
8640 	zval *op1, *op2;
8641 	bool result;
8642 
8643 	op1 = RT_CONSTANT(opline, opline->op1);
8644 	op2 = EX_VAR(opline->op2.var);
8645 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
8646 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
8647 }
8648 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8649 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)
8650 {
8651 	USE_OPLINE
8652 	zval *op1, *op2;
8653 	bool result;
8654 
8655 	op1 = RT_CONSTANT(opline, opline->op1);
8656 	op2 = EX_VAR(opline->op2.var);
8657 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
8658 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
8659 }
8660 
ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8661 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8662 {
8663 	USE_OPLINE
8664 	zval *container, *dim, *value;
8665 	zend_long offset;
8666 	HashTable *ht;
8667 
8668 	container = RT_CONSTANT(opline, opline->op1);
8669 	dim = EX_VAR(opline->op2.var);
8670 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8671 fetch_dim_r_index_array:
8672 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
8673 			offset = Z_LVAL_P(dim);
8674 		} else {
8675 			SAVE_OPLINE();
8676 			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
8677 
8678 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8679 		}
8680 		ht = Z_ARRVAL_P(container);
8681 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
8682 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
8683 		if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8684 			SAVE_OPLINE();
8685 
8686 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8687 		} else {
8688 			ZEND_VM_NEXT_OPCODE();
8689 		}
8690 	} else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
8691 		container = Z_REFVAL_P(container);
8692 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8693 			goto fetch_dim_r_index_array;
8694 		} else {
8695 			goto fetch_dim_r_index_slow;
8696 		}
8697 	} else {
8698 fetch_dim_r_index_slow:
8699 		SAVE_OPLINE();
8700 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
8701 			dim++;
8702 		}
8703 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
8704 
8705 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8706 	}
8707 
8708 fetch_dim_r_index_undef:
8709 	ZVAL_NULL(EX_VAR(opline->result.var));
8710 	SAVE_OPLINE();
8711 	zend_undefined_offset(offset);
8712 
8713 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8714 }
8715 
ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8716 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8717 {
8718 	USE_OPLINE
8719 	zval *op1, *op2;
8720 
8721 	SAVE_OPLINE();
8722 	op1 = RT_CONSTANT(opline, opline->op1);
8723 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8724 	div_function(EX_VAR(opline->result.var), op1, op2);
8725 
8726 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8727 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8728 }
8729 
ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8730 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8731 {
8732 	USE_OPLINE
8733 	zval *op1, *op2;
8734 
8735 	SAVE_OPLINE();
8736 	op1 = RT_CONSTANT(opline, opline->op1);
8737 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8738 	pow_function(EX_VAR(opline->result.var), op1, op2);
8739 
8740 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8741 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8742 }
8743 
ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8744 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8745 {
8746 	USE_OPLINE
8747 	zval *op1, *op2;
8748 
8749 	op1 = RT_CONSTANT(opline, opline->op1);
8750 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8751 
8752 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
8753 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
8754 		zend_string *op1_str = Z_STR_P(op1);
8755 		zend_string *op2_str = Z_STR_P(op2);
8756 		zend_string *str;
8757 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
8758 
8759 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
8760 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
8761 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
8762 			} else {
8763 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
8764 			}
8765 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8766 				zend_string_release_ex(op1_str, 0);
8767 			}
8768 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
8769 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
8770 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
8771 			} else {
8772 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
8773 			}
8774 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8775 				zend_string_release_ex(op2_str, 0);
8776 			}
8777 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
8778 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
8779 			size_t len = ZSTR_LEN(op1_str);
8780 
8781 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
8782 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
8783 			}
8784 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
8785 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8786 			GC_ADD_FLAGS(str, flags);
8787 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8788 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8789 				zend_string_release_ex(op2_str, 0);
8790 			}
8791 		} else {
8792 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
8793 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
8794 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
8795 			GC_ADD_FLAGS(str, flags);
8796 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
8797 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
8798 				zend_string_release_ex(op1_str, 0);
8799 			}
8800 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
8801 				zend_string_release_ex(op2_str, 0);
8802 			}
8803 		}
8804 		ZEND_VM_NEXT_OPCODE();
8805 	} else {
8806 		SAVE_OPLINE();
8807 
8808 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
8809 			op1 = ZVAL_UNDEFINED_OP1();
8810 		}
8811 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
8812 			op2 = ZVAL_UNDEFINED_OP2();
8813 		}
8814 		concat_function(EX_VAR(opline->result.var), op1, op2);
8815 
8816 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8817 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8818 	}
8819 }
8820 
ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8821 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8822 {
8823 	USE_OPLINE
8824 	zval *op1, *op2;
8825 
8826 	SAVE_OPLINE();
8827 	op1 = RT_CONSTANT(opline, opline->op1);
8828 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8829 	compare_function(EX_VAR(opline->result.var), op1, op2);
8830 
8831 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8832 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8833 }
8834 
ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8835 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8836 {
8837 	USE_OPLINE
8838 	zval *container, *dim, *value;
8839 
8840 	SAVE_OPLINE();
8841 	container = RT_CONSTANT(opline, opline->op1);
8842 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
8843 	if (IS_CONST != IS_CONST) {
8844 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8845 fetch_dim_r_array:
8846 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
8847 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
8848 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
8849 			container = Z_REFVAL_P(container);
8850 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
8851 				goto fetch_dim_r_array;
8852 			} else {
8853 				goto fetch_dim_r_slow;
8854 			}
8855 		} else {
8856 fetch_dim_r_slow:
8857 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
8858 				dim++;
8859 			}
8860 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
8861 		}
8862 	} else {
8863 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
8864 	}
8865 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8866 
8867 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8868 }
8869 
ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8870 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8871 {
8872 	USE_OPLINE
8873 	zval *container;
8874 
8875 	SAVE_OPLINE();
8876 	container = RT_CONSTANT(opline, opline->op1);
8877 	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);
8878 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
8879 
8880 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
8881 }
8882 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8883 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8884 {
8885 #if 0
8886 	USE_OPLINE
8887 #endif
8888 
8889 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
8890 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
8891 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8892 		}
8893 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8894 	} else {
8895 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
8896 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8897 		}
8898 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
8899 	}
8900 }
8901 
ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)8902 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8903 {
8904 	USE_OPLINE
8905 	zval *container;
8906 	void **cache_slot = NULL;
8907 
8908 	SAVE_OPLINE();
8909 	container = RT_CONSTANT(opline, opline->op1);
8910 
8911 	if (IS_CONST == IS_CONST ||
8912 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
8913 		do {
8914 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
8915 				container = Z_REFVAL_P(container);
8916 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
8917 					break;
8918 				}
8919 			}
8920 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
8921 				ZVAL_UNDEFINED_OP1();
8922 			}
8923 			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
8924 			ZVAL_NULL(EX_VAR(opline->result.var));
8925 			goto fetch_obj_r_finish;
8926 		} while (0);
8927 	}
8928 
8929 	/* here we are sure we are dealing with an object */
8930 	do {
8931 		zend_object *zobj = Z_OBJ_P(container);
8932 		zend_string *name, *tmp_name;
8933 		zval *retval;
8934 
8935 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
8936 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
8937 
8938 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
8939 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
8940 
8941 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
8942 					retval = OBJ_PROP(zobj, prop_offset);
8943 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
8944 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8945 							goto fetch_obj_r_copy;
8946 						} else {
8947 fetch_obj_r_fast_copy:
8948 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
8949 							ZEND_VM_NEXT_OPCODE();
8950 						}
8951 					}
8952 				} else if (EXPECTED(zobj->properties != NULL)) {
8953 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
8954 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
8955 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
8956 
8957 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
8958 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
8959 
8960 							if (EXPECTED(p->key == name) ||
8961 							    (EXPECTED(p->h == ZSTR_H(name)) &&
8962 							     EXPECTED(p->key != NULL) &&
8963 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
8964 								retval = &p->val;
8965 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8966 									goto fetch_obj_r_copy;
8967 								} else {
8968 									goto fetch_obj_r_fast_copy;
8969 								}
8970 							}
8971 						}
8972 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
8973 					}
8974 					retval = zend_hash_find_known_hash(zobj->properties, name);
8975 					if (EXPECTED(retval)) {
8976 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
8977 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
8978 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
8979 							goto fetch_obj_r_copy;
8980 						} else {
8981 							goto fetch_obj_r_fast_copy;
8982 						}
8983 					}
8984 				}
8985 			}
8986 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
8987 		} else {
8988 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
8989 			if (UNEXPECTED(!name)) {
8990 				ZVAL_UNDEF(EX_VAR(opline->result.var));
8991 				break;
8992 			}
8993 		}
8994 
8995 #if ZEND_DEBUG
8996 		/* For non-standard object handlers, verify a declared property type in debug builds.
8997 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
8998 		zend_property_info *prop_info = NULL;
8999 		if (zobj->handlers->read_property != zend_std_read_property) {
9000 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
9001 		}
9002 #endif
9003 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
9004 #if ZEND_DEBUG
9005 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
9006 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
9007 			ZVAL_OPT_DEREF(retval);
9008 			zend_verify_property_type(prop_info, retval, /* strict */ true);
9009 		}
9010 #endif
9011 
9012 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9013 			zend_tmp_string_release(tmp_name);
9014 		}
9015 
9016 		if (retval != EX_VAR(opline->result.var)) {
9017 fetch_obj_r_copy:
9018 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
9019 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
9020 			zend_unwrap_reference(retval);
9021 		}
9022 	} while (0);
9023 
9024 fetch_obj_r_finish:
9025 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9026 
9027 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9028 }
9029 
ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9030 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9031 {
9032 	USE_OPLINE
9033 	zval *container;
9034 	void **cache_slot = NULL;
9035 
9036 	SAVE_OPLINE();
9037 	container = RT_CONSTANT(opline, opline->op1);
9038 
9039 	if (IS_CONST == IS_CONST ||
9040 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
9041 		do {
9042 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
9043 				container = Z_REFVAL_P(container);
9044 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
9045 					break;
9046 				}
9047 			}
9048 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
9049 				ZVAL_UNDEFINED_OP2();
9050 			}
9051 			ZVAL_NULL(EX_VAR(opline->result.var));
9052 			goto fetch_obj_is_finish;
9053 		} while (0);
9054 	}
9055 
9056 	/* here we are sure we are dealing with an object */
9057 	do {
9058 		zend_object *zobj = Z_OBJ_P(container);
9059 		zend_string *name, *tmp_name;
9060 		zval *retval;
9061 
9062 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9063 			cache_slot = CACHE_ADDR(opline->extended_value);
9064 
9065 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
9066 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
9067 
9068 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
9069 					retval = OBJ_PROP(zobj, prop_offset);
9070 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
9071 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
9072 							goto fetch_obj_is_copy;
9073 						} else {
9074 fetch_obj_is_fast_copy:
9075 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
9076 							ZEND_VM_NEXT_OPCODE();
9077 						}
9078 					}
9079 				} else if (EXPECTED(zobj->properties != NULL)) {
9080 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
9081 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
9082 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
9083 
9084 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
9085 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
9086 
9087 							if (EXPECTED(p->key == name) ||
9088 							    (EXPECTED(p->h == ZSTR_H(name)) &&
9089 							     EXPECTED(p->key != NULL) &&
9090 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
9091 								retval = &p->val;
9092 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
9093 									goto fetch_obj_is_copy;
9094 								} else {
9095 									goto fetch_obj_is_fast_copy;
9096 								}
9097 							}
9098 						}
9099 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
9100 					}
9101 					retval = zend_hash_find_known_hash(zobj->properties, name);
9102 					if (EXPECTED(retval)) {
9103 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
9104 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
9105 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
9106 							goto fetch_obj_is_copy;
9107 						} else {
9108 							goto fetch_obj_is_fast_copy;
9109 						}
9110 					}
9111 				}
9112 			}
9113 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
9114 		} else {
9115 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
9116 			if (UNEXPECTED(!name)) {
9117 				ZVAL_UNDEF(EX_VAR(opline->result.var));
9118 				break;
9119 			}
9120 		}
9121 
9122 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
9123 
9124 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9125 			zend_tmp_string_release(tmp_name);
9126 		}
9127 
9128 		if (retval != EX_VAR(opline->result.var)) {
9129 fetch_obj_is_copy:
9130 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
9131 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
9132 			zend_unwrap_reference(retval);
9133 		}
9134 	} while (0);
9135 
9136 fetch_obj_is_finish:
9137 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9138 
9139 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9140 }
9141 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9142 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9143 {
9144 #if 0
9145 	USE_OPLINE
9146 #endif
9147 
9148 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
9149 		/* Behave like FETCH_OBJ_W */
9150 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
9151 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9152 		}
9153 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9154 	} else {
9155 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9156 	}
9157 }
9158 
ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9159 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9160 {
9161 	USE_OPLINE
9162 	zval *container;
9163 
9164 	SAVE_OPLINE();
9165 	container = RT_CONSTANT(opline, opline->op1);
9166 	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);
9167 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9168 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9169 }
9170 
ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9171 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9172 {
9173 	USE_OPLINE
9174 	zval *op1, *op2;
9175 	zend_string *op1_str, *op2_str, *str;
9176 
9177 
9178 	op1 = RT_CONSTANT(opline, opline->op1);
9179 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9180 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
9181 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
9182 		zend_string *op1_str = Z_STR_P(op1);
9183 		zend_string *op2_str = Z_STR_P(op2);
9184 		zend_string *str;
9185 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
9186 
9187 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
9188 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
9189 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
9190 			} else {
9191 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
9192 			}
9193 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
9194 				zend_string_release_ex(op1_str, 0);
9195 			}
9196 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
9197 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
9198 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
9199 			} else {
9200 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
9201 			}
9202 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
9203 				zend_string_release_ex(op2_str, 0);
9204 			}
9205 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
9206 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
9207 			size_t len = ZSTR_LEN(op1_str);
9208 
9209 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
9210 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
9211 			GC_ADD_FLAGS(str, flags);
9212 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
9213 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
9214 				zend_string_release_ex(op2_str, 0);
9215 			}
9216 		} else {
9217 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
9218 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
9219 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
9220 			GC_ADD_FLAGS(str, flags);
9221 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
9222 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
9223 				zend_string_release_ex(op1_str, 0);
9224 			}
9225 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
9226 				zend_string_release_ex(op2_str, 0);
9227 			}
9228 		}
9229 		ZEND_VM_NEXT_OPCODE();
9230 	}
9231 
9232 	SAVE_OPLINE();
9233 	if (IS_CONST == IS_CONST) {
9234 		op1_str = Z_STR_P(op1);
9235 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
9236 		op1_str = zend_string_copy(Z_STR_P(op1));
9237 	} else {
9238 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
9239 			ZVAL_UNDEFINED_OP1();
9240 		}
9241 		op1_str = zval_get_string_func(op1);
9242 	}
9243 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9244 		op2_str = Z_STR_P(op2);
9245 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
9246 		op2_str = zend_string_copy(Z_STR_P(op2));
9247 	} else {
9248 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
9249 			ZVAL_UNDEFINED_OP2();
9250 		}
9251 		op2_str = zval_get_string_func(op2);
9252 	}
9253 	do {
9254 		if (IS_CONST != IS_CONST) {
9255 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
9256 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9257 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
9258 						GC_ADDREF(op2_str);
9259 					}
9260 				}
9261 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
9262 				zend_string_release_ex(op1_str, 0);
9263 				break;
9264 			}
9265 		}
9266 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9267 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
9268 				if (IS_CONST == IS_CONST) {
9269 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
9270 						GC_ADDREF(op1_str);
9271 					}
9272 				}
9273 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
9274 				zend_string_release_ex(op2_str, 0);
9275 				break;
9276 			}
9277 		}
9278 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
9279 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
9280 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
9281 
9282 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
9283 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
9284 		if (IS_CONST != IS_CONST) {
9285 			zend_string_release_ex(op1_str, 0);
9286 		}
9287 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9288 			zend_string_release_ex(op2_str, 0);
9289 		}
9290 	} while (0);
9291 
9292 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9293 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9294 }
9295 
ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9296 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9297 {
9298 	USE_OPLINE
9299 	zval *function_name;
9300 	zval *object;
9301 	zend_function *fbc;
9302 	zend_class_entry *called_scope;
9303 	zend_object *obj;
9304 	zend_execute_data *call;
9305 	uint32_t call_info;
9306 
9307 	SAVE_OPLINE();
9308 
9309 	object = RT_CONSTANT(opline, opline->op1);
9310 
9311 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9312 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9313 	}
9314 
9315 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
9316 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
9317 		do {
9318 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
9319 				function_name = Z_REFVAL_P(function_name);
9320 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
9321 					break;
9322 				}
9323 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
9324 				ZVAL_UNDEFINED_OP2();
9325 				if (UNEXPECTED(EG(exception) != NULL)) {
9326 
9327 					HANDLE_EXCEPTION();
9328 				}
9329 			}
9330 			zend_throw_error(NULL, "Method name must be a string");
9331 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9332 
9333 			HANDLE_EXCEPTION();
9334 		} while (0);
9335 	}
9336 
9337 	if (IS_CONST == IS_UNUSED) {
9338 		obj = Z_OBJ_P(object);
9339 	} else {
9340 		do {
9341 			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
9342 				obj = Z_OBJ_P(object);
9343 			} else {
9344 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
9345 					zend_reference *ref = Z_REF_P(object);
9346 
9347 					object = &ref->val;
9348 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
9349 						obj = Z_OBJ_P(object);
9350 						if (IS_CONST & IS_VAR) {
9351 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
9352 								efree_size(ref, sizeof(zend_reference));
9353 							} else {
9354 								Z_ADDREF_P(object);
9355 							}
9356 						}
9357 						break;
9358 					}
9359 				}
9360 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
9361 					object = ZVAL_UNDEFINED_OP1();
9362 					if (UNEXPECTED(EG(exception) != NULL)) {
9363 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9364 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9365 						}
9366 						HANDLE_EXCEPTION();
9367 					}
9368 				}
9369 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9370 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9371 				}
9372 				zend_invalid_method_call(object, function_name);
9373 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9374 
9375 				HANDLE_EXCEPTION();
9376 			}
9377 		} while (0);
9378 	}
9379 
9380 	called_scope = obj->ce;
9381 
9382 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
9383 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
9384 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
9385 	} else {
9386 		zend_object *orig_obj = obj;
9387 
9388 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9389 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9390 		}
9391 
9392 		/* First, locate the function. */
9393 		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));
9394 		if (UNEXPECTED(fbc == NULL)) {
9395 			if (EXPECTED(!EG(exception))) {
9396 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
9397 			}
9398 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9399 			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
9400 				zend_objects_store_del(orig_obj);
9401 			}
9402 			HANDLE_EXCEPTION();
9403 		}
9404 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
9405 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
9406 		    EXPECTED(obj == orig_obj)) {
9407 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
9408 		}
9409 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
9410 			GC_ADDREF(obj); /* For $this pointer */
9411 			if (GC_DELREF(orig_obj) == 0) {
9412 				zend_objects_store_del(orig_obj);
9413 			}
9414 		}
9415 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9416 			init_func_run_time_cache(&fbc->op_array);
9417 		}
9418 	}
9419 
9420 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9421 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9422 	}
9423 
9424 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
9425 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
9426 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
9427 			zend_objects_store_del(obj);
9428 			if (UNEXPECTED(EG(exception))) {
9429 				HANDLE_EXCEPTION();
9430 			}
9431 		}
9432 		/* call static method */
9433 		obj = (zend_object*)called_scope;
9434 		call_info = ZEND_CALL_NESTED_FUNCTION;
9435 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
9436 		if (IS_CONST == IS_CV) {
9437 			GC_ADDREF(obj); /* For $this pointer */
9438 		}
9439 		/* CV may be changed indirectly (e.g. when it's a reference) */
9440 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
9441 	}
9442 
9443 	call = zend_vm_stack_push_call_frame(call_info,
9444 		fbc, opline->extended_value, obj);
9445 	call->prev_execute_data = EX(call);
9446 	EX(call) = call;
9447 
9448 	ZEND_VM_NEXT_OPCODE();
9449 }
9450 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9451 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9452 {
9453 	USE_OPLINE
9454 	zval *function_name;
9455 	zend_class_entry *ce;
9456 	uint32_t call_info;
9457 	zend_function *fbc;
9458 	zend_execute_data *call;
9459 
9460 	SAVE_OPLINE();
9461 
9462 	if (IS_CONST == IS_CONST) {
9463 		/* no function found. try a static method in class */
9464 		ce = CACHED_PTR(opline->result.num);
9465 		if (UNEXPECTED(ce == NULL)) {
9466 			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);
9467 			if (UNEXPECTED(ce == NULL)) {
9468 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9469 				HANDLE_EXCEPTION();
9470 			}
9471 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9472 				CACHE_PTR(opline->result.num, ce);
9473 			}
9474 		}
9475 	} else if (IS_CONST == IS_UNUSED) {
9476 		ce = zend_fetch_class(NULL, opline->op1.num);
9477 		if (UNEXPECTED(ce == NULL)) {
9478 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9479 			HANDLE_EXCEPTION();
9480 		}
9481 	} else {
9482 		ce = Z_CE_P(EX_VAR(opline->op1.var));
9483 	}
9484 
9485 	if (IS_CONST == IS_CONST &&
9486 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
9487 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
9488 		/* nothing to do */
9489 	} else if (IS_CONST != IS_CONST &&
9490 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
9491 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
9492 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
9493 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
9494 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9495 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9496 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
9497 				do {
9498 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
9499 						function_name = Z_REFVAL_P(function_name);
9500 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
9501 							break;
9502 						}
9503 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
9504 						ZVAL_UNDEFINED_OP2();
9505 						if (UNEXPECTED(EG(exception) != NULL)) {
9506 							HANDLE_EXCEPTION();
9507 						}
9508 					}
9509 					zend_throw_error(NULL, "Method name must be a string");
9510 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9511 					HANDLE_EXCEPTION();
9512 				} while (0);
9513 			}
9514 		}
9515 
9516 		if (ce->get_static_method) {
9517 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
9518 		} else {
9519 			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));
9520 		}
9521 		if (UNEXPECTED(fbc == NULL)) {
9522 			if (EXPECTED(!EG(exception))) {
9523 				zend_undefined_method(ce, Z_STR_P(function_name));
9524 			}
9525 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9526 			HANDLE_EXCEPTION();
9527 		}
9528 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
9529 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
9530 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
9531 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
9532 		}
9533 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9534 			init_func_run_time_cache(&fbc->op_array);
9535 		}
9536 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9537 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9538 		}
9539 	} else {
9540 		if (UNEXPECTED(ce->constructor == NULL)) {
9541 			zend_throw_error(NULL, "Cannot call constructor");
9542 			HANDLE_EXCEPTION();
9543 		}
9544 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
9545 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
9546 			HANDLE_EXCEPTION();
9547 		}
9548 		fbc = ce->constructor;
9549 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
9550 			init_func_run_time_cache(&fbc->op_array);
9551 		}
9552 	}
9553 
9554 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
9555 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
9556 			ce = (zend_class_entry*)Z_OBJ(EX(This));
9557 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
9558 		} else {
9559 			zend_non_static_method_call(fbc);
9560 			HANDLE_EXCEPTION();
9561 		}
9562 	} else {
9563 		/* previous opcode is ZEND_FETCH_CLASS */
9564 		if (IS_CONST == IS_UNUSED
9565 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
9566 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
9567 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
9568 				ce = Z_OBJCE(EX(This));
9569 			} else {
9570 				ce = Z_CE(EX(This));
9571 			}
9572 		}
9573 		call_info = ZEND_CALL_NESTED_FUNCTION;
9574 	}
9575 
9576 	call = zend_vm_stack_push_call_frame(call_info,
9577 		fbc, opline->extended_value, ce);
9578 	call->prev_execute_data = EX(call);
9579 	EX(call) = call;
9580 
9581 	ZEND_VM_NEXT_OPCODE();
9582 }
9583 
ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9584 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9585 {
9586 	USE_OPLINE
9587 	zval *function_name;
9588 	zend_fcall_info_cache fcc;
9589 	char *error = NULL;
9590 	zend_function *func;
9591 	void *object_or_called_scope;
9592 	zend_execute_data *call;
9593 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
9594 
9595 	SAVE_OPLINE();
9596 	function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9597 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
9598 		ZEND_ASSERT(!error);
9599 		func = fcc.function_handler;
9600 		object_or_called_scope = fcc.called_scope;
9601 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
9602 			/* Delay closure destruction until its invocation */
9603 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
9604 			call_info |= ZEND_CALL_CLOSURE;
9605 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
9606 				call_info |= ZEND_CALL_FAKE_CLOSURE;
9607 			}
9608 			if (fcc.object) {
9609 				object_or_called_scope = fcc.object;
9610 				call_info |= ZEND_CALL_HAS_THIS;
9611 			}
9612 		} else if (fcc.object) {
9613 			GC_ADDREF(fcc.object); /* For $this pointer */
9614 			object_or_called_scope = fcc.object;
9615 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
9616 		}
9617 
9618 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9619 		if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
9620 			if (call_info & ZEND_CALL_CLOSURE) {
9621 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
9622 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
9623 				zend_object_release(fcc.object);
9624 			}
9625 			HANDLE_EXCEPTION();
9626 		}
9627 
9628 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
9629 			init_func_run_time_cache(&func->op_array);
9630 		}
9631 	} else {
9632 		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
9633 		efree(error);
9634 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9635 		HANDLE_EXCEPTION();
9636 	}
9637 
9638 	call = zend_vm_stack_push_call_frame(call_info,
9639 		func, opline->extended_value, object_or_called_scope);
9640 	call->prev_execute_data = EX(call);
9641 	EX(call) = call;
9642 
9643 	ZEND_VM_NEXT_OPCODE();
9644 }
9645 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9646 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9647 {
9648 	USE_OPLINE
9649 	zval *expr_ptr, new_expr;
9650 
9651 	SAVE_OPLINE();
9652 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
9653 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
9654 		expr_ptr = zend_get_bad_ptr();
9655 		if (Z_ISREF_P(expr_ptr)) {
9656 			Z_ADDREF_P(expr_ptr);
9657 		} else {
9658 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
9659 		}
9660 
9661 	} else {
9662 		expr_ptr = RT_CONSTANT(opline, opline->op1);
9663 		if (IS_CONST == IS_TMP_VAR) {
9664 			/* pass */
9665 		} else if (IS_CONST == IS_CONST) {
9666 			Z_TRY_ADDREF_P(expr_ptr);
9667 		} else if (IS_CONST == IS_CV) {
9668 			ZVAL_DEREF(expr_ptr);
9669 			Z_TRY_ADDREF_P(expr_ptr);
9670 		} else /* if (IS_CONST == IS_VAR) */ {
9671 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
9672 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
9673 
9674 				expr_ptr = Z_REFVAL_P(expr_ptr);
9675 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
9676 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
9677 					expr_ptr = &new_expr;
9678 					efree_size(ref, sizeof(zend_reference));
9679 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
9680 					Z_ADDREF_P(expr_ptr);
9681 				}
9682 			}
9683 		}
9684 	}
9685 
9686 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
9687 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9688 		zend_string *str;
9689 		zend_ulong hval;
9690 
9691 add_again:
9692 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
9693 			str = Z_STR_P(offset);
9694 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9695 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
9696 					goto num_index;
9697 				}
9698 			}
9699 str_index:
9700 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
9701 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
9702 			hval = Z_LVAL_P(offset);
9703 num_index:
9704 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
9705 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
9706 			offset = Z_REFVAL_P(offset);
9707 			goto add_again;
9708 		} else if (Z_TYPE_P(offset) == IS_NULL) {
9709 			str = ZSTR_EMPTY_ALLOC();
9710 			goto str_index;
9711 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
9712 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
9713 			goto num_index;
9714 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
9715 			hval = 0;
9716 			goto num_index;
9717 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
9718 			hval = 1;
9719 			goto num_index;
9720 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
9721 			zend_use_resource_as_offset(offset);
9722 			hval = Z_RES_HANDLE_P(offset);
9723 			goto num_index;
9724 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
9725 			ZVAL_UNDEFINED_OP2();
9726 			str = ZSTR_EMPTY_ALLOC();
9727 			goto str_index;
9728 		} else {
9729 			zend_illegal_array_offset_access(offset);
9730 			zval_ptr_dtor_nogc(expr_ptr);
9731 		}
9732 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9733 	} else {
9734 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
9735 			zend_cannot_add_element();
9736 			zval_ptr_dtor_nogc(expr_ptr);
9737 		}
9738 	}
9739 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
9740 }
9741 
ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9742 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9743 {
9744 	zval *array;
9745 	uint32_t size;
9746 	USE_OPLINE
9747 
9748 	array = EX_VAR(opline->result.var);
9749 	if (IS_CONST != IS_UNUSED) {
9750 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
9751 		ZVAL_ARR(array, zend_new_array(size));
9752 		/* Explicitly initialize array as not-packed if flag is set */
9753 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
9754 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
9755 		}
9756 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9757 	} else {
9758 		ZVAL_ARR(array, zend_new_array(0));
9759 		ZEND_VM_NEXT_OPCODE();
9760 	}
9761 }
9762 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9763 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9764 {
9765 	USE_OPLINE
9766 	zval *container;
9767 	bool result;
9768 	zend_ulong hval;
9769 	zval *offset;
9770 
9771 	SAVE_OPLINE();
9772 	container = RT_CONSTANT(opline, opline->op1);
9773 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9774 
9775 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
9776 		HashTable *ht;
9777 		zval *value;
9778 		zend_string *str;
9779 
9780 isset_dim_obj_array:
9781 		ht = Z_ARRVAL_P(container);
9782 isset_again:
9783 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
9784 			str = Z_STR_P(offset);
9785 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9786 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
9787 					goto num_index_prop;
9788 				}
9789 			}
9790 			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
9791 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
9792 			hval = Z_LVAL_P(offset);
9793 num_index_prop:
9794 			value = zend_hash_index_find(ht, hval);
9795 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
9796 			offset = Z_REFVAL_P(offset);
9797 			goto isset_again;
9798 		} else {
9799 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
9800 			if (UNEXPECTED(EG(exception))) {
9801 				result = 0;
9802 				goto isset_dim_obj_exit;
9803 			}
9804 		}
9805 
9806 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
9807 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
9808 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
9809 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
9810 
9811 			if (IS_CONST & (IS_CONST|IS_CV)) {
9812 				/* avoid exception check */
9813 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9814 				ZEND_VM_SMART_BRANCH(result, 0);
9815 			}
9816 		} else {
9817 			result = (value == NULL || !i_zend_is_true(value));
9818 		}
9819 		goto isset_dim_obj_exit;
9820 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
9821 		container = Z_REFVAL_P(container);
9822 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
9823 			goto isset_dim_obj_array;
9824 		}
9825 	}
9826 
9827 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
9828 		offset++;
9829 	}
9830 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
9831 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
9832 	} else {
9833 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
9834 	}
9835 
9836 isset_dim_obj_exit:
9837 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9838 
9839 	ZEND_VM_SMART_BRANCH(result, 1);
9840 }
9841 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9842 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9843 {
9844 	USE_OPLINE
9845 	zval *container;
9846 	int result;
9847 	zval *offset;
9848 	zend_string *name, *tmp_name;
9849 
9850 	SAVE_OPLINE();
9851 	container = RT_CONSTANT(opline, opline->op1);
9852 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9853 
9854 	if (IS_CONST == IS_CONST ||
9855 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
9856 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
9857 			container = Z_REFVAL_P(container);
9858 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
9859 				result = (opline->extended_value & ZEND_ISEMPTY);
9860 				goto isset_object_finish;
9861 			}
9862 		} else {
9863 			result = (opline->extended_value & ZEND_ISEMPTY);
9864 			goto isset_object_finish;
9865 		}
9866 	}
9867 
9868 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
9869 		name = Z_STR_P(offset);
9870 	} else {
9871 		name = zval_try_get_tmp_string(offset, &tmp_name);
9872 		if (UNEXPECTED(!name)) {
9873 			result = 0;
9874 			goto isset_object_finish;
9875 		}
9876 	}
9877 
9878 	result =
9879 		(opline->extended_value & ZEND_ISEMPTY) ^
9880 		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));
9881 
9882 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
9883 		zend_tmp_string_release(tmp_name);
9884 	}
9885 
9886 isset_object_finish:
9887 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9888 
9889 	ZEND_VM_SMART_BRANCH(result, 1);
9890 }
9891 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9892 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9893 {
9894 	USE_OPLINE
9895 
9896 	zval *key, *subject;
9897 	HashTable *ht;
9898 	bool result;
9899 
9900 	SAVE_OPLINE();
9901 
9902 	key = RT_CONSTANT(opline, opline->op1);
9903 	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
9904 
9905 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
9906 array_key_exists_array:
9907 		ht = Z_ARRVAL_P(subject);
9908 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
9909 	} else {
9910 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
9911 			subject = Z_REFVAL_P(subject);
9912 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
9913 				goto array_key_exists_array;
9914 			}
9915 		}
9916 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
9917 		result = 0;
9918 	}
9919 
9920 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
9921 
9922 	ZEND_VM_SMART_BRANCH(result, 1);
9923 }
9924 
9925 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)9926 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9927 {
9928 	USE_OPLINE
9929 
9930 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
9931 
9932 	SAVE_OPLINE();
9933 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
9934 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
9935 	}
9936 
9937 	/* Destroy the previously yielded value */
9938 	zval_ptr_dtor(&generator->value);
9939 
9940 	/* Destroy the previously yielded key */
9941 	zval_ptr_dtor(&generator->key);
9942 
9943 	/* Set the new yielded value */
9944 	if (IS_CONST != IS_UNUSED) {
9945 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
9946 			/* Constants and temporary variables aren't yieldable by reference,
9947 			 * but we still allow them with a notice. */
9948 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
9949 				zval *value;
9950 
9951 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
9952 
9953 				value = RT_CONSTANT(opline, opline->op1);
9954 				ZVAL_COPY_VALUE(&generator->value, value);
9955 				if (IS_CONST == IS_CONST) {
9956 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
9957 						Z_ADDREF(generator->value);
9958 					}
9959 				}
9960 			} else {
9961 				zval *value_ptr = zend_get_bad_ptr();
9962 
9963 				/* If a function call result is yielded and the function did
9964 				 * not return by reference we throw a notice. */
9965 				do {
9966 					if (IS_CONST == IS_VAR) {
9967 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
9968 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
9969 						 && !Z_ISREF_P(value_ptr)) {
9970 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
9971 							ZVAL_COPY(&generator->value, value_ptr);
9972 							break;
9973 						}
9974 					}
9975 					if (Z_ISREF_P(value_ptr)) {
9976 						Z_ADDREF_P(value_ptr);
9977 					} else {
9978 						ZVAL_MAKE_REF_EX(value_ptr, 2);
9979 					}
9980 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
9981 				} while (0);
9982 
9983 			}
9984 		} else {
9985 			zval *value = RT_CONSTANT(opline, opline->op1);
9986 
9987 			/* Consts, temporary variables and references need copying */
9988 			if (IS_CONST == IS_CONST) {
9989 				ZVAL_COPY_VALUE(&generator->value, value);
9990 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
9991 					Z_ADDREF(generator->value);
9992 				}
9993 			} else if (IS_CONST == IS_TMP_VAR) {
9994 				ZVAL_COPY_VALUE(&generator->value, value);
9995 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
9996 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
9997 
9998 			} else {
9999 				ZVAL_COPY_VALUE(&generator->value, value);
10000 				if (IS_CONST == IS_CV) {
10001 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
10002 				}
10003 			}
10004 		}
10005 	} else {
10006 		/* If no value was specified yield null */
10007 		ZVAL_NULL(&generator->value);
10008 	}
10009 
10010 	/* Set the new yielded key */
10011 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
10012 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
10013 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
10014 			key = Z_REFVAL_P(key);
10015 		}
10016 		ZVAL_COPY(&generator->key, key);
10017 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
10018 
10019 		if (Z_TYPE(generator->key) == IS_LONG
10020 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
10021 		) {
10022 			generator->largest_used_integer_key = Z_LVAL(generator->key);
10023 		}
10024 	} else {
10025 		/* If no key was specified we use auto-increment keys */
10026 		generator->largest_used_integer_key++;
10027 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
10028 	}
10029 
10030 	if (RETURN_VALUE_USED(opline)) {
10031 		/* If the return value of yield is used set the send
10032 		 * target and initialize it to NULL */
10033 		generator->send_target = EX_VAR(opline->result.var);
10034 		ZVAL_NULL(generator->send_target);
10035 	} else {
10036 		generator->send_target = NULL;
10037 	}
10038 
10039 	/* We increment to the next op, so we are at the correct position when the
10040 	 * generator is resumed. */
10041 	ZEND_VM_INC_OPCODE();
10042 
10043 	/* The GOTO VM uses a local opline variable. We need to set the opline
10044 	 * variable in execute_data so we don't resume at an old position. */
10045 	SAVE_OPLINE();
10046 
10047 	ZEND_VM_RETURN();
10048 }
10049 
zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)10050 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)
10051 {
10052 	USE_OPLINE
10053 	zval *varname;
10054 	zval *retval;
10055 	zend_string *name, *tmp_name;
10056 	HashTable *target_symbol_table;
10057 
10058 	SAVE_OPLINE();
10059 	varname = RT_CONSTANT(opline, opline->op1);
10060 
10061 	if (IS_CONST == IS_CONST) {
10062 		name = Z_STR_P(varname);
10063 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
10064 		name = Z_STR_P(varname);
10065 		tmp_name = NULL;
10066 	} else {
10067 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
10068 			ZVAL_UNDEFINED_OP1();
10069 		}
10070 		name = zval_try_get_tmp_string(varname, &tmp_name);
10071 		if (UNEXPECTED(!name)) {
10072 			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
10073 
10074 			}
10075 			ZVAL_UNDEF(EX_VAR(opline->result.var));
10076 			HANDLE_EXCEPTION();
10077 		}
10078 	}
10079 
10080 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
10081 	retval = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
10082 	if (retval == NULL) {
10083 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
10084 fetch_this:
10085 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
10086 			if (IS_CONST != IS_CONST) {
10087 				zend_tmp_string_release(tmp_name);
10088 			}
10089 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10090 		}
10091 		if (type == BP_VAR_W) {
10092 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
10093 		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
10094 			retval = &EG(uninitialized_zval);
10095 		} else {
10096 			if (IS_CONST == IS_CV) {
10097 				/* Keep name alive in case an error handler tries to free it. */
10098 				zend_string_addref(name);
10099 			}
10100 			zend_error(E_WARNING, "Undefined %svariable $%s",
10101 				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
10102 			if (type == BP_VAR_RW && !EG(exception)) {
10103 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
10104 			} else {
10105 				retval = &EG(uninitialized_zval);
10106 			}
10107 			if (IS_CONST == IS_CV) {
10108 				zend_string_release(name);
10109 			}
10110 		}
10111 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
10112 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
10113 		retval = Z_INDIRECT_P(retval);
10114 		if (Z_TYPE_P(retval) == IS_UNDEF) {
10115 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
10116 				goto fetch_this;
10117 			}
10118 			if (type == BP_VAR_W) {
10119 				ZVAL_NULL(retval);
10120 			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
10121 				retval = &EG(uninitialized_zval);
10122 			} else {
10123 				zend_error(E_WARNING, "Undefined %svariable $%s",
10124 					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
10125 				if (type == BP_VAR_RW && !EG(exception)) {
10126 					ZVAL_NULL(retval);
10127 				} else {
10128 					retval = &EG(uninitialized_zval);
10129 				}
10130 			}
10131 		}
10132 	}
10133 
10134 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
10135 
10136 	}
10137 
10138 	if (IS_CONST != IS_CONST) {
10139 		zend_tmp_string_release(tmp_name);
10140 	}
10141 
10142 	ZEND_ASSERT(retval != NULL);
10143 	if (type == BP_VAR_R || type == BP_VAR_IS) {
10144 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
10145 	} else {
10146 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
10147 	}
10148 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10149 }
10150 
ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10151 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10152 {
10153 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10154 }
10155 
ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10156 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10157 {
10158 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10159 }
10160 
ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10161 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10162 {
10163 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10164 }
10165 
ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10166 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10167 {
10168 	int fetch_type =
10169 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
10170 			BP_VAR_W : BP_VAR_R;
10171 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10172 }
10173 
ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10174 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10175 {
10176 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10177 }
10178 
ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10179 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10180 {
10181 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10182 }
10183 
10184 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10185 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10186 {
10187 #if 0
10188 	USE_OPLINE
10189 #endif
10190 
10191 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
10192 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
10193 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10194 		}
10195 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10196 	} else {
10197 		if (IS_UNUSED == IS_UNUSED) {
10198 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10199 		}
10200 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10201 	}
10202 }
10203 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10204 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10205 {
10206 	USE_OPLINE
10207 	zval *function_name;
10208 	zend_class_entry *ce;
10209 	uint32_t call_info;
10210 	zend_function *fbc;
10211 	zend_execute_data *call;
10212 
10213 	SAVE_OPLINE();
10214 
10215 	if (IS_CONST == IS_CONST) {
10216 		/* no function found. try a static method in class */
10217 		ce = CACHED_PTR(opline->result.num);
10218 		if (UNEXPECTED(ce == NULL)) {
10219 			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);
10220 			if (UNEXPECTED(ce == NULL)) {
10221 
10222 				HANDLE_EXCEPTION();
10223 			}
10224 			if (IS_UNUSED != IS_CONST) {
10225 				CACHE_PTR(opline->result.num, ce);
10226 			}
10227 		}
10228 	} else if (IS_CONST == IS_UNUSED) {
10229 		ce = zend_fetch_class(NULL, opline->op1.num);
10230 		if (UNEXPECTED(ce == NULL)) {
10231 
10232 			HANDLE_EXCEPTION();
10233 		}
10234 	} else {
10235 		ce = Z_CE_P(EX_VAR(opline->op1.var));
10236 	}
10237 
10238 	if (IS_CONST == IS_CONST &&
10239 	    IS_UNUSED == IS_CONST &&
10240 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
10241 		/* nothing to do */
10242 	} else if (IS_CONST != IS_CONST &&
10243 	           IS_UNUSED == IS_CONST &&
10244 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
10245 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
10246 	} else if (IS_UNUSED != IS_UNUSED) {
10247 		function_name = NULL;
10248 		if (IS_UNUSED != IS_CONST) {
10249 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
10250 				do {
10251 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
10252 						function_name = Z_REFVAL_P(function_name);
10253 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
10254 							break;
10255 						}
10256 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
10257 						ZVAL_UNDEFINED_OP2();
10258 						if (UNEXPECTED(EG(exception) != NULL)) {
10259 							HANDLE_EXCEPTION();
10260 						}
10261 					}
10262 					zend_throw_error(NULL, "Method name must be a string");
10263 
10264 					HANDLE_EXCEPTION();
10265 				} while (0);
10266 			}
10267 		}
10268 
10269 		if (ce->get_static_method) {
10270 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
10271 		} else {
10272 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
10273 		}
10274 		if (UNEXPECTED(fbc == NULL)) {
10275 			if (EXPECTED(!EG(exception))) {
10276 				zend_undefined_method(ce, Z_STR_P(function_name));
10277 			}
10278 
10279 			HANDLE_EXCEPTION();
10280 		}
10281 		if (IS_UNUSED == IS_CONST &&
10282 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
10283 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
10284 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
10285 		}
10286 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
10287 			init_func_run_time_cache(&fbc->op_array);
10288 		}
10289 		if (IS_UNUSED != IS_CONST) {
10290 
10291 		}
10292 	} else {
10293 		if (UNEXPECTED(ce->constructor == NULL)) {
10294 			zend_throw_error(NULL, "Cannot call constructor");
10295 			HANDLE_EXCEPTION();
10296 		}
10297 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
10298 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
10299 			HANDLE_EXCEPTION();
10300 		}
10301 		fbc = ce->constructor;
10302 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
10303 			init_func_run_time_cache(&fbc->op_array);
10304 		}
10305 	}
10306 
10307 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
10308 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
10309 			ce = (zend_class_entry*)Z_OBJ(EX(This));
10310 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
10311 		} else {
10312 			zend_non_static_method_call(fbc);
10313 			HANDLE_EXCEPTION();
10314 		}
10315 	} else {
10316 		/* previous opcode is ZEND_FETCH_CLASS */
10317 		if (IS_CONST == IS_UNUSED
10318 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
10319 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
10320 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
10321 				ce = Z_OBJCE(EX(This));
10322 			} else {
10323 				ce = Z_CE(EX(This));
10324 			}
10325 		}
10326 		call_info = ZEND_CALL_NESTED_FUNCTION;
10327 	}
10328 
10329 	call = zend_vm_stack_push_call_frame(call_info,
10330 		fbc, opline->extended_value, ce);
10331 	call->prev_execute_data = EX(call);
10332 	EX(call) = call;
10333 
10334 	ZEND_VM_NEXT_OPCODE();
10335 }
10336 
ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10337 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10338 {
10339 	if (IS_CONST == IS_UNUSED) {
10340 		SAVE_OPLINE();
10341 		zend_verify_missing_return_type(EX(func));
10342 		HANDLE_EXCEPTION();
10343 	} else {
10344 /* prevents "undefined variable opline" errors */
10345 #if 0 || (IS_CONST != IS_UNUSED)
10346 		USE_OPLINE
10347 		zval *retval_ref, *retval_ptr;
10348 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
10349 		retval_ref = retval_ptr = RT_CONSTANT(opline, opline->op1);
10350 
10351 		if (IS_CONST == IS_CONST) {
10352 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
10353 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
10354 		} else if (IS_CONST == IS_VAR) {
10355 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
10356 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
10357 			}
10358 			ZVAL_DEREF(retval_ptr);
10359 		} else if (IS_CONST == IS_CV) {
10360 			ZVAL_DEREF(retval_ptr);
10361 		}
10362 
10363 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
10364 			ZEND_VM_NEXT_OPCODE();
10365 		}
10366 
10367 		if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
10368 			SAVE_OPLINE();
10369 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
10370 			if (UNEXPECTED(EG(exception))) {
10371 				HANDLE_EXCEPTION();
10372 			}
10373 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
10374 				ZEND_VM_NEXT_OPCODE();
10375 			}
10376 		}
10377 
10378 		zend_reference *ref = NULL;
10379 		void *cache_slot = CACHE_ADDR(opline->op2.num);
10380 		if (UNEXPECTED(retval_ref != retval_ptr)) {
10381 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
10382 				ref = Z_REF_P(retval_ref);
10383 			} else {
10384 				/* A cast might happen - unwrap the reference if this is a by-value return */
10385 				if (Z_REFCOUNT_P(retval_ref) == 1) {
10386 					ZVAL_UNREF(retval_ref);
10387 				} else {
10388 					Z_DELREF_P(retval_ref);
10389 					ZVAL_COPY(retval_ref, retval_ptr);
10390 				}
10391 				retval_ptr = retval_ref;
10392 			}
10393 		}
10394 
10395 		SAVE_OPLINE();
10396 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
10397 			zend_verify_return_error(EX(func), retval_ptr);
10398 			HANDLE_EXCEPTION();
10399 		}
10400 		ZEND_VM_NEXT_OPCODE();
10401 #endif
10402 	}
10403 }
10404 
ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10405 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10406 {
10407 	USE_OPLINE
10408 	zval *value, *arg;
10409 
10410 	if (IS_UNUSED == IS_CONST) {
10411 		SAVE_OPLINE();
10412 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
10413 		uint32_t arg_num;
10414 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
10415 		if (UNEXPECTED(!arg)) {
10416 
10417 			HANDLE_EXCEPTION();
10418 		}
10419 	} else {
10420 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
10421 	}
10422 
10423 	value = RT_CONSTANT(opline, opline->op1);
10424 	ZVAL_COPY_VALUE(arg, value);
10425 	if (IS_CONST == IS_CONST) {
10426 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
10427 			Z_ADDREF_P(arg);
10428 		}
10429 	}
10430 	ZEND_VM_NEXT_OPCODE();
10431 }
10432 
ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10433 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10434 {
10435 	USE_OPLINE
10436 	zval *value, *arg;
10437 	uint32_t arg_num;
10438 
10439 	if (IS_UNUSED == IS_CONST) {
10440 		SAVE_OPLINE();
10441 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
10442 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
10443 		if (UNEXPECTED(!arg)) {
10444 
10445 			HANDLE_EXCEPTION();
10446 		}
10447 	} else {
10448 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
10449 		arg_num = opline->op2.num;
10450 	}
10451 
10452 	if (EXPECTED(0)) {
10453 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
10454 			goto send_val_by_ref;
10455 		}
10456 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
10457 send_val_by_ref:
10458 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10459 	}
10460 	value = RT_CONSTANT(opline, opline->op1);
10461 	ZVAL_COPY_VALUE(arg, value);
10462 	if (IS_CONST == IS_CONST) {
10463 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
10464 			Z_ADDREF_P(arg);
10465 		}
10466 	}
10467 	ZEND_VM_NEXT_OPCODE();
10468 }
10469 
ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10470 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10471 {
10472 	USE_OPLINE
10473 	zval *value, *arg;
10474 	uint32_t arg_num;
10475 
10476 	if (IS_UNUSED == IS_CONST) {
10477 		SAVE_OPLINE();
10478 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
10479 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
10480 		if (UNEXPECTED(!arg)) {
10481 
10482 			HANDLE_EXCEPTION();
10483 		}
10484 	} else {
10485 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
10486 		arg_num = opline->op2.num;
10487 	}
10488 
10489 	if (EXPECTED(1)) {
10490 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
10491 			goto send_val_by_ref;
10492 		}
10493 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
10494 send_val_by_ref:
10495 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
10496 	}
10497 	value = RT_CONSTANT(opline, opline->op1);
10498 	ZVAL_COPY_VALUE(arg, value);
10499 	if (IS_CONST == IS_CONST) {
10500 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
10501 			Z_ADDREF_P(arg);
10502 		}
10503 	}
10504 	ZEND_VM_NEXT_OPCODE();
10505 }
10506 
ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10507 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10508 {
10509 	USE_OPLINE
10510 	zval *result;
10511 	zend_function *constructor;
10512 	zend_class_entry *ce;
10513 	zend_execute_data *call;
10514 
10515 	SAVE_OPLINE();
10516 	if (IS_CONST == IS_CONST) {
10517 		ce = CACHED_PTR(opline->op2.num);
10518 		if (UNEXPECTED(ce == NULL)) {
10519 			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);
10520 			if (UNEXPECTED(ce == NULL)) {
10521 				ZVAL_UNDEF(EX_VAR(opline->result.var));
10522 				HANDLE_EXCEPTION();
10523 			}
10524 			CACHE_PTR(opline->op2.num, ce);
10525 		}
10526 	} else if (IS_CONST == IS_UNUSED) {
10527 		ce = zend_fetch_class(NULL, opline->op1.num);
10528 		if (UNEXPECTED(ce == NULL)) {
10529 			ZVAL_UNDEF(EX_VAR(opline->result.var));
10530 			HANDLE_EXCEPTION();
10531 		}
10532 	} else {
10533 		ce = Z_CE_P(EX_VAR(opline->op1.var));
10534 	}
10535 
10536 	result = EX_VAR(opline->result.var);
10537 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
10538 		ZVAL_UNDEF(result);
10539 		HANDLE_EXCEPTION();
10540 	}
10541 
10542 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
10543 	if (constructor == NULL) {
10544 		if (UNEXPECTED(EG(exception))) {
10545 			HANDLE_EXCEPTION();
10546 		}
10547 
10548 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
10549 		 * opcode is DO_FCALL in case EXT instructions are used. */
10550 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
10551 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
10552 		}
10553 
10554 		/* Perform a dummy function call */
10555 		call = zend_vm_stack_push_call_frame(
10556 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
10557 			opline->extended_value, NULL);
10558 	} else {
10559 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
10560 			init_func_run_time_cache(&constructor->op_array);
10561 		}
10562 		/* We are not handling overloaded classes right now */
10563 		call = zend_vm_stack_push_call_frame(
10564 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
10565 			constructor,
10566 			opline->extended_value,
10567 			Z_OBJ_P(result));
10568 		Z_ADDREF_P(result);
10569 	}
10570 
10571 	call->prev_execute_data = EX(call);
10572 	EX(call) = call;
10573 	ZEND_VM_NEXT_OPCODE();
10574 }
10575 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10576 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10577 {
10578 	USE_OPLINE
10579 	zval *expr_ptr, new_expr;
10580 
10581 	SAVE_OPLINE();
10582 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
10583 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
10584 		expr_ptr = zend_get_bad_ptr();
10585 		if (Z_ISREF_P(expr_ptr)) {
10586 			Z_ADDREF_P(expr_ptr);
10587 		} else {
10588 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
10589 		}
10590 
10591 	} else {
10592 		expr_ptr = RT_CONSTANT(opline, opline->op1);
10593 		if (IS_CONST == IS_TMP_VAR) {
10594 			/* pass */
10595 		} else if (IS_CONST == IS_CONST) {
10596 			Z_TRY_ADDREF_P(expr_ptr);
10597 		} else if (IS_CONST == IS_CV) {
10598 			ZVAL_DEREF(expr_ptr);
10599 			Z_TRY_ADDREF_P(expr_ptr);
10600 		} else /* if (IS_CONST == IS_VAR) */ {
10601 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
10602 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
10603 
10604 				expr_ptr = Z_REFVAL_P(expr_ptr);
10605 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
10606 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
10607 					expr_ptr = &new_expr;
10608 					efree_size(ref, sizeof(zend_reference));
10609 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
10610 					Z_ADDREF_P(expr_ptr);
10611 				}
10612 			}
10613 		}
10614 	}
10615 
10616 	if (IS_UNUSED != IS_UNUSED) {
10617 		zval *offset = NULL;
10618 		zend_string *str;
10619 		zend_ulong hval;
10620 
10621 add_again:
10622 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
10623 			str = Z_STR_P(offset);
10624 			if (IS_UNUSED != IS_CONST) {
10625 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
10626 					goto num_index;
10627 				}
10628 			}
10629 str_index:
10630 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
10631 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
10632 			hval = Z_LVAL_P(offset);
10633 num_index:
10634 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
10635 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
10636 			offset = Z_REFVAL_P(offset);
10637 			goto add_again;
10638 		} else if (Z_TYPE_P(offset) == IS_NULL) {
10639 			str = ZSTR_EMPTY_ALLOC();
10640 			goto str_index;
10641 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
10642 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
10643 			goto num_index;
10644 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
10645 			hval = 0;
10646 			goto num_index;
10647 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
10648 			hval = 1;
10649 			goto num_index;
10650 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
10651 			zend_use_resource_as_offset(offset);
10652 			hval = Z_RES_HANDLE_P(offset);
10653 			goto num_index;
10654 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
10655 			ZVAL_UNDEFINED_OP2();
10656 			str = ZSTR_EMPTY_ALLOC();
10657 			goto str_index;
10658 		} else {
10659 			zend_illegal_array_offset_access(offset);
10660 			zval_ptr_dtor_nogc(expr_ptr);
10661 		}
10662 
10663 	} else {
10664 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
10665 			zend_cannot_add_element();
10666 			zval_ptr_dtor_nogc(expr_ptr);
10667 		}
10668 	}
10669 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10670 }
10671 
ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10672 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10673 {
10674 	zval *array;
10675 	uint32_t size;
10676 	USE_OPLINE
10677 
10678 	array = EX_VAR(opline->result.var);
10679 	if (IS_CONST != IS_UNUSED) {
10680 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
10681 		ZVAL_ARR(array, zend_new_array(size));
10682 		/* Explicitly initialize array as not-packed if flag is set */
10683 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
10684 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
10685 		}
10686 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10687 	} else {
10688 		ZVAL_ARR(array, zend_new_array(0));
10689 		ZEND_VM_NEXT_OPCODE();
10690 	}
10691 }
10692 
ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10693 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10694 {
10695 	USE_OPLINE
10696 	zval *varname;
10697 	zend_string *name, *tmp_name;
10698 	HashTable *target_symbol_table;
10699 
10700 	SAVE_OPLINE();
10701 
10702 	varname = RT_CONSTANT(opline, opline->op1);
10703 
10704 	if (IS_CONST == IS_CONST) {
10705 		name = Z_STR_P(varname);
10706 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
10707 		name = Z_STR_P(varname);
10708 		tmp_name = NULL;
10709 	} else {
10710 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
10711 			varname = ZVAL_UNDEFINED_OP1();
10712 		}
10713 		name = zval_try_get_tmp_string(varname, &tmp_name);
10714 		if (UNEXPECTED(!name)) {
10715 
10716 			HANDLE_EXCEPTION();
10717 		}
10718 	}
10719 
10720 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
10721 	zend_hash_del_ind(target_symbol_table, name);
10722 
10723 	if (IS_CONST != IS_CONST) {
10724 		zend_tmp_string_release(tmp_name);
10725 	}
10726 
10727 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10728 }
10729 
10730 /* 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)10731 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10732 {
10733 	USE_OPLINE
10734 	zval *value;
10735 	/* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
10736 	int result;
10737 	zval *varname;
10738 	zend_string *name, *tmp_name;
10739 	HashTable *target_symbol_table;
10740 
10741 	SAVE_OPLINE();
10742 	varname = RT_CONSTANT(opline, opline->op1);
10743 	if (IS_CONST == IS_CONST) {
10744 		name = Z_STR_P(varname);
10745 	} else {
10746 		name = zval_get_tmp_string(varname, &tmp_name);
10747 	}
10748 
10749 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
10750 	value = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST);
10751 
10752 	if (IS_CONST != IS_CONST) {
10753 		zend_tmp_string_release(tmp_name);
10754 	}
10755 
10756 	if (!value) {
10757 		result = (opline->extended_value & ZEND_ISEMPTY);
10758 	} else {
10759 		if (Z_TYPE_P(value) == IS_INDIRECT) {
10760 			value = Z_INDIRECT_P(value);
10761 		}
10762 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
10763 			if (Z_ISREF_P(value)) {
10764 				value = Z_REFVAL_P(value);
10765 			}
10766 			result = Z_TYPE_P(value) > IS_NULL;
10767 		} else {
10768 			result = !i_zend_is_true(value);
10769 		}
10770 	}
10771 
10772 	ZEND_VM_SMART_BRANCH(result, 1);
10773 }
10774 
10775 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10776 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10777 {
10778 	USE_OPLINE
10779 
10780 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
10781 
10782 	SAVE_OPLINE();
10783 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
10784 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
10785 	}
10786 
10787 	/* Destroy the previously yielded value */
10788 	zval_ptr_dtor(&generator->value);
10789 
10790 	/* Destroy the previously yielded key */
10791 	zval_ptr_dtor(&generator->key);
10792 
10793 	/* Set the new yielded value */
10794 	if (IS_CONST != IS_UNUSED) {
10795 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
10796 			/* Constants and temporary variables aren't yieldable by reference,
10797 			 * but we still allow them with a notice. */
10798 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
10799 				zval *value;
10800 
10801 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
10802 
10803 				value = RT_CONSTANT(opline, opline->op1);
10804 				ZVAL_COPY_VALUE(&generator->value, value);
10805 				if (IS_CONST == IS_CONST) {
10806 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
10807 						Z_ADDREF(generator->value);
10808 					}
10809 				}
10810 			} else {
10811 				zval *value_ptr = zend_get_bad_ptr();
10812 
10813 				/* If a function call result is yielded and the function did
10814 				 * not return by reference we throw a notice. */
10815 				do {
10816 					if (IS_CONST == IS_VAR) {
10817 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
10818 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
10819 						 && !Z_ISREF_P(value_ptr)) {
10820 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
10821 							ZVAL_COPY(&generator->value, value_ptr);
10822 							break;
10823 						}
10824 					}
10825 					if (Z_ISREF_P(value_ptr)) {
10826 						Z_ADDREF_P(value_ptr);
10827 					} else {
10828 						ZVAL_MAKE_REF_EX(value_ptr, 2);
10829 					}
10830 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
10831 				} while (0);
10832 
10833 			}
10834 		} else {
10835 			zval *value = RT_CONSTANT(opline, opline->op1);
10836 
10837 			/* Consts, temporary variables and references need copying */
10838 			if (IS_CONST == IS_CONST) {
10839 				ZVAL_COPY_VALUE(&generator->value, value);
10840 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
10841 					Z_ADDREF(generator->value);
10842 				}
10843 			} else if (IS_CONST == IS_TMP_VAR) {
10844 				ZVAL_COPY_VALUE(&generator->value, value);
10845 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
10846 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
10847 
10848 			} else {
10849 				ZVAL_COPY_VALUE(&generator->value, value);
10850 				if (IS_CONST == IS_CV) {
10851 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
10852 				}
10853 			}
10854 		}
10855 	} else {
10856 		/* If no value was specified yield null */
10857 		ZVAL_NULL(&generator->value);
10858 	}
10859 
10860 	/* Set the new yielded key */
10861 	if (IS_UNUSED != IS_UNUSED) {
10862 		zval *key = NULL;
10863 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
10864 			key = Z_REFVAL_P(key);
10865 		}
10866 		ZVAL_COPY(&generator->key, key);
10867 
10868 		if (Z_TYPE(generator->key) == IS_LONG
10869 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
10870 		) {
10871 			generator->largest_used_integer_key = Z_LVAL(generator->key);
10872 		}
10873 	} else {
10874 		/* If no key was specified we use auto-increment keys */
10875 		generator->largest_used_integer_key++;
10876 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
10877 	}
10878 
10879 	if (RETURN_VALUE_USED(opline)) {
10880 		/* If the return value of yield is used set the send
10881 		 * target and initialize it to NULL */
10882 		generator->send_target = EX_VAR(opline->result.var);
10883 		ZVAL_NULL(generator->send_target);
10884 	} else {
10885 		generator->send_target = NULL;
10886 	}
10887 
10888 	/* We increment to the next op, so we are at the correct position when the
10889 	 * generator is resumed. */
10890 	ZEND_VM_INC_OPCODE();
10891 
10892 	/* The GOTO VM uses a local opline variable. We need to set the opline
10893 	 * variable in execute_data so we don't resume at an old position. */
10894 	SAVE_OPLINE();
10895 
10896 	ZEND_VM_RETURN();
10897 }
10898 
ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10899 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10900 {
10901 	USE_OPLINE
10902 	zval *op;
10903 
10904 	SAVE_OPLINE();
10905 	op = RT_CONSTANT(opline, opline->op1);
10906 	zend_match_unhandled_error(op);
10907 	HANDLE_EXCEPTION();
10908 }
10909 
ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10910 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10911 {
10912 	USE_OPLINE
10913 	zval *op1;
10914 	zend_long count;
10915 
10916 	SAVE_OPLINE();
10917 	op1 = RT_CONSTANT(opline, opline->op1);
10918 
10919 	while (1) {
10920 		if (Z_TYPE_P(op1) == IS_ARRAY) {
10921 			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
10922 			break;
10923 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
10924 			zend_object *zobj = Z_OBJ_P(op1);
10925 
10926 			/* first, we check if the handler is defined */
10927 			if (zobj->handlers->count_elements) {
10928 				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
10929 					break;
10930 				}
10931 				if (UNEXPECTED(EG(exception))) {
10932 					count = 0;
10933 					break;
10934 				}
10935 			}
10936 
10937 			/* if not and the object implements Countable we call its count() method */
10938 			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
10939 				zval retval;
10940 
10941 				zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
10942 				zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
10943 				count = zval_get_long(&retval);
10944 				zval_ptr_dtor(&retval);
10945 				break;
10946 			}
10947 
10948 			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
10949 		} else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
10950 			op1 = Z_REFVAL_P(op1);
10951 			continue;
10952 		} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10953 			ZVAL_UNDEFINED_OP1();
10954 		}
10955 		count = 0;
10956 		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1));
10957 		break;
10958 	}
10959 
10960 	ZVAL_LONG(EX_VAR(opline->result.var), count);
10961 
10962 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
10963 }
10964 
ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)10965 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10966 {
10967 	USE_OPLINE
10968 
10969 	if (IS_CONST == IS_UNUSED) {
10970 		SAVE_OPLINE();
10971 		if (UNEXPECTED(!EX(func)->common.scope)) {
10972 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
10973 			ZVAL_UNDEF(EX_VAR(opline->result.var));
10974 			HANDLE_EXCEPTION();
10975 		} else {
10976 			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
10977 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
10978 			if (UNEXPECTED(EG(exception))) {
10979 				HANDLE_EXCEPTION();
10980 			}
10981 			ZEND_VM_NEXT_OPCODE();
10982 		}
10983 	} else {
10984 		zval *op1;
10985 
10986 		SAVE_OPLINE();
10987 		op1 = RT_CONSTANT(opline, opline->op1);
10988 		while (1) {
10989 			if (Z_TYPE_P(op1) == IS_OBJECT) {
10990 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
10991 			} else if ((IS_CONST & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
10992 				op1 = Z_REFVAL_P(op1);
10993 				continue;
10994 			} else {
10995 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
10996 					ZVAL_UNDEFINED_OP1();
10997 				}
10998 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
10999 				ZVAL_UNDEF(EX_VAR(opline->result.var));
11000 			}
11001 			break;
11002 		}
11003 
11004 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11005 	}
11006 }
11007 
ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11008 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11009 {
11010 	USE_OPLINE
11011 	zval *op1;
11012 	zend_string *type;
11013 
11014 	SAVE_OPLINE();
11015 	op1 = RT_CONSTANT(opline, opline->op1);
11016 	type = zend_zval_get_legacy_type(op1);
11017 	if (EXPECTED(type)) {
11018 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
11019 	} else {
11020 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
11021 	}
11022 
11023 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11024 }
11025 
ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11026 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11027 {
11028 	USE_OPLINE
11029 	zend_array *ht;
11030 	uint32_t arg_count, result_size, skip;
11031 
11032 	arg_count = EX_NUM_ARGS();
11033 	if (IS_CONST == IS_CONST) {
11034 		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
11035 		if (arg_count < skip) {
11036 			result_size = 0;
11037 		} else {
11038 			result_size = arg_count - skip;
11039 		}
11040 	} else {
11041 		skip = 0;
11042 		result_size = arg_count;
11043 	}
11044 
11045 	if (result_size) {
11046 		SAVE_OPLINE();
11047 		uint32_t first_extra_arg = EX(func)->op_array.num_args;
11048 
11049 		ht = zend_new_array(result_size);
11050 		ZVAL_ARR(EX_VAR(opline->result.var), ht);
11051 		zend_hash_real_init_packed(ht);
11052 		ZEND_HASH_FILL_PACKED(ht) {
11053 			zval *p, *q;
11054 			uint32_t i = skip;
11055 			p = EX_VAR_NUM(i);
11056 			if (arg_count > first_extra_arg) {
11057 				while (i < first_extra_arg) {
11058 					q = p;
11059 					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
11060 						ZVAL_DEREF(q);
11061 						if (Z_OPT_REFCOUNTED_P(q)) {
11062 							Z_ADDREF_P(q);
11063 						}
11064 						ZEND_HASH_FILL_SET(q);
11065 					} else {
11066 						ZEND_HASH_FILL_SET_NULL();
11067 					}
11068 					ZEND_HASH_FILL_NEXT();
11069 					p++;
11070 					i++;
11071 				}
11072 				if (skip < first_extra_arg) {
11073 					skip = 0;
11074 				} else {
11075 					skip -= first_extra_arg;
11076 				}
11077 				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
11078 			}
11079 			while (i < arg_count) {
11080 				q = p;
11081 				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
11082 					ZVAL_DEREF(q);
11083 					if (Z_OPT_REFCOUNTED_P(q)) {
11084 						Z_ADDREF_P(q);
11085 					}
11086 					ZEND_HASH_FILL_SET(q);
11087 				} else {
11088 					ZEND_HASH_FILL_SET_NULL();
11089 				}
11090 				ZEND_HASH_FILL_NEXT();
11091 				p++;
11092 				i++;
11093 			}
11094 		} ZEND_HASH_FILL_END();
11095 		ht->nNumOfElements = result_size;
11096 	} else {
11097 		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
11098 	}
11099 	ZEND_VM_NEXT_OPCODE();
11100 }
11101 
11102 /* Contrary to what its name indicates, ZEND_COPY_TMP may receive and define references. */
ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11103 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11104 {
11105 	USE_OPLINE
11106 	zval *op1, *op2;
11107 
11108 	SAVE_OPLINE();
11109 	op1 = RT_CONSTANT(opline, opline->op1);
11110 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
11111 	div_function(EX_VAR(opline->result.var), op1, op2);
11112 
11113 
11114 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11115 }
11116 
ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11117 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11118 {
11119 	USE_OPLINE
11120 	zval *op1, *op2;
11121 
11122 	SAVE_OPLINE();
11123 	op1 = RT_CONSTANT(opline, opline->op1);
11124 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
11125 	pow_function(EX_VAR(opline->result.var), op1, op2);
11126 
11127 
11128 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11129 }
11130 
ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11131 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11132 {
11133 	USE_OPLINE
11134 	zval *op1, *op2;
11135 
11136 	op1 = RT_CONSTANT(opline, opline->op1);
11137 	op2 = EX_VAR(opline->op2.var);
11138 
11139 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
11140 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
11141 		zend_string *op1_str = Z_STR_P(op1);
11142 		zend_string *op2_str = Z_STR_P(op2);
11143 		zend_string *str;
11144 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
11145 
11146 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
11147 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
11148 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
11149 			} else {
11150 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
11151 			}
11152 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
11153 				zend_string_release_ex(op1_str, 0);
11154 			}
11155 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
11156 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
11157 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
11158 			} else {
11159 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
11160 			}
11161 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11162 				zend_string_release_ex(op2_str, 0);
11163 			}
11164 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
11165 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
11166 			size_t len = ZSTR_LEN(op1_str);
11167 
11168 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
11169 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
11170 			}
11171 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
11172 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11173 			GC_ADD_FLAGS(str, flags);
11174 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11175 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11176 				zend_string_release_ex(op2_str, 0);
11177 			}
11178 		} else {
11179 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
11180 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
11181 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11182 			GC_ADD_FLAGS(str, flags);
11183 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11184 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
11185 				zend_string_release_ex(op1_str, 0);
11186 			}
11187 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11188 				zend_string_release_ex(op2_str, 0);
11189 			}
11190 		}
11191 		ZEND_VM_NEXT_OPCODE();
11192 	} else {
11193 		SAVE_OPLINE();
11194 
11195 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
11196 			op1 = ZVAL_UNDEFINED_OP1();
11197 		}
11198 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
11199 			op2 = ZVAL_UNDEFINED_OP2();
11200 		}
11201 		concat_function(EX_VAR(opline->result.var), op1, op2);
11202 
11203 
11204 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11205 	}
11206 }
11207 
ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11208 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11209 {
11210 	USE_OPLINE
11211 	zval *op1, *op2;
11212 
11213 	SAVE_OPLINE();
11214 	op1 = RT_CONSTANT(opline, opline->op1);
11215 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
11216 	compare_function(EX_VAR(opline->result.var), op1, op2);
11217 
11218 
11219 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11220 }
11221 
ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11222 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11223 {
11224 	USE_OPLINE
11225 	zval *container, *dim, *value;
11226 
11227 	SAVE_OPLINE();
11228 	container = RT_CONSTANT(opline, opline->op1);
11229 	dim = EX_VAR(opline->op2.var);
11230 	if (IS_CONST != IS_CONST) {
11231 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
11232 fetch_dim_r_array:
11233 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
11234 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
11235 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
11236 			container = Z_REFVAL_P(container);
11237 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
11238 				goto fetch_dim_r_array;
11239 			} else {
11240 				goto fetch_dim_r_slow;
11241 			}
11242 		} else {
11243 fetch_dim_r_slow:
11244 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
11245 				dim++;
11246 			}
11247 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
11248 		}
11249 	} else {
11250 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
11251 	}
11252 
11253 
11254 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11255 }
11256 
ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11257 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11258 {
11259 	USE_OPLINE
11260 	zval *container;
11261 
11262 	SAVE_OPLINE();
11263 	container = RT_CONSTANT(opline, opline->op1);
11264 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
11265 
11266 
11267 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11268 }
11269 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11270 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11271 {
11272 #if 0
11273 	USE_OPLINE
11274 #endif
11275 
11276 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
11277 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
11278 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11279 		}
11280 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11281 	} else {
11282 		if (IS_CV == IS_UNUSED) {
11283 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11284 		}
11285 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11286 	}
11287 }
11288 
ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11289 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11290 {
11291 	USE_OPLINE
11292 	zval *container;
11293 	void **cache_slot = NULL;
11294 
11295 	SAVE_OPLINE();
11296 	container = RT_CONSTANT(opline, opline->op1);
11297 
11298 	if (IS_CONST == IS_CONST ||
11299 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
11300 		do {
11301 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11302 				container = Z_REFVAL_P(container);
11303 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
11304 					break;
11305 				}
11306 			}
11307 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
11308 				ZVAL_UNDEFINED_OP1();
11309 			}
11310 			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
11311 			ZVAL_NULL(EX_VAR(opline->result.var));
11312 			goto fetch_obj_r_finish;
11313 		} while (0);
11314 	}
11315 
11316 	/* here we are sure we are dealing with an object */
11317 	do {
11318 		zend_object *zobj = Z_OBJ_P(container);
11319 		zend_string *name, *tmp_name;
11320 		zval *retval;
11321 
11322 		if (IS_CV == IS_CONST) {
11323 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
11324 
11325 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
11326 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
11327 
11328 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
11329 					retval = OBJ_PROP(zobj, prop_offset);
11330 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
11331 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11332 							goto fetch_obj_r_copy;
11333 						} else {
11334 fetch_obj_r_fast_copy:
11335 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
11336 							ZEND_VM_NEXT_OPCODE();
11337 						}
11338 					}
11339 				} else if (EXPECTED(zobj->properties != NULL)) {
11340 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
11341 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
11342 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
11343 
11344 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
11345 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
11346 
11347 							if (EXPECTED(p->key == name) ||
11348 							    (EXPECTED(p->h == ZSTR_H(name)) &&
11349 							     EXPECTED(p->key != NULL) &&
11350 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
11351 								retval = &p->val;
11352 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11353 									goto fetch_obj_r_copy;
11354 								} else {
11355 									goto fetch_obj_r_fast_copy;
11356 								}
11357 							}
11358 						}
11359 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
11360 					}
11361 					retval = zend_hash_find_known_hash(zobj->properties, name);
11362 					if (EXPECTED(retval)) {
11363 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
11364 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
11365 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11366 							goto fetch_obj_r_copy;
11367 						} else {
11368 							goto fetch_obj_r_fast_copy;
11369 						}
11370 					}
11371 				}
11372 			}
11373 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
11374 		} else {
11375 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
11376 			if (UNEXPECTED(!name)) {
11377 				ZVAL_UNDEF(EX_VAR(opline->result.var));
11378 				break;
11379 			}
11380 		}
11381 
11382 #if ZEND_DEBUG
11383 		/* For non-standard object handlers, verify a declared property type in debug builds.
11384 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
11385 		zend_property_info *prop_info = NULL;
11386 		if (zobj->handlers->read_property != zend_std_read_property) {
11387 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
11388 		}
11389 #endif
11390 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
11391 #if ZEND_DEBUG
11392 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
11393 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
11394 			ZVAL_OPT_DEREF(retval);
11395 			zend_verify_property_type(prop_info, retval, /* strict */ true);
11396 		}
11397 #endif
11398 
11399 		if (IS_CV != IS_CONST) {
11400 			zend_tmp_string_release(tmp_name);
11401 		}
11402 
11403 		if (retval != EX_VAR(opline->result.var)) {
11404 fetch_obj_r_copy:
11405 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
11406 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
11407 			zend_unwrap_reference(retval);
11408 		}
11409 	} while (0);
11410 
11411 fetch_obj_r_finish:
11412 
11413 
11414 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11415 }
11416 
ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11417 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11418 {
11419 	USE_OPLINE
11420 	zval *container;
11421 	void **cache_slot = NULL;
11422 
11423 	SAVE_OPLINE();
11424 	container = RT_CONSTANT(opline, opline->op1);
11425 
11426 	if (IS_CONST == IS_CONST ||
11427 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
11428 		do {
11429 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
11430 				container = Z_REFVAL_P(container);
11431 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
11432 					break;
11433 				}
11434 			}
11435 			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
11436 				ZVAL_UNDEFINED_OP2();
11437 			}
11438 			ZVAL_NULL(EX_VAR(opline->result.var));
11439 			goto fetch_obj_is_finish;
11440 		} while (0);
11441 	}
11442 
11443 	/* here we are sure we are dealing with an object */
11444 	do {
11445 		zend_object *zobj = Z_OBJ_P(container);
11446 		zend_string *name, *tmp_name;
11447 		zval *retval;
11448 
11449 		if (IS_CV == IS_CONST) {
11450 			cache_slot = CACHE_ADDR(opline->extended_value);
11451 
11452 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
11453 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
11454 
11455 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
11456 					retval = OBJ_PROP(zobj, prop_offset);
11457 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
11458 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11459 							goto fetch_obj_is_copy;
11460 						} else {
11461 fetch_obj_is_fast_copy:
11462 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
11463 							ZEND_VM_NEXT_OPCODE();
11464 						}
11465 					}
11466 				} else if (EXPECTED(zobj->properties != NULL)) {
11467 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
11468 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
11469 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
11470 
11471 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
11472 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
11473 
11474 							if (EXPECTED(p->key == name) ||
11475 							    (EXPECTED(p->h == ZSTR_H(name)) &&
11476 							     EXPECTED(p->key != NULL) &&
11477 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
11478 								retval = &p->val;
11479 								if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11480 									goto fetch_obj_is_copy;
11481 								} else {
11482 									goto fetch_obj_is_fast_copy;
11483 								}
11484 							}
11485 						}
11486 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
11487 					}
11488 					retval = zend_hash_find_known_hash(zobj->properties, name);
11489 					if (EXPECTED(retval)) {
11490 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
11491 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
11492 						if (0 || (IS_CONST & (IS_TMP_VAR|IS_VAR)) != 0) {
11493 							goto fetch_obj_is_copy;
11494 						} else {
11495 							goto fetch_obj_is_fast_copy;
11496 						}
11497 					}
11498 				}
11499 			}
11500 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
11501 		} else {
11502 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
11503 			if (UNEXPECTED(!name)) {
11504 				ZVAL_UNDEF(EX_VAR(opline->result.var));
11505 				break;
11506 			}
11507 		}
11508 
11509 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
11510 
11511 		if (IS_CV != IS_CONST) {
11512 			zend_tmp_string_release(tmp_name);
11513 		}
11514 
11515 		if (retval != EX_VAR(opline->result.var)) {
11516 fetch_obj_is_copy:
11517 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
11518 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
11519 			zend_unwrap_reference(retval);
11520 		}
11521 	} while (0);
11522 
11523 fetch_obj_is_finish:
11524 
11525 
11526 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11527 }
11528 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11529 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11530 {
11531 #if 0
11532 	USE_OPLINE
11533 #endif
11534 
11535 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
11536 		/* Behave like FETCH_OBJ_W */
11537 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
11538 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11539 		}
11540 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11541 	} else {
11542 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
11543 	}
11544 }
11545 
ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11546 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11547 {
11548 	USE_OPLINE
11549 	zval *container;
11550 
11551 	SAVE_OPLINE();
11552 	container = RT_CONSTANT(opline, opline->op1);
11553 	zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
11554 
11555 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11556 }
11557 
ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11558 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11559 {
11560 	USE_OPLINE
11561 	zval *op1, *op2;
11562 	zend_string *op1_str, *op2_str, *str;
11563 
11564 
11565 	op1 = RT_CONSTANT(opline, opline->op1);
11566 	op2 = EX_VAR(opline->op2.var);
11567 	if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
11568 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
11569 		zend_string *op1_str = Z_STR_P(op1);
11570 		zend_string *op2_str = Z_STR_P(op2);
11571 		zend_string *str;
11572 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
11573 
11574 		if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
11575 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
11576 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
11577 			} else {
11578 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
11579 			}
11580 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
11581 				zend_string_release_ex(op1_str, 0);
11582 			}
11583 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
11584 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
11585 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
11586 			} else {
11587 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
11588 			}
11589 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11590 				zend_string_release_ex(op2_str, 0);
11591 			}
11592 		} else if (IS_CONST != IS_CONST && IS_CONST != IS_CV &&
11593 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
11594 			size_t len = ZSTR_LEN(op1_str);
11595 
11596 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
11597 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11598 			GC_ADD_FLAGS(str, flags);
11599 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11600 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11601 				zend_string_release_ex(op2_str, 0);
11602 			}
11603 		} else {
11604 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
11605 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
11606 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11607 			GC_ADD_FLAGS(str, flags);
11608 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11609 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
11610 				zend_string_release_ex(op1_str, 0);
11611 			}
11612 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
11613 				zend_string_release_ex(op2_str, 0);
11614 			}
11615 		}
11616 		ZEND_VM_NEXT_OPCODE();
11617 	}
11618 
11619 	SAVE_OPLINE();
11620 	if (IS_CONST == IS_CONST) {
11621 		op1_str = Z_STR_P(op1);
11622 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
11623 		op1_str = zend_string_copy(Z_STR_P(op1));
11624 	} else {
11625 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
11626 			ZVAL_UNDEFINED_OP1();
11627 		}
11628 		op1_str = zval_get_string_func(op1);
11629 	}
11630 	if (IS_CV == IS_CONST) {
11631 		op2_str = Z_STR_P(op2);
11632 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
11633 		op2_str = zend_string_copy(Z_STR_P(op2));
11634 	} else {
11635 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
11636 			ZVAL_UNDEFINED_OP2();
11637 		}
11638 		op2_str = zval_get_string_func(op2);
11639 	}
11640 	do {
11641 		if (IS_CONST != IS_CONST) {
11642 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
11643 				if (IS_CV == IS_CONST) {
11644 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
11645 						GC_ADDREF(op2_str);
11646 					}
11647 				}
11648 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
11649 				zend_string_release_ex(op1_str, 0);
11650 				break;
11651 			}
11652 		}
11653 		if (IS_CV != IS_CONST) {
11654 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
11655 				if (IS_CONST == IS_CONST) {
11656 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
11657 						GC_ADDREF(op1_str);
11658 					}
11659 				}
11660 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
11661 				zend_string_release_ex(op2_str, 0);
11662 				break;
11663 			}
11664 		}
11665 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
11666 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
11667 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
11668 
11669 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
11670 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
11671 		if (IS_CONST != IS_CONST) {
11672 			zend_string_release_ex(op1_str, 0);
11673 		}
11674 		if (IS_CV != IS_CONST) {
11675 			zend_string_release_ex(op2_str, 0);
11676 		}
11677 	} while (0);
11678 
11679 
11680 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
11681 }
11682 
ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11683 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11684 {
11685 	USE_OPLINE
11686 	zval *function_name;
11687 	zval *object;
11688 	zend_function *fbc;
11689 	zend_class_entry *called_scope;
11690 	zend_object *obj;
11691 	zend_execute_data *call;
11692 	uint32_t call_info;
11693 
11694 	SAVE_OPLINE();
11695 
11696 	object = RT_CONSTANT(opline, opline->op1);
11697 
11698 	if (IS_CV != IS_CONST) {
11699 		function_name = EX_VAR(opline->op2.var);
11700 	}
11701 
11702 	if (IS_CV != IS_CONST &&
11703 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
11704 		do {
11705 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
11706 				function_name = Z_REFVAL_P(function_name);
11707 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
11708 					break;
11709 				}
11710 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
11711 				ZVAL_UNDEFINED_OP2();
11712 				if (UNEXPECTED(EG(exception) != NULL)) {
11713 
11714 					HANDLE_EXCEPTION();
11715 				}
11716 			}
11717 			zend_throw_error(NULL, "Method name must be a string");
11718 
11719 
11720 			HANDLE_EXCEPTION();
11721 		} while (0);
11722 	}
11723 
11724 	if (IS_CONST == IS_UNUSED) {
11725 		obj = Z_OBJ_P(object);
11726 	} else {
11727 		do {
11728 			if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
11729 				obj = Z_OBJ_P(object);
11730 			} else {
11731 				if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
11732 					zend_reference *ref = Z_REF_P(object);
11733 
11734 					object = &ref->val;
11735 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
11736 						obj = Z_OBJ_P(object);
11737 						if (IS_CONST & IS_VAR) {
11738 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
11739 								efree_size(ref, sizeof(zend_reference));
11740 							} else {
11741 								Z_ADDREF_P(object);
11742 							}
11743 						}
11744 						break;
11745 					}
11746 				}
11747 				if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
11748 					object = ZVAL_UNDEFINED_OP1();
11749 					if (UNEXPECTED(EG(exception) != NULL)) {
11750 						if (IS_CV != IS_CONST) {
11751 
11752 						}
11753 						HANDLE_EXCEPTION();
11754 					}
11755 				}
11756 				if (IS_CV == IS_CONST) {
11757 					function_name = EX_VAR(opline->op2.var);
11758 				}
11759 				zend_invalid_method_call(object, function_name);
11760 
11761 
11762 				HANDLE_EXCEPTION();
11763 			}
11764 		} while (0);
11765 	}
11766 
11767 	called_scope = obj->ce;
11768 
11769 	if (IS_CV == IS_CONST &&
11770 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
11771 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
11772 	} else {
11773 		zend_object *orig_obj = obj;
11774 
11775 		if (IS_CV == IS_CONST) {
11776 			function_name = EX_VAR(opline->op2.var);
11777 		}
11778 
11779 		/* First, locate the function. */
11780 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
11781 		if (UNEXPECTED(fbc == NULL)) {
11782 			if (EXPECTED(!EG(exception))) {
11783 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
11784 			}
11785 
11786 			if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
11787 				zend_objects_store_del(orig_obj);
11788 			}
11789 			HANDLE_EXCEPTION();
11790 		}
11791 		if (IS_CV == IS_CONST &&
11792 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
11793 		    EXPECTED(obj == orig_obj)) {
11794 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
11795 		}
11796 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
11797 			GC_ADDREF(obj); /* For $this pointer */
11798 			if (GC_DELREF(orig_obj) == 0) {
11799 				zend_objects_store_del(orig_obj);
11800 			}
11801 		}
11802 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
11803 			init_func_run_time_cache(&fbc->op_array);
11804 		}
11805 	}
11806 
11807 	if (IS_CV != IS_CONST) {
11808 
11809 	}
11810 
11811 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
11812 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
11813 		if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
11814 			zend_objects_store_del(obj);
11815 			if (UNEXPECTED(EG(exception))) {
11816 				HANDLE_EXCEPTION();
11817 			}
11818 		}
11819 		/* call static method */
11820 		obj = (zend_object*)called_scope;
11821 		call_info = ZEND_CALL_NESTED_FUNCTION;
11822 	} else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) {
11823 		if (IS_CONST == IS_CV) {
11824 			GC_ADDREF(obj); /* For $this pointer */
11825 		}
11826 		/* CV may be changed indirectly (e.g. when it's a reference) */
11827 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
11828 	}
11829 
11830 	call = zend_vm_stack_push_call_frame(call_info,
11831 		fbc, opline->extended_value, obj);
11832 	call->prev_execute_data = EX(call);
11833 	EX(call) = call;
11834 
11835 	ZEND_VM_NEXT_OPCODE();
11836 }
11837 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11838 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11839 {
11840 	USE_OPLINE
11841 	zval *function_name;
11842 	zend_class_entry *ce;
11843 	uint32_t call_info;
11844 	zend_function *fbc;
11845 	zend_execute_data *call;
11846 
11847 	SAVE_OPLINE();
11848 
11849 	if (IS_CONST == IS_CONST) {
11850 		/* no function found. try a static method in class */
11851 		ce = CACHED_PTR(opline->result.num);
11852 		if (UNEXPECTED(ce == NULL)) {
11853 			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);
11854 			if (UNEXPECTED(ce == NULL)) {
11855 
11856 				HANDLE_EXCEPTION();
11857 			}
11858 			if (IS_CV != IS_CONST) {
11859 				CACHE_PTR(opline->result.num, ce);
11860 			}
11861 		}
11862 	} else if (IS_CONST == IS_UNUSED) {
11863 		ce = zend_fetch_class(NULL, opline->op1.num);
11864 		if (UNEXPECTED(ce == NULL)) {
11865 
11866 			HANDLE_EXCEPTION();
11867 		}
11868 	} else {
11869 		ce = Z_CE_P(EX_VAR(opline->op1.var));
11870 	}
11871 
11872 	if (IS_CONST == IS_CONST &&
11873 	    IS_CV == IS_CONST &&
11874 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
11875 		/* nothing to do */
11876 	} else if (IS_CONST != IS_CONST &&
11877 	           IS_CV == IS_CONST &&
11878 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
11879 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
11880 	} else if (IS_CV != IS_UNUSED) {
11881 		function_name = EX_VAR(opline->op2.var);
11882 		if (IS_CV != IS_CONST) {
11883 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
11884 				do {
11885 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
11886 						function_name = Z_REFVAL_P(function_name);
11887 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
11888 							break;
11889 						}
11890 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
11891 						ZVAL_UNDEFINED_OP2();
11892 						if (UNEXPECTED(EG(exception) != NULL)) {
11893 							HANDLE_EXCEPTION();
11894 						}
11895 					}
11896 					zend_throw_error(NULL, "Method name must be a string");
11897 
11898 					HANDLE_EXCEPTION();
11899 				} while (0);
11900 			}
11901 		}
11902 
11903 		if (ce->get_static_method) {
11904 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
11905 		} else {
11906 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
11907 		}
11908 		if (UNEXPECTED(fbc == NULL)) {
11909 			if (EXPECTED(!EG(exception))) {
11910 				zend_undefined_method(ce, Z_STR_P(function_name));
11911 			}
11912 
11913 			HANDLE_EXCEPTION();
11914 		}
11915 		if (IS_CV == IS_CONST &&
11916 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
11917 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
11918 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
11919 		}
11920 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
11921 			init_func_run_time_cache(&fbc->op_array);
11922 		}
11923 		if (IS_CV != IS_CONST) {
11924 
11925 		}
11926 	} else {
11927 		if (UNEXPECTED(ce->constructor == NULL)) {
11928 			zend_throw_error(NULL, "Cannot call constructor");
11929 			HANDLE_EXCEPTION();
11930 		}
11931 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
11932 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
11933 			HANDLE_EXCEPTION();
11934 		}
11935 		fbc = ce->constructor;
11936 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
11937 			init_func_run_time_cache(&fbc->op_array);
11938 		}
11939 	}
11940 
11941 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
11942 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
11943 			ce = (zend_class_entry*)Z_OBJ(EX(This));
11944 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
11945 		} else {
11946 			zend_non_static_method_call(fbc);
11947 			HANDLE_EXCEPTION();
11948 		}
11949 	} else {
11950 		/* previous opcode is ZEND_FETCH_CLASS */
11951 		if (IS_CONST == IS_UNUSED
11952 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
11953 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
11954 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
11955 				ce = Z_OBJCE(EX(This));
11956 			} else {
11957 				ce = Z_CE(EX(This));
11958 			}
11959 		}
11960 		call_info = ZEND_CALL_NESTED_FUNCTION;
11961 	}
11962 
11963 	call = zend_vm_stack_push_call_frame(call_info,
11964 		fbc, opline->extended_value, ce);
11965 	call->prev_execute_data = EX(call);
11966 	EX(call) = call;
11967 
11968 	ZEND_VM_NEXT_OPCODE();
11969 }
11970 
ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)11971 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11972 {
11973 	USE_OPLINE
11974 	zval *function_name;
11975 	zend_fcall_info_cache fcc;
11976 	char *error = NULL;
11977 	zend_function *func;
11978 	void *object_or_called_scope;
11979 	zend_execute_data *call;
11980 	uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC;
11981 
11982 	SAVE_OPLINE();
11983 	function_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
11984 	if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) {
11985 		ZEND_ASSERT(!error);
11986 		func = fcc.function_handler;
11987 		object_or_called_scope = fcc.called_scope;
11988 		if (func->common.fn_flags & ZEND_ACC_CLOSURE) {
11989 			/* Delay closure destruction until its invocation */
11990 			GC_ADDREF(ZEND_CLOSURE_OBJECT(func));
11991 			call_info |= ZEND_CALL_CLOSURE;
11992 			if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) {
11993 				call_info |= ZEND_CALL_FAKE_CLOSURE;
11994 			}
11995 			if (fcc.object) {
11996 				object_or_called_scope = fcc.object;
11997 				call_info |= ZEND_CALL_HAS_THIS;
11998 			}
11999 		} else if (fcc.object) {
12000 			GC_ADDREF(fcc.object); /* For $this pointer */
12001 			object_or_called_scope = fcc.object;
12002 			call_info |= ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS;
12003 		}
12004 
12005 		if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) {
12006 			if (call_info & ZEND_CALL_CLOSURE) {
12007 				zend_object_release(ZEND_CLOSURE_OBJECT(func));
12008 			} else if (call_info & ZEND_CALL_RELEASE_THIS) {
12009 				zend_object_release(fcc.object);
12010 			}
12011 			HANDLE_EXCEPTION();
12012 		}
12013 
12014 		if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&func->op_array))) {
12015 			init_func_run_time_cache(&func->op_array);
12016 		}
12017 	} else {
12018 		zend_type_error("%s(): Argument #1 ($callback) must be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error);
12019 		efree(error);
12020 
12021 		HANDLE_EXCEPTION();
12022 	}
12023 
12024 	call = zend_vm_stack_push_call_frame(call_info,
12025 		func, opline->extended_value, object_or_called_scope);
12026 	call->prev_execute_data = EX(call);
12027 	EX(call) = call;
12028 
12029 	ZEND_VM_NEXT_OPCODE();
12030 }
12031 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12032 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12033 {
12034 	USE_OPLINE
12035 	zval *expr_ptr, new_expr;
12036 
12037 	SAVE_OPLINE();
12038 	if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) &&
12039 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
12040 		expr_ptr = zend_get_bad_ptr();
12041 		if (Z_ISREF_P(expr_ptr)) {
12042 			Z_ADDREF_P(expr_ptr);
12043 		} else {
12044 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
12045 		}
12046 
12047 	} else {
12048 		expr_ptr = RT_CONSTANT(opline, opline->op1);
12049 		if (IS_CONST == IS_TMP_VAR) {
12050 			/* pass */
12051 		} else if (IS_CONST == IS_CONST) {
12052 			Z_TRY_ADDREF_P(expr_ptr);
12053 		} else if (IS_CONST == IS_CV) {
12054 			ZVAL_DEREF(expr_ptr);
12055 			Z_TRY_ADDREF_P(expr_ptr);
12056 		} else /* if (IS_CONST == IS_VAR) */ {
12057 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
12058 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
12059 
12060 				expr_ptr = Z_REFVAL_P(expr_ptr);
12061 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
12062 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
12063 					expr_ptr = &new_expr;
12064 					efree_size(ref, sizeof(zend_reference));
12065 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
12066 					Z_ADDREF_P(expr_ptr);
12067 				}
12068 			}
12069 		}
12070 	}
12071 
12072 	if (IS_CV != IS_UNUSED) {
12073 		zval *offset = EX_VAR(opline->op2.var);
12074 		zend_string *str;
12075 		zend_ulong hval;
12076 
12077 add_again:
12078 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
12079 			str = Z_STR_P(offset);
12080 			if (IS_CV != IS_CONST) {
12081 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
12082 					goto num_index;
12083 				}
12084 			}
12085 str_index:
12086 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
12087 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
12088 			hval = Z_LVAL_P(offset);
12089 num_index:
12090 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
12091 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
12092 			offset = Z_REFVAL_P(offset);
12093 			goto add_again;
12094 		} else if (Z_TYPE_P(offset) == IS_NULL) {
12095 			str = ZSTR_EMPTY_ALLOC();
12096 			goto str_index;
12097 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
12098 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
12099 			goto num_index;
12100 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
12101 			hval = 0;
12102 			goto num_index;
12103 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
12104 			hval = 1;
12105 			goto num_index;
12106 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
12107 			zend_use_resource_as_offset(offset);
12108 			hval = Z_RES_HANDLE_P(offset);
12109 			goto num_index;
12110 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
12111 			ZVAL_UNDEFINED_OP2();
12112 			str = ZSTR_EMPTY_ALLOC();
12113 			goto str_index;
12114 		} else {
12115 			zend_illegal_array_offset_access(offset);
12116 			zval_ptr_dtor_nogc(expr_ptr);
12117 		}
12118 
12119 	} else {
12120 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
12121 			zend_cannot_add_element();
12122 			zval_ptr_dtor_nogc(expr_ptr);
12123 		}
12124 	}
12125 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12126 }
12127 
ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12128 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12129 {
12130 	zval *array;
12131 	uint32_t size;
12132 	USE_OPLINE
12133 
12134 	array = EX_VAR(opline->result.var);
12135 	if (IS_CONST != IS_UNUSED) {
12136 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
12137 		ZVAL_ARR(array, zend_new_array(size));
12138 		/* Explicitly initialize array as not-packed if flag is set */
12139 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
12140 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
12141 		}
12142 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
12143 	} else {
12144 		ZVAL_ARR(array, zend_new_array(0));
12145 		ZEND_VM_NEXT_OPCODE();
12146 	}
12147 }
12148 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12149 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12150 {
12151 	USE_OPLINE
12152 	zval *container;
12153 	bool result;
12154 	zend_ulong hval;
12155 	zval *offset;
12156 
12157 	SAVE_OPLINE();
12158 	container = RT_CONSTANT(opline, opline->op1);
12159 	offset = EX_VAR(opline->op2.var);
12160 
12161 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
12162 		HashTable *ht;
12163 		zval *value;
12164 		zend_string *str;
12165 
12166 isset_dim_obj_array:
12167 		ht = Z_ARRVAL_P(container);
12168 isset_again:
12169 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
12170 			str = Z_STR_P(offset);
12171 			if (IS_CV != IS_CONST) {
12172 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
12173 					goto num_index_prop;
12174 				}
12175 			}
12176 			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
12177 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
12178 			hval = Z_LVAL_P(offset);
12179 num_index_prop:
12180 			value = zend_hash_index_find(ht, hval);
12181 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
12182 			offset = Z_REFVAL_P(offset);
12183 			goto isset_again;
12184 		} else {
12185 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
12186 			if (UNEXPECTED(EG(exception))) {
12187 				result = 0;
12188 				goto isset_dim_obj_exit;
12189 			}
12190 		}
12191 
12192 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
12193 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
12194 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
12195 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
12196 
12197 			if (IS_CONST & (IS_CONST|IS_CV)) {
12198 				/* avoid exception check */
12199 
12200 				ZEND_VM_SMART_BRANCH(result, 0);
12201 			}
12202 		} else {
12203 			result = (value == NULL || !i_zend_is_true(value));
12204 		}
12205 		goto isset_dim_obj_exit;
12206 	} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
12207 		container = Z_REFVAL_P(container);
12208 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
12209 			goto isset_dim_obj_array;
12210 		}
12211 	}
12212 
12213 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
12214 		offset++;
12215 	}
12216 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
12217 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
12218 	} else {
12219 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
12220 	}
12221 
12222 isset_dim_obj_exit:
12223 
12224 
12225 	ZEND_VM_SMART_BRANCH(result, 1);
12226 }
12227 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12228 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12229 {
12230 	USE_OPLINE
12231 	zval *container;
12232 	int result;
12233 	zval *offset;
12234 	zend_string *name, *tmp_name;
12235 
12236 	SAVE_OPLINE();
12237 	container = RT_CONSTANT(opline, opline->op1);
12238 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
12239 
12240 	if (IS_CONST == IS_CONST ||
12241 	    (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
12242 		if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
12243 			container = Z_REFVAL_P(container);
12244 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
12245 				result = (opline->extended_value & ZEND_ISEMPTY);
12246 				goto isset_object_finish;
12247 			}
12248 		} else {
12249 			result = (opline->extended_value & ZEND_ISEMPTY);
12250 			goto isset_object_finish;
12251 		}
12252 	}
12253 
12254 	if (IS_CV == IS_CONST) {
12255 		name = Z_STR_P(offset);
12256 	} else {
12257 		name = zval_try_get_tmp_string(offset, &tmp_name);
12258 		if (UNEXPECTED(!name)) {
12259 			result = 0;
12260 			goto isset_object_finish;
12261 		}
12262 	}
12263 
12264 	result =
12265 		(opline->extended_value & ZEND_ISEMPTY) ^
12266 		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));
12267 
12268 	if (IS_CV != IS_CONST) {
12269 		zend_tmp_string_release(tmp_name);
12270 	}
12271 
12272 isset_object_finish:
12273 
12274 
12275 	ZEND_VM_SMART_BRANCH(result, 1);
12276 }
12277 
ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12278 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12279 {
12280 	USE_OPLINE
12281 
12282 	zval *key, *subject;
12283 	HashTable *ht;
12284 	bool result;
12285 
12286 	SAVE_OPLINE();
12287 
12288 	key = RT_CONSTANT(opline, opline->op1);
12289 	subject = EX_VAR(opline->op2.var);
12290 
12291 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
12292 array_key_exists_array:
12293 		ht = Z_ARRVAL_P(subject);
12294 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
12295 	} else {
12296 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
12297 			subject = Z_REFVAL_P(subject);
12298 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
12299 				goto array_key_exists_array;
12300 			}
12301 		}
12302 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
12303 		result = 0;
12304 	}
12305 
12306 
12307 	ZEND_VM_SMART_BRANCH(result, 1);
12308 }
12309 
12310 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12311 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12312 {
12313 	USE_OPLINE
12314 
12315 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
12316 
12317 	SAVE_OPLINE();
12318 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
12319 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
12320 	}
12321 
12322 	/* Destroy the previously yielded value */
12323 	zval_ptr_dtor(&generator->value);
12324 
12325 	/* Destroy the previously yielded key */
12326 	zval_ptr_dtor(&generator->key);
12327 
12328 	/* Set the new yielded value */
12329 	if (IS_CONST != IS_UNUSED) {
12330 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
12331 			/* Constants and temporary variables aren't yieldable by reference,
12332 			 * but we still allow them with a notice. */
12333 			if (IS_CONST & (IS_CONST|IS_TMP_VAR)) {
12334 				zval *value;
12335 
12336 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
12337 
12338 				value = RT_CONSTANT(opline, opline->op1);
12339 				ZVAL_COPY_VALUE(&generator->value, value);
12340 				if (IS_CONST == IS_CONST) {
12341 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
12342 						Z_ADDREF(generator->value);
12343 					}
12344 				}
12345 			} else {
12346 				zval *value_ptr = zend_get_bad_ptr();
12347 
12348 				/* If a function call result is yielded and the function did
12349 				 * not return by reference we throw a notice. */
12350 				do {
12351 					if (IS_CONST == IS_VAR) {
12352 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
12353 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
12354 						 && !Z_ISREF_P(value_ptr)) {
12355 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
12356 							ZVAL_COPY(&generator->value, value_ptr);
12357 							break;
12358 						}
12359 					}
12360 					if (Z_ISREF_P(value_ptr)) {
12361 						Z_ADDREF_P(value_ptr);
12362 					} else {
12363 						ZVAL_MAKE_REF_EX(value_ptr, 2);
12364 					}
12365 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
12366 				} while (0);
12367 
12368 			}
12369 		} else {
12370 			zval *value = RT_CONSTANT(opline, opline->op1);
12371 
12372 			/* Consts, temporary variables and references need copying */
12373 			if (IS_CONST == IS_CONST) {
12374 				ZVAL_COPY_VALUE(&generator->value, value);
12375 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
12376 					Z_ADDREF(generator->value);
12377 				}
12378 			} else if (IS_CONST == IS_TMP_VAR) {
12379 				ZVAL_COPY_VALUE(&generator->value, value);
12380 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
12381 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
12382 
12383 			} else {
12384 				ZVAL_COPY_VALUE(&generator->value, value);
12385 				if (IS_CONST == IS_CV) {
12386 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
12387 				}
12388 			}
12389 		}
12390 	} else {
12391 		/* If no value was specified yield null */
12392 		ZVAL_NULL(&generator->value);
12393 	}
12394 
12395 	/* Set the new yielded key */
12396 	if (IS_CV != IS_UNUSED) {
12397 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
12398 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
12399 			key = Z_REFVAL_P(key);
12400 		}
12401 		ZVAL_COPY(&generator->key, key);
12402 
12403 		if (Z_TYPE(generator->key) == IS_LONG
12404 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
12405 		) {
12406 			generator->largest_used_integer_key = Z_LVAL(generator->key);
12407 		}
12408 	} else {
12409 		/* If no key was specified we use auto-increment keys */
12410 		generator->largest_used_integer_key++;
12411 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
12412 	}
12413 
12414 	if (RETURN_VALUE_USED(opline)) {
12415 		/* If the return value of yield is used set the send
12416 		 * target and initialize it to NULL */
12417 		generator->send_target = EX_VAR(opline->result.var);
12418 		ZVAL_NULL(generator->send_target);
12419 	} else {
12420 		generator->send_target = NULL;
12421 	}
12422 
12423 	/* We increment to the next op, so we are at the correct position when the
12424 	 * generator is resumed. */
12425 	ZEND_VM_INC_OPCODE();
12426 
12427 	/* The GOTO VM uses a local opline variable. We need to set the opline
12428 	 * variable in execute_data so we don't resume at an old position. */
12429 	SAVE_OPLINE();
12430 
12431 	ZEND_VM_RETURN();
12432 }
12433 
ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12434 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12435 {
12436 	USE_OPLINE
12437 	zval *op1;
12438 
12439 	op1 = EX_VAR(opline->op1.var);
12440 	if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12441 		ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1));
12442 		ZEND_VM_NEXT_OPCODE();
12443 	}
12444 
12445 	ZEND_VM_TAIL_CALL(zend_bw_not_helper_SPEC(op1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12446 }
12447 
ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12448 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12449 {
12450 	USE_OPLINE
12451 	zval *value;
12452 
12453 	value = EX_VAR(opline->op1.var);
12454 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(value));
12455 	ZEND_VM_NEXT_OPCODE();
12456 }
12457 
ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12458 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12459 {
12460 	USE_OPLINE
12461 	zval *value;
12462 
12463 	value = EX_VAR(opline->op1.var);
12464 	ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value));
12465 	ZEND_VM_NEXT_OPCODE();
12466 }
12467 
ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12468 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12469 {
12470 	USE_OPLINE
12471 	zval *value;
12472 
12473 	value = EX_VAR(opline->op1.var);
12474 	ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
12475 	ZEND_VM_NEXT_OPCODE();
12476 }
12477 
ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12478 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12479 {
12480 	USE_OPLINE
12481 	zval *op1, *op2, *result;
12482 	double d1, d2;
12483 
12484 	op1 = EX_VAR(opline->op1.var);
12485 	op2 = RT_CONSTANT(opline, opline->op2);
12486 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12487 		/* pass */
12488 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12489 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12490 			result = EX_VAR(opline->result.var);
12491 			fast_long_add_function(result, op1, op2);
12492 			ZEND_VM_NEXT_OPCODE();
12493 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12494 			d1 = (double)Z_LVAL_P(op1);
12495 			d2 = Z_DVAL_P(op2);
12496 			goto add_double;
12497 		}
12498 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12499 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12500 			d1 = Z_DVAL_P(op1);
12501 			d2 = Z_DVAL_P(op2);
12502 add_double:
12503 			result = EX_VAR(opline->result.var);
12504 			ZVAL_DOUBLE(result, d1 + d2);
12505 			ZEND_VM_NEXT_OPCODE();
12506 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12507 			d1 = Z_DVAL_P(op1);
12508 			d2 = (double)Z_LVAL_P(op2);
12509 			goto add_double;
12510 		}
12511 	}
12512 
12513 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12514 }
12515 
ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12516 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12517 {
12518 	USE_OPLINE
12519 	zval *op1, *op2, *result;
12520 	double d1, d2;
12521 
12522 	op1 = EX_VAR(opline->op1.var);
12523 	op2 = RT_CONSTANT(opline, opline->op2);
12524 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12525 		/* pass */
12526 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12527 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12528 			result = EX_VAR(opline->result.var);
12529 			fast_long_sub_function(result, op1, op2);
12530 			ZEND_VM_NEXT_OPCODE();
12531 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12532 			d1 = (double)Z_LVAL_P(op1);
12533 			d2 = Z_DVAL_P(op2);
12534 			goto sub_double;
12535 		}
12536 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12537 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12538 			d1 = Z_DVAL_P(op1);
12539 			d2 = Z_DVAL_P(op2);
12540 sub_double:
12541 			result = EX_VAR(opline->result.var);
12542 			ZVAL_DOUBLE(result, d1 - d2);
12543 			ZEND_VM_NEXT_OPCODE();
12544 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12545 			d1 = Z_DVAL_P(op1);
12546 			d2 = (double)Z_LVAL_P(op2);
12547 			goto sub_double;
12548 		}
12549 	}
12550 
12551 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12552 }
12553 
ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12554 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12555 {
12556 	USE_OPLINE
12557 	zval *op1, *op2, *result;
12558 	double d1, d2;
12559 
12560 	op1 = EX_VAR(opline->op1.var);
12561 	op2 = RT_CONSTANT(opline, opline->op2);
12562 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12563 		/* pass */
12564 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12565 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12566 			zend_long overflow;
12567 
12568 			result = EX_VAR(opline->result.var);
12569 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
12570 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
12571 			ZEND_VM_NEXT_OPCODE();
12572 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12573 			d1 = (double)Z_LVAL_P(op1);
12574 			d2 = Z_DVAL_P(op2);
12575 			goto mul_double;
12576 		}
12577 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12578 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12579 			d1 = Z_DVAL_P(op1);
12580 			d2 = Z_DVAL_P(op2);
12581 mul_double:
12582 			result = EX_VAR(opline->result.var);
12583 			ZVAL_DOUBLE(result, d1 * d2);
12584 			ZEND_VM_NEXT_OPCODE();
12585 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12586 			d1 = Z_DVAL_P(op1);
12587 			d2 = (double)Z_LVAL_P(op2);
12588 			goto mul_double;
12589 		}
12590 	}
12591 
12592 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12593 }
12594 
ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12595 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12596 {
12597 	USE_OPLINE
12598 	zval *op1, *op2, *result;
12599 
12600 	op1 = EX_VAR(opline->op1.var);
12601 	op2 = RT_CONSTANT(opline, opline->op2);
12602 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12603 		/* pass */
12604 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12605 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12606 			result = EX_VAR(opline->result.var);
12607 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
12608 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
12609 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
12610 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
12611 				ZVAL_LONG(result, 0);
12612 			} else {
12613 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
12614 			}
12615 			ZEND_VM_NEXT_OPCODE();
12616 		}
12617 	}
12618 
12619 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12620 }
12621 
ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12622 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12623 {
12624 	USE_OPLINE
12625 	zval *op1, *op2;
12626 
12627 	op1 = EX_VAR(opline->op1.var);
12628 	op2 = RT_CONSTANT(opline, opline->op2);
12629 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12630 		/* pass */
12631 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12632 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
12633 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
12634 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
12635 		ZVAL_LONG(EX_VAR(opline->result.var),
12636 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
12637 		ZEND_VM_NEXT_OPCODE();
12638 	}
12639 
12640 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12641 }
12642 
ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12643 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12644 {
12645 	USE_OPLINE
12646 	zval *op1, *op2;
12647 
12648 	op1 = EX_VAR(opline->op1.var);
12649 	op2 = RT_CONSTANT(opline, opline->op2);
12650 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12651 		/* pass */
12652 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12653 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
12654 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
12655 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
12656 		ZEND_VM_NEXT_OPCODE();
12657 	}
12658 
12659 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12660 }
12661 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12662 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12663 {
12664 	USE_OPLINE
12665 	zval *op1, *op2;
12666 	double d1, d2;
12667 
12668 	op1 = EX_VAR(opline->op1.var);
12669 	op2 = RT_CONSTANT(opline, opline->op2);
12670 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12671 		/* pass */
12672 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12673 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12674 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
12675 is_smaller_true:
12676 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
12677 			} else {
12678 is_smaller_false:
12679 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
12680 			}
12681 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12682 			d1 = (double)Z_LVAL_P(op1);
12683 			d2 = Z_DVAL_P(op2);
12684 			goto is_smaller_double;
12685 		}
12686 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12687 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12688 			d1 = Z_DVAL_P(op1);
12689 			d2 = Z_DVAL_P(op2);
12690 is_smaller_double:
12691 			if (d1 < d2) {
12692 				goto is_smaller_true;
12693 			} else {
12694 				goto is_smaller_false;
12695 			}
12696 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12697 			d1 = Z_DVAL_P(op1);
12698 			d2 = (double)Z_LVAL_P(op2);
12699 			goto is_smaller_double;
12700 		}
12701 	}
12702 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12703 }
12704 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12705 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12706 {
12707 	USE_OPLINE
12708 	zval *op1, *op2;
12709 	double d1, d2;
12710 
12711 	op1 = EX_VAR(opline->op1.var);
12712 	op2 = RT_CONSTANT(opline, opline->op2);
12713 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12714 		/* pass */
12715 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12716 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12717 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
12718 is_smaller_true:
12719 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
12720 			} else {
12721 is_smaller_false:
12722 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
12723 			}
12724 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12725 			d1 = (double)Z_LVAL_P(op1);
12726 			d2 = Z_DVAL_P(op2);
12727 			goto is_smaller_double;
12728 		}
12729 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12730 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12731 			d1 = Z_DVAL_P(op1);
12732 			d2 = Z_DVAL_P(op2);
12733 is_smaller_double:
12734 			if (d1 < d2) {
12735 				goto is_smaller_true;
12736 			} else {
12737 				goto is_smaller_false;
12738 			}
12739 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12740 			d1 = Z_DVAL_P(op1);
12741 			d2 = (double)Z_LVAL_P(op2);
12742 			goto is_smaller_double;
12743 		}
12744 	}
12745 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12746 }
12747 
ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12748 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12749 {
12750 	USE_OPLINE
12751 	zval *op1, *op2;
12752 	double d1, d2;
12753 
12754 	op1 = EX_VAR(opline->op1.var);
12755 	op2 = RT_CONSTANT(opline, opline->op2);
12756 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12757 		/* pass */
12758 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12759 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12760 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
12761 is_smaller_true:
12762 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
12763 			} else {
12764 is_smaller_false:
12765 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
12766 			}
12767 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12768 			d1 = (double)Z_LVAL_P(op1);
12769 			d2 = Z_DVAL_P(op2);
12770 			goto is_smaller_double;
12771 		}
12772 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12773 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12774 			d1 = Z_DVAL_P(op1);
12775 			d2 = Z_DVAL_P(op2);
12776 is_smaller_double:
12777 			if (d1 < d2) {
12778 				goto is_smaller_true;
12779 			} else {
12780 				goto is_smaller_false;
12781 			}
12782 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12783 			d1 = Z_DVAL_P(op1);
12784 			d2 = (double)Z_LVAL_P(op2);
12785 			goto is_smaller_double;
12786 		}
12787 	}
12788 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12789 }
12790 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12791 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12792 {
12793 	USE_OPLINE
12794 	zval *op1, *op2;
12795 	double d1, d2;
12796 
12797 	op1 = EX_VAR(opline->op1.var);
12798 	op2 = RT_CONSTANT(opline, opline->op2);
12799 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12800 		/* pass */
12801 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12802 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12803 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
12804 is_smaller_or_equal_true:
12805 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
12806 				ZVAL_TRUE(EX_VAR(opline->result.var));
12807 				ZEND_VM_NEXT_OPCODE();
12808 			} else {
12809 is_smaller_or_equal_false:
12810 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
12811 				ZVAL_FALSE(EX_VAR(opline->result.var));
12812 				ZEND_VM_NEXT_OPCODE();
12813 			}
12814 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12815 			d1 = (double)Z_LVAL_P(op1);
12816 			d2 = Z_DVAL_P(op2);
12817 			goto is_smaller_or_equal_double;
12818 		}
12819 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12820 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12821 			d1 = Z_DVAL_P(op1);
12822 			d2 = Z_DVAL_P(op2);
12823 is_smaller_or_equal_double:
12824 			if (d1 <= d2) {
12825 				goto is_smaller_or_equal_true;
12826 			} else {
12827 				goto is_smaller_or_equal_false;
12828 			}
12829 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12830 			d1 = Z_DVAL_P(op1);
12831 			d2 = (double)Z_LVAL_P(op2);
12832 			goto is_smaller_or_equal_double;
12833 		}
12834 	}
12835 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12836 }
12837 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12838 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12839 {
12840 	USE_OPLINE
12841 	zval *op1, *op2;
12842 	double d1, d2;
12843 
12844 	op1 = EX_VAR(opline->op1.var);
12845 	op2 = RT_CONSTANT(opline, opline->op2);
12846 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12847 		/* pass */
12848 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12849 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12850 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
12851 is_smaller_or_equal_true:
12852 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
12853 				ZVAL_TRUE(EX_VAR(opline->result.var));
12854 				ZEND_VM_NEXT_OPCODE();
12855 			} else {
12856 is_smaller_or_equal_false:
12857 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
12858 				ZVAL_FALSE(EX_VAR(opline->result.var));
12859 				ZEND_VM_NEXT_OPCODE();
12860 			}
12861 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12862 			d1 = (double)Z_LVAL_P(op1);
12863 			d2 = Z_DVAL_P(op2);
12864 			goto is_smaller_or_equal_double;
12865 		}
12866 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12867 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12868 			d1 = Z_DVAL_P(op1);
12869 			d2 = Z_DVAL_P(op2);
12870 is_smaller_or_equal_double:
12871 			if (d1 <= d2) {
12872 				goto is_smaller_or_equal_true;
12873 			} else {
12874 				goto is_smaller_or_equal_false;
12875 			}
12876 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12877 			d1 = Z_DVAL_P(op1);
12878 			d2 = (double)Z_LVAL_P(op2);
12879 			goto is_smaller_or_equal_double;
12880 		}
12881 	}
12882 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12883 }
12884 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12885 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12886 {
12887 	USE_OPLINE
12888 	zval *op1, *op2;
12889 	double d1, d2;
12890 
12891 	op1 = EX_VAR(opline->op1.var);
12892 	op2 = RT_CONSTANT(opline, opline->op2);
12893 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12894 		/* pass */
12895 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
12896 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12897 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
12898 is_smaller_or_equal_true:
12899 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
12900 				ZVAL_TRUE(EX_VAR(opline->result.var));
12901 				ZEND_VM_NEXT_OPCODE();
12902 			} else {
12903 is_smaller_or_equal_false:
12904 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
12905 				ZVAL_FALSE(EX_VAR(opline->result.var));
12906 				ZEND_VM_NEXT_OPCODE();
12907 			}
12908 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12909 			d1 = (double)Z_LVAL_P(op1);
12910 			d2 = Z_DVAL_P(op2);
12911 			goto is_smaller_or_equal_double;
12912 		}
12913 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
12914 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
12915 			d1 = Z_DVAL_P(op1);
12916 			d2 = Z_DVAL_P(op2);
12917 is_smaller_or_equal_double:
12918 			if (d1 <= d2) {
12919 				goto is_smaller_or_equal_true;
12920 			} else {
12921 				goto is_smaller_or_equal_false;
12922 			}
12923 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12924 			d1 = Z_DVAL_P(op1);
12925 			d2 = (double)Z_LVAL_P(op2);
12926 			goto is_smaller_or_equal_double;
12927 		}
12928 	}
12929 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12930 }
12931 
ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12932 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12933 {
12934 	USE_OPLINE
12935 	zval *op1, *op2;
12936 
12937 	op1 = EX_VAR(opline->op1.var);
12938 	op2 = RT_CONSTANT(opline, opline->op2);
12939 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12940 		/* pass */
12941 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12942 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12943 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
12944 		ZEND_VM_NEXT_OPCODE();
12945 	}
12946 
12947 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12948 }
12949 
ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12950 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12951 {
12952 	USE_OPLINE
12953 	zval *op1, *op2;
12954 
12955 	op1 = EX_VAR(opline->op1.var);
12956 	op2 = RT_CONSTANT(opline, opline->op2);
12957 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12958 		/* pass */
12959 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12960 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12961 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
12962 		ZEND_VM_NEXT_OPCODE();
12963 	}
12964 
12965 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12966 }
12967 
ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12968 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12969 {
12970 	USE_OPLINE
12971 	zval *op1, *op2;
12972 
12973 	op1 = EX_VAR(opline->op1.var);
12974 	op2 = RT_CONSTANT(opline, opline->op2);
12975 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && IS_CONST == IS_CONST) {
12976 		/* pass */
12977 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
12978 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
12979 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
12980 		ZEND_VM_NEXT_OPCODE();
12981 	}
12982 
12983 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
12984 }
12985 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12986 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12987 {
12988 	USE_OPLINE
12989 	zval *container;
12990 
12991 	SAVE_OPLINE();
12992 	container = EX_VAR(opline->op1.var);
12993 	zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
12994 
12995 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
12996 }
12997 
ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)12998 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12999 {
13000 	USE_OPLINE
13001 	zval *op, *jump_zv;
13002 	HashTable *jumptable;
13003 
13004 	op = EX_VAR(opline->op1.var);
13005 
13006 	if (Z_TYPE_P(op) != IS_LONG) {
13007 		ZVAL_DEREF(op);
13008 		if (Z_TYPE_P(op) != IS_LONG) {
13009 			/* Wrong type, fall back to ZEND_CASE chain */
13010 			ZEND_VM_NEXT_OPCODE();
13011 		}
13012 	}
13013 
13014 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
13015 	jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
13016 	if (jump_zv != NULL) {
13017 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
13018 		ZEND_VM_CONTINUE();
13019 	} else {
13020 		/* default */
13021 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
13022 		ZEND_VM_CONTINUE();
13023 	}
13024 }
13025 
ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13026 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13027 {
13028 	USE_OPLINE
13029 	zval *op, *jump_zv;
13030 	HashTable *jumptable;
13031 
13032 	op = EX_VAR(opline->op1.var);
13033 
13034 	if (Z_TYPE_P(op) != IS_STRING) {
13035 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13036 			/* Wrong type, fall back to ZEND_CASE chain */
13037 			ZEND_VM_NEXT_OPCODE();
13038 		} else {
13039 			ZVAL_DEREF(op);
13040 			if (Z_TYPE_P(op) != IS_STRING) {
13041 				/* Wrong type, fall back to ZEND_CASE chain */
13042 				ZEND_VM_NEXT_OPCODE();
13043 			}
13044 		}
13045 	}
13046 
13047 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
13048 	jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
13049 	if (jump_zv != NULL) {
13050 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
13051 		ZEND_VM_CONTINUE();
13052 	} else {
13053 		/* default */
13054 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
13055 		ZEND_VM_CONTINUE();
13056 	}
13057 }
13058 
ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13059 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13060 {
13061 	USE_OPLINE
13062 	zval *op, *jump_zv;
13063 	HashTable *jumptable;
13064 
13065 	op = EX_VAR(opline->op1.var);
13066 	jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
13067 
13068 match_try_again:
13069 	if (Z_TYPE_P(op) == IS_LONG) {
13070 		jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op));
13071 	} else if (Z_TYPE_P(op) == IS_STRING) {
13072 		jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST);
13073 	} else if (Z_TYPE_P(op) == IS_REFERENCE) {
13074 		op = Z_REFVAL_P(op);
13075 		goto match_try_again;
13076 	} else {
13077 		if (UNEXPECTED(((IS_TMP_VAR|IS_VAR|IS_CV) & IS_CV) && Z_TYPE_P(op) == IS_UNDEF)) {
13078 			SAVE_OPLINE();
13079 			op = ZVAL_UNDEFINED_OP1();
13080 			if (UNEXPECTED(EG(exception))) {
13081 				HANDLE_EXCEPTION();
13082 			}
13083 			goto match_try_again;
13084 		}
13085 
13086 		goto default_branch;
13087 	}
13088 
13089 	if (jump_zv != NULL) {
13090 		ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv));
13091 		ZEND_VM_CONTINUE();
13092 	} else {
13093 default_branch:
13094 		/* default */
13095 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
13096 		ZEND_VM_CONTINUE();
13097 	}
13098 }
13099 
ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13100 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13101 {
13102 	USE_OPLINE
13103 	zval *op1, *op2, *result;
13104 
13105 	op1 = EX_VAR(opline->op1.var);
13106 	op2 = RT_CONSTANT(opline, opline->op2);
13107 	result = EX_VAR(opline->result.var);
13108 	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
13109 	ZEND_VM_NEXT_OPCODE();
13110 }
13111 
ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13112 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13113 {
13114 	USE_OPLINE
13115 	zval *op1, *op2, *result;
13116 
13117 	op1 = EX_VAR(opline->op1.var);
13118 	op2 = RT_CONSTANT(opline, opline->op2);
13119 	result = EX_VAR(opline->result.var);
13120 	fast_long_add_function(result, op1, op2);
13121 	ZEND_VM_NEXT_OPCODE();
13122 }
13123 
ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13124 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13125 {
13126 	USE_OPLINE
13127 	zval *op1, *op2, *result;
13128 
13129 	op1 = EX_VAR(opline->op1.var);
13130 	op2 = RT_CONSTANT(opline, opline->op2);
13131 	result = EX_VAR(opline->result.var);
13132 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
13133 	ZEND_VM_NEXT_OPCODE();
13134 }
13135 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13136 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13137 {
13138 	USE_OPLINE
13139 	zval *op1, *op2, *result;
13140 
13141 	op1 = EX_VAR(opline->op1.var);
13142 	op2 = RT_CONSTANT(opline, opline->op2);
13143 	result = EX_VAR(opline->result.var);
13144 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
13145 	ZEND_VM_NEXT_OPCODE();
13146 }
13147 
ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13148 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13149 {
13150 	USE_OPLINE
13151 	zval *op1, *op2, *result;
13152 
13153 	op1 = EX_VAR(opline->op1.var);
13154 	op2 = RT_CONSTANT(opline, opline->op2);
13155 	result = EX_VAR(opline->result.var);
13156 	fast_long_sub_function(result, op1, op2);
13157 	ZEND_VM_NEXT_OPCODE();
13158 }
13159 
ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13160 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13161 {
13162 	USE_OPLINE
13163 	zval *op1, *op2, *result;
13164 
13165 	op1 = EX_VAR(opline->op1.var);
13166 	op2 = RT_CONSTANT(opline, opline->op2);
13167 	result = EX_VAR(opline->result.var);
13168 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
13169 	ZEND_VM_NEXT_OPCODE();
13170 }
13171 
ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13172 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13173 {
13174 	USE_OPLINE
13175 	zval *op1, *op2, *result;
13176 
13177 	op1 = EX_VAR(opline->op1.var);
13178 	op2 = RT_CONSTANT(opline, opline->op2);
13179 	result = EX_VAR(opline->result.var);
13180 	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
13181 	ZEND_VM_NEXT_OPCODE();
13182 }
13183 
ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13184 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13185 {
13186 	USE_OPLINE
13187 	zval *op1, *op2, *result;
13188 	zend_long overflow;
13189 
13190 	op1 = EX_VAR(opline->op1.var);
13191 	op2 = RT_CONSTANT(opline, opline->op2);
13192 	result = EX_VAR(opline->result.var);
13193 	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
13194 	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
13195 	ZEND_VM_NEXT_OPCODE();
13196 }
13197 
ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13198 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13199 {
13200 	USE_OPLINE
13201 	zval *op1, *op2, *result;
13202 
13203 	op1 = EX_VAR(opline->op1.var);
13204 	op2 = RT_CONSTANT(opline, opline->op2);
13205 	result = EX_VAR(opline->result.var);
13206 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
13207 	ZEND_VM_NEXT_OPCODE();
13208 }
13209 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13210 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13211 {
13212 	USE_OPLINE
13213 	zval *op1, *op2;
13214 	bool result;
13215 
13216 	op1 = EX_VAR(opline->op1.var);
13217 	op2 = RT_CONSTANT(opline, opline->op2);
13218 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
13219 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13220 }
13221 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13222 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13223 {
13224 	USE_OPLINE
13225 	zval *op1, *op2;
13226 	bool result;
13227 
13228 	op1 = EX_VAR(opline->op1.var);
13229 	op2 = RT_CONSTANT(opline, opline->op2);
13230 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
13231 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13232 }
13233 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13234 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13235 {
13236 	USE_OPLINE
13237 	zval *op1, *op2;
13238 	bool result;
13239 
13240 	op1 = EX_VAR(opline->op1.var);
13241 	op2 = RT_CONSTANT(opline, opline->op2);
13242 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
13243 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13244 }
13245 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13246 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13247 {
13248 	USE_OPLINE
13249 	zval *op1, *op2;
13250 	bool result;
13251 
13252 	op1 = EX_VAR(opline->op1.var);
13253 	op2 = RT_CONSTANT(opline, opline->op2);
13254 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13255 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13256 }
13257 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13258 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13259 {
13260 	USE_OPLINE
13261 	zval *op1, *op2;
13262 	bool result;
13263 
13264 	op1 = EX_VAR(opline->op1.var);
13265 	op2 = RT_CONSTANT(opline, opline->op2);
13266 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13267 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13268 }
13269 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13270 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13271 {
13272 	USE_OPLINE
13273 	zval *op1, *op2;
13274 	bool result;
13275 
13276 	op1 = EX_VAR(opline->op1.var);
13277 	op2 = RT_CONSTANT(opline, opline->op2);
13278 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
13279 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13280 }
13281 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13282 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13283 {
13284 	USE_OPLINE
13285 	zval *op1, *op2;
13286 	bool result;
13287 
13288 	op1 = EX_VAR(opline->op1.var);
13289 	op2 = RT_CONSTANT(opline, opline->op2);
13290 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13291 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13292 }
13293 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13294 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13295 {
13296 	USE_OPLINE
13297 	zval *op1, *op2;
13298 	bool result;
13299 
13300 	op1 = EX_VAR(opline->op1.var);
13301 	op2 = RT_CONSTANT(opline, opline->op2);
13302 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13303 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13304 }
13305 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13306 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13307 {
13308 	USE_OPLINE
13309 	zval *op1, *op2;
13310 	bool result;
13311 
13312 	op1 = EX_VAR(opline->op1.var);
13313 	op2 = RT_CONSTANT(opline, opline->op2);
13314 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
13315 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13316 }
13317 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13318 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13319 {
13320 	USE_OPLINE
13321 	zval *op1, *op2;
13322 	bool result;
13323 
13324 	op1 = EX_VAR(opline->op1.var);
13325 	op2 = RT_CONSTANT(opline, opline->op2);
13326 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13327 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13328 }
13329 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13330 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13331 {
13332 	USE_OPLINE
13333 	zval *op1, *op2;
13334 	bool result;
13335 
13336 	op1 = EX_VAR(opline->op1.var);
13337 	op2 = RT_CONSTANT(opline, opline->op2);
13338 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13339 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13340 }
13341 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13342 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13343 {
13344 	USE_OPLINE
13345 	zval *op1, *op2;
13346 	bool result;
13347 
13348 	op1 = EX_VAR(opline->op1.var);
13349 	op2 = RT_CONSTANT(opline, opline->op2);
13350 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
13351 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13352 }
13353 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13354 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13355 {
13356 	USE_OPLINE
13357 	zval *op1, *op2;
13358 	bool result;
13359 
13360 	op1 = EX_VAR(opline->op1.var);
13361 	op2 = RT_CONSTANT(opline, opline->op2);
13362 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13363 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13364 }
13365 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13366 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13367 {
13368 	USE_OPLINE
13369 	zval *op1, *op2;
13370 	bool result;
13371 
13372 	op1 = EX_VAR(opline->op1.var);
13373 	op2 = RT_CONSTANT(opline, opline->op2);
13374 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13375 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13376 }
13377 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13378 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13379 {
13380 	USE_OPLINE
13381 	zval *op1, *op2;
13382 	bool result;
13383 
13384 	op1 = EX_VAR(opline->op1.var);
13385 	op2 = RT_CONSTANT(opline, opline->op2);
13386 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
13387 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13388 }
13389 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13390 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13391 {
13392 	USE_OPLINE
13393 	zval *op1, *op2;
13394 	bool result;
13395 
13396 	op1 = EX_VAR(opline->op1.var);
13397 	op2 = RT_CONSTANT(opline, opline->op2);
13398 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13399 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13400 }
13401 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13402 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13403 {
13404 	USE_OPLINE
13405 	zval *op1, *op2;
13406 	bool result;
13407 
13408 	op1 = EX_VAR(opline->op1.var);
13409 	op2 = RT_CONSTANT(opline, opline->op2);
13410 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13411 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13412 }
13413 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13414 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13415 {
13416 	USE_OPLINE
13417 	zval *op1, *op2;
13418 	bool result;
13419 
13420 	op1 = EX_VAR(opline->op1.var);
13421 	op2 = RT_CONSTANT(opline, opline->op2);
13422 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
13423 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13424 }
13425 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13426 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13427 {
13428 	USE_OPLINE
13429 	zval *op1, *op2;
13430 	bool result;
13431 
13432 	op1 = EX_VAR(opline->op1.var);
13433 	op2 = RT_CONSTANT(opline, opline->op2);
13434 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13435 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13436 }
13437 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13438 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)
13439 {
13440 	USE_OPLINE
13441 	zval *op1, *op2;
13442 	bool result;
13443 
13444 	op1 = EX_VAR(opline->op1.var);
13445 	op2 = RT_CONSTANT(opline, opline->op2);
13446 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13447 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13448 }
13449 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13450 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)
13451 {
13452 	USE_OPLINE
13453 	zval *op1, *op2;
13454 	bool result;
13455 
13456 	op1 = EX_VAR(opline->op1.var);
13457 	op2 = RT_CONSTANT(opline, opline->op2);
13458 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
13459 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13460 }
13461 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13462 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13463 {
13464 	USE_OPLINE
13465 	zval *op1, *op2;
13466 	bool result;
13467 
13468 	op1 = EX_VAR(opline->op1.var);
13469 	op2 = RT_CONSTANT(opline, opline->op2);
13470 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13471 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
13472 }
13473 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13474 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)
13475 {
13476 	USE_OPLINE
13477 	zval *op1, *op2;
13478 	bool result;
13479 
13480 	op1 = EX_VAR(opline->op1.var);
13481 	op2 = RT_CONSTANT(opline, opline->op2);
13482 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13483 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
13484 }
13485 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13486 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)
13487 {
13488 	USE_OPLINE
13489 	zval *op1, *op2;
13490 	bool result;
13491 
13492 	op1 = EX_VAR(opline->op1.var);
13493 	op2 = RT_CONSTANT(opline, opline->op2);
13494 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
13495 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
13496 }
13497 
ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13498 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13499 {
13500 	USE_OPLINE
13501 	zval *op1, *op2, *result;
13502 	double d1, d2;
13503 
13504 	op1 = EX_VAR(opline->op1.var);
13505 	op2 = EX_VAR(opline->op2.var);
13506 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13507 		/* pass */
13508 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13509 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13510 			result = EX_VAR(opline->result.var);
13511 			fast_long_add_function(result, op1, op2);
13512 			ZEND_VM_NEXT_OPCODE();
13513 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13514 			d1 = (double)Z_LVAL_P(op1);
13515 			d2 = Z_DVAL_P(op2);
13516 			goto add_double;
13517 		}
13518 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13519 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13520 			d1 = Z_DVAL_P(op1);
13521 			d2 = Z_DVAL_P(op2);
13522 add_double:
13523 			result = EX_VAR(opline->result.var);
13524 			ZVAL_DOUBLE(result, d1 + d2);
13525 			ZEND_VM_NEXT_OPCODE();
13526 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13527 			d1 = Z_DVAL_P(op1);
13528 			d2 = (double)Z_LVAL_P(op2);
13529 			goto add_double;
13530 		}
13531 	}
13532 
13533 	ZEND_VM_TAIL_CALL(zend_add_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13534 }
13535 
ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13536 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13537 {
13538 	USE_OPLINE
13539 	zval *op1, *op2, *result;
13540 	double d1, d2;
13541 
13542 	op1 = EX_VAR(opline->op1.var);
13543 	op2 = EX_VAR(opline->op2.var);
13544 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13545 		/* pass */
13546 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13547 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13548 			result = EX_VAR(opline->result.var);
13549 			fast_long_sub_function(result, op1, op2);
13550 			ZEND_VM_NEXT_OPCODE();
13551 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13552 			d1 = (double)Z_LVAL_P(op1);
13553 			d2 = Z_DVAL_P(op2);
13554 			goto sub_double;
13555 		}
13556 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13557 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13558 			d1 = Z_DVAL_P(op1);
13559 			d2 = Z_DVAL_P(op2);
13560 sub_double:
13561 			result = EX_VAR(opline->result.var);
13562 			ZVAL_DOUBLE(result, d1 - d2);
13563 			ZEND_VM_NEXT_OPCODE();
13564 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13565 			d1 = Z_DVAL_P(op1);
13566 			d2 = (double)Z_LVAL_P(op2);
13567 			goto sub_double;
13568 		}
13569 	}
13570 
13571 	ZEND_VM_TAIL_CALL(zend_sub_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13572 }
13573 
ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13574 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13575 {
13576 	USE_OPLINE
13577 	zval *op1, *op2, *result;
13578 	double d1, d2;
13579 
13580 	op1 = EX_VAR(opline->op1.var);
13581 	op2 = EX_VAR(opline->op2.var);
13582 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13583 		/* pass */
13584 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13585 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13586 			zend_long overflow;
13587 
13588 			result = EX_VAR(opline->result.var);
13589 			ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
13590 			Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
13591 			ZEND_VM_NEXT_OPCODE();
13592 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13593 			d1 = (double)Z_LVAL_P(op1);
13594 			d2 = Z_DVAL_P(op2);
13595 			goto mul_double;
13596 		}
13597 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13598 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13599 			d1 = Z_DVAL_P(op1);
13600 			d2 = Z_DVAL_P(op2);
13601 mul_double:
13602 			result = EX_VAR(opline->result.var);
13603 			ZVAL_DOUBLE(result, d1 * d2);
13604 			ZEND_VM_NEXT_OPCODE();
13605 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13606 			d1 = Z_DVAL_P(op1);
13607 			d2 = (double)Z_LVAL_P(op2);
13608 			goto mul_double;
13609 		}
13610 	}
13611 
13612 	ZEND_VM_TAIL_CALL(zend_mul_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13613 }
13614 
ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13615 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13616 {
13617 	USE_OPLINE
13618 	zval *op1, *op2, *result;
13619 
13620 	op1 = EX_VAR(opline->op1.var);
13621 	op2 = EX_VAR(opline->op2.var);
13622 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13623 		/* pass */
13624 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13625 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13626 			result = EX_VAR(opline->result.var);
13627 			if (UNEXPECTED(Z_LVAL_P(op2) == 0)) {
13628 				ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
13629 			} else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) {
13630 				/* Prevent overflow error/crash if op1==ZEND_LONG_MIN */
13631 				ZVAL_LONG(result, 0);
13632 			} else {
13633 				ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2));
13634 			}
13635 			ZEND_VM_NEXT_OPCODE();
13636 		}
13637 	}
13638 
13639 	ZEND_VM_TAIL_CALL(zend_mod_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13640 }
13641 
ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13642 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13643 {
13644 	USE_OPLINE
13645 	zval *op1, *op2;
13646 
13647 	op1 = EX_VAR(opline->op1.var);
13648 	op2 = EX_VAR(opline->op2.var);
13649 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13650 		/* pass */
13651 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13652 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
13653 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
13654 		/* Perform shift on unsigned numbers to get well-defined wrap behavior. */
13655 		ZVAL_LONG(EX_VAR(opline->result.var),
13656 			(zend_long) ((zend_ulong) Z_LVAL_P(op1) << Z_LVAL_P(op2)));
13657 		ZEND_VM_NEXT_OPCODE();
13658 	}
13659 
13660 	ZEND_VM_TAIL_CALL(zend_shift_left_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13661 }
13662 
ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13663 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13664 {
13665 	USE_OPLINE
13666 	zval *op1, *op2;
13667 
13668 	op1 = EX_VAR(opline->op1.var);
13669 	op2 = EX_VAR(opline->op2.var);
13670 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13671 		/* pass */
13672 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13673 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)
13674 			&& EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) {
13675 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2));
13676 		ZEND_VM_NEXT_OPCODE();
13677 	}
13678 
13679 	ZEND_VM_TAIL_CALL(zend_shift_right_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13680 }
13681 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13682 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13683 {
13684 	USE_OPLINE
13685 	zval *op1, *op2;
13686 	double d1, d2;
13687 
13688 	op1 = EX_VAR(opline->op1.var);
13689 	op2 = EX_VAR(opline->op2.var);
13690 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13691 		/* pass */
13692 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13693 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13694 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
13695 is_smaller_true:
13696 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
13697 			} else {
13698 is_smaller_false:
13699 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
13700 			}
13701 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13702 			d1 = (double)Z_LVAL_P(op1);
13703 			d2 = Z_DVAL_P(op2);
13704 			goto is_smaller_double;
13705 		}
13706 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13707 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13708 			d1 = Z_DVAL_P(op1);
13709 			d2 = Z_DVAL_P(op2);
13710 is_smaller_double:
13711 			if (d1 < d2) {
13712 				goto is_smaller_true;
13713 			} else {
13714 				goto is_smaller_false;
13715 			}
13716 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13717 			d1 = Z_DVAL_P(op1);
13718 			d2 = (double)Z_LVAL_P(op2);
13719 			goto is_smaller_double;
13720 		}
13721 	}
13722 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13723 }
13724 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13725 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13726 {
13727 	USE_OPLINE
13728 	zval *op1, *op2;
13729 	double d1, d2;
13730 
13731 	op1 = EX_VAR(opline->op1.var);
13732 	op2 = EX_VAR(opline->op2.var);
13733 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13734 		/* pass */
13735 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13736 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13737 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
13738 is_smaller_true:
13739 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
13740 			} else {
13741 is_smaller_false:
13742 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
13743 			}
13744 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13745 			d1 = (double)Z_LVAL_P(op1);
13746 			d2 = Z_DVAL_P(op2);
13747 			goto is_smaller_double;
13748 		}
13749 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13750 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13751 			d1 = Z_DVAL_P(op1);
13752 			d2 = Z_DVAL_P(op2);
13753 is_smaller_double:
13754 			if (d1 < d2) {
13755 				goto is_smaller_true;
13756 			} else {
13757 				goto is_smaller_false;
13758 			}
13759 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13760 			d1 = Z_DVAL_P(op1);
13761 			d2 = (double)Z_LVAL_P(op2);
13762 			goto is_smaller_double;
13763 		}
13764 	}
13765 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13766 }
13767 
ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13768 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13769 {
13770 	USE_OPLINE
13771 	zval *op1, *op2;
13772 	double d1, d2;
13773 
13774 	op1 = EX_VAR(opline->op1.var);
13775 	op2 = EX_VAR(opline->op2.var);
13776 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13777 		/* pass */
13778 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13779 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13780 			if (EXPECTED(Z_LVAL_P(op1) < Z_LVAL_P(op2))) {
13781 is_smaller_true:
13782 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
13783 			} else {
13784 is_smaller_false:
13785 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
13786 			}
13787 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13788 			d1 = (double)Z_LVAL_P(op1);
13789 			d2 = Z_DVAL_P(op2);
13790 			goto is_smaller_double;
13791 		}
13792 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13793 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13794 			d1 = Z_DVAL_P(op1);
13795 			d2 = Z_DVAL_P(op2);
13796 is_smaller_double:
13797 			if (d1 < d2) {
13798 				goto is_smaller_true;
13799 			} else {
13800 				goto is_smaller_false;
13801 			}
13802 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13803 			d1 = Z_DVAL_P(op1);
13804 			d2 = (double)Z_LVAL_P(op2);
13805 			goto is_smaller_double;
13806 		}
13807 	}
13808 	ZEND_VM_TAIL_CALL(zend_is_smaller_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13809 }
13810 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13811 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13812 {
13813 	USE_OPLINE
13814 	zval *op1, *op2;
13815 	double d1, d2;
13816 
13817 	op1 = EX_VAR(opline->op1.var);
13818 	op2 = EX_VAR(opline->op2.var);
13819 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13820 		/* pass */
13821 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13822 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13823 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
13824 is_smaller_or_equal_true:
13825 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
13826 				ZVAL_TRUE(EX_VAR(opline->result.var));
13827 				ZEND_VM_NEXT_OPCODE();
13828 			} else {
13829 is_smaller_or_equal_false:
13830 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
13831 				ZVAL_FALSE(EX_VAR(opline->result.var));
13832 				ZEND_VM_NEXT_OPCODE();
13833 			}
13834 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13835 			d1 = (double)Z_LVAL_P(op1);
13836 			d2 = Z_DVAL_P(op2);
13837 			goto is_smaller_or_equal_double;
13838 		}
13839 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13840 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13841 			d1 = Z_DVAL_P(op1);
13842 			d2 = Z_DVAL_P(op2);
13843 is_smaller_or_equal_double:
13844 			if (d1 <= d2) {
13845 				goto is_smaller_or_equal_true;
13846 			} else {
13847 				goto is_smaller_or_equal_false;
13848 			}
13849 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13850 			d1 = Z_DVAL_P(op1);
13851 			d2 = (double)Z_LVAL_P(op2);
13852 			goto is_smaller_or_equal_double;
13853 		}
13854 	}
13855 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13856 }
13857 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13858 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13859 {
13860 	USE_OPLINE
13861 	zval *op1, *op2;
13862 	double d1, d2;
13863 
13864 	op1 = EX_VAR(opline->op1.var);
13865 	op2 = EX_VAR(opline->op2.var);
13866 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13867 		/* pass */
13868 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13869 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13870 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
13871 is_smaller_or_equal_true:
13872 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
13873 				ZVAL_TRUE(EX_VAR(opline->result.var));
13874 				ZEND_VM_NEXT_OPCODE();
13875 			} else {
13876 is_smaller_or_equal_false:
13877 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
13878 				ZVAL_FALSE(EX_VAR(opline->result.var));
13879 				ZEND_VM_NEXT_OPCODE();
13880 			}
13881 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13882 			d1 = (double)Z_LVAL_P(op1);
13883 			d2 = Z_DVAL_P(op2);
13884 			goto is_smaller_or_equal_double;
13885 		}
13886 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13887 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13888 			d1 = Z_DVAL_P(op1);
13889 			d2 = Z_DVAL_P(op2);
13890 is_smaller_or_equal_double:
13891 			if (d1 <= d2) {
13892 				goto is_smaller_or_equal_true;
13893 			} else {
13894 				goto is_smaller_or_equal_false;
13895 			}
13896 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13897 			d1 = Z_DVAL_P(op1);
13898 			d2 = (double)Z_LVAL_P(op2);
13899 			goto is_smaller_or_equal_double;
13900 		}
13901 	}
13902 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13903 }
13904 
ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13905 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13906 {
13907 	USE_OPLINE
13908 	zval *op1, *op2;
13909 	double d1, d2;
13910 
13911 	op1 = EX_VAR(opline->op1.var);
13912 	op2 = EX_VAR(opline->op2.var);
13913 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13914 		/* pass */
13915 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
13916 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13917 			if (EXPECTED(Z_LVAL_P(op1) <= Z_LVAL_P(op2))) {
13918 is_smaller_or_equal_true:
13919 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
13920 				ZVAL_TRUE(EX_VAR(opline->result.var));
13921 				ZEND_VM_NEXT_OPCODE();
13922 			} else {
13923 is_smaller_or_equal_false:
13924 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
13925 				ZVAL_FALSE(EX_VAR(opline->result.var));
13926 				ZEND_VM_NEXT_OPCODE();
13927 			}
13928 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13929 			d1 = (double)Z_LVAL_P(op1);
13930 			d2 = Z_DVAL_P(op2);
13931 			goto is_smaller_or_equal_double;
13932 		}
13933 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
13934 		if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
13935 			d1 = Z_DVAL_P(op1);
13936 			d2 = Z_DVAL_P(op2);
13937 is_smaller_or_equal_double:
13938 			if (d1 <= d2) {
13939 				goto is_smaller_or_equal_true;
13940 			} else {
13941 				goto is_smaller_or_equal_false;
13942 			}
13943 		} else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13944 			d1 = Z_DVAL_P(op1);
13945 			d2 = (double)Z_LVAL_P(op2);
13946 			goto is_smaller_or_equal_double;
13947 		}
13948 	}
13949 	ZEND_VM_TAIL_CALL(zend_is_smaller_or_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13950 }
13951 
ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13952 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13953 {
13954 	USE_OPLINE
13955 	zval *op1, *op2;
13956 
13957 	op1 = EX_VAR(opline->op1.var);
13958 	op2 = EX_VAR(opline->op2.var);
13959 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13960 		/* pass */
13961 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13962 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13963 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2));
13964 		ZEND_VM_NEXT_OPCODE();
13965 	}
13966 
13967 	ZEND_VM_TAIL_CALL(zend_bw_or_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13968 }
13969 
ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13970 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13971 {
13972 	USE_OPLINE
13973 	zval *op1, *op2;
13974 
13975 	op1 = EX_VAR(opline->op1.var);
13976 	op2 = EX_VAR(opline->op2.var);
13977 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13978 		/* pass */
13979 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13980 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13981 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2));
13982 		ZEND_VM_NEXT_OPCODE();
13983 	}
13984 
13985 	ZEND_VM_TAIL_CALL(zend_bw_and_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
13986 }
13987 
ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)13988 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13989 {
13990 	USE_OPLINE
13991 	zval *op1, *op2;
13992 
13993 	op1 = EX_VAR(opline->op1.var);
13994 	op2 = EX_VAR(opline->op2.var);
13995 	if (1 && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
13996 		/* pass */
13997 	} else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)
13998 			&& EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
13999 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2));
14000 		ZEND_VM_NEXT_OPCODE();
14001 	}
14002 
14003 	ZEND_VM_TAIL_CALL(zend_bw_xor_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
14004 }
14005 
ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14006 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14007 {
14008 	USE_OPLINE
14009 	zval *op1, *op2, *result;
14010 
14011 	op1 = EX_VAR(opline->op1.var);
14012 	op2 = EX_VAR(opline->op2.var);
14013 	result = EX_VAR(opline->result.var);
14014 	ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
14015 	ZEND_VM_NEXT_OPCODE();
14016 }
14017 
ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14018 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14019 {
14020 	USE_OPLINE
14021 	zval *op1, *op2, *result;
14022 
14023 	op1 = EX_VAR(opline->op1.var);
14024 	op2 = EX_VAR(opline->op2.var);
14025 	result = EX_VAR(opline->result.var);
14026 	fast_long_add_function(result, op1, op2);
14027 	ZEND_VM_NEXT_OPCODE();
14028 }
14029 
ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14030 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14031 {
14032 	USE_OPLINE
14033 	zval *op1, *op2, *result;
14034 
14035 	op1 = EX_VAR(opline->op1.var);
14036 	op2 = EX_VAR(opline->op2.var);
14037 	result = EX_VAR(opline->result.var);
14038 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2));
14039 	ZEND_VM_NEXT_OPCODE();
14040 }
14041 
ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14042 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14043 {
14044 	USE_OPLINE
14045 	zval *op1, *op2, *result;
14046 
14047 	op1 = EX_VAR(opline->op1.var);
14048 	op2 = EX_VAR(opline->op2.var);
14049 	result = EX_VAR(opline->result.var);
14050 	ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
14051 	ZEND_VM_NEXT_OPCODE();
14052 }
14053 
ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14054 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14055 {
14056 	USE_OPLINE
14057 	zval *op1, *op2, *result;
14058 
14059 	op1 = EX_VAR(opline->op1.var);
14060 	op2 = EX_VAR(opline->op2.var);
14061 	result = EX_VAR(opline->result.var);
14062 	fast_long_sub_function(result, op1, op2);
14063 	ZEND_VM_NEXT_OPCODE();
14064 }
14065 
ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14066 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14067 {
14068 	USE_OPLINE
14069 	zval *op1, *op2, *result;
14070 
14071 	op1 = EX_VAR(opline->op1.var);
14072 	op2 = EX_VAR(opline->op2.var);
14073 	result = EX_VAR(opline->result.var);
14074 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2));
14075 	ZEND_VM_NEXT_OPCODE();
14076 }
14077 
ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14078 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14079 {
14080 	USE_OPLINE
14081 	zval *op1, *op2, *result;
14082 
14083 	op1 = EX_VAR(opline->op1.var);
14084 	op2 = EX_VAR(opline->op2.var);
14085 	result = EX_VAR(opline->result.var);
14086 	ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2));
14087 	ZEND_VM_NEXT_OPCODE();
14088 }
14089 
ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14090 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14091 {
14092 	USE_OPLINE
14093 	zval *op1, *op2, *result;
14094 	zend_long overflow;
14095 
14096 	op1 = EX_VAR(opline->op1.var);
14097 	op2 = EX_VAR(opline->op2.var);
14098 	result = EX_VAR(opline->result.var);
14099 	ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow);
14100 	Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG;
14101 	ZEND_VM_NEXT_OPCODE();
14102 }
14103 
ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14104 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14105 {
14106 	USE_OPLINE
14107 	zval *op1, *op2, *result;
14108 
14109 	op1 = EX_VAR(opline->op1.var);
14110 	op2 = EX_VAR(opline->op2.var);
14111 	result = EX_VAR(opline->result.var);
14112 	ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2));
14113 	ZEND_VM_NEXT_OPCODE();
14114 }
14115 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14116 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14117 {
14118 	USE_OPLINE
14119 	zval *op1, *op2;
14120 	bool result;
14121 
14122 	op1 = EX_VAR(opline->op1.var);
14123 	op2 = EX_VAR(opline->op2.var);
14124 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
14125 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14126 }
14127 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14128 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14129 {
14130 	USE_OPLINE
14131 	zval *op1, *op2;
14132 	bool result;
14133 
14134 	op1 = EX_VAR(opline->op1.var);
14135 	op2 = EX_VAR(opline->op2.var);
14136 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
14137 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14138 }
14139 
ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14140 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14141 {
14142 	USE_OPLINE
14143 	zval *op1, *op2;
14144 	bool result;
14145 
14146 	op1 = EX_VAR(opline->op1.var);
14147 	op2 = EX_VAR(opline->op2.var);
14148 	result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
14149 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14150 }
14151 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14152 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14153 {
14154 	USE_OPLINE
14155 	zval *op1, *op2;
14156 	bool result;
14157 
14158 	op1 = EX_VAR(opline->op1.var);
14159 	op2 = EX_VAR(opline->op2.var);
14160 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
14161 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14162 }
14163 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14164 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14165 {
14166 	USE_OPLINE
14167 	zval *op1, *op2;
14168 	bool result;
14169 
14170 	op1 = EX_VAR(opline->op1.var);
14171 	op2 = EX_VAR(opline->op2.var);
14172 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
14173 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14174 }
14175 
ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14176 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14177 {
14178 	USE_OPLINE
14179 	zval *op1, *op2;
14180 	bool result;
14181 
14182 	op1 = EX_VAR(opline->op1.var);
14183 	op2 = EX_VAR(opline->op2.var);
14184 	result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
14185 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14186 }
14187 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14188 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14189 {
14190 	USE_OPLINE
14191 	zval *op1, *op2;
14192 	bool result;
14193 
14194 	op1 = EX_VAR(opline->op1.var);
14195 	op2 = EX_VAR(opline->op2.var);
14196 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
14197 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14198 }
14199 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14200 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14201 {
14202 	USE_OPLINE
14203 	zval *op1, *op2;
14204 	bool result;
14205 
14206 	op1 = EX_VAR(opline->op1.var);
14207 	op2 = EX_VAR(opline->op2.var);
14208 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
14209 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14210 }
14211 
ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14212 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14213 {
14214 	USE_OPLINE
14215 	zval *op1, *op2;
14216 	bool result;
14217 
14218 	op1 = EX_VAR(opline->op1.var);
14219 	op2 = EX_VAR(opline->op2.var);
14220 	result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
14221 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14222 }
14223 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14224 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14225 {
14226 	USE_OPLINE
14227 	zval *op1, *op2;
14228 	bool result;
14229 
14230 	op1 = EX_VAR(opline->op1.var);
14231 	op2 = EX_VAR(opline->op2.var);
14232 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
14233 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14234 }
14235 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14236 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14237 {
14238 	USE_OPLINE
14239 	zval *op1, *op2;
14240 	bool result;
14241 
14242 	op1 = EX_VAR(opline->op1.var);
14243 	op2 = EX_VAR(opline->op2.var);
14244 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
14245 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14246 }
14247 
ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14248 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14249 {
14250 	USE_OPLINE
14251 	zval *op1, *op2;
14252 	bool result;
14253 
14254 	op1 = EX_VAR(opline->op1.var);
14255 	op2 = EX_VAR(opline->op2.var);
14256 	result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
14257 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14258 }
14259 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14260 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14261 {
14262 	USE_OPLINE
14263 	zval *op1, *op2;
14264 	bool result;
14265 
14266 	op1 = EX_VAR(opline->op1.var);
14267 	op2 = EX_VAR(opline->op2.var);
14268 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
14269 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14270 }
14271 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14272 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14273 {
14274 	USE_OPLINE
14275 	zval *op1, *op2;
14276 	bool result;
14277 
14278 	op1 = EX_VAR(opline->op1.var);
14279 	op2 = EX_VAR(opline->op2.var);
14280 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
14281 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14282 }
14283 
ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14284 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14285 {
14286 	USE_OPLINE
14287 	zval *op1, *op2;
14288 	bool result;
14289 
14290 	op1 = EX_VAR(opline->op1.var);
14291 	op2 = EX_VAR(opline->op2.var);
14292 	result = (Z_LVAL_P(op1) < Z_LVAL_P(op2));
14293 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14294 }
14295 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14296 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14297 {
14298 	USE_OPLINE
14299 	zval *op1, *op2;
14300 	bool result;
14301 
14302 	op1 = EX_VAR(opline->op1.var);
14303 	op2 = EX_VAR(opline->op2.var);
14304 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
14305 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14306 }
14307 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14308 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14309 {
14310 	USE_OPLINE
14311 	zval *op1, *op2;
14312 	bool result;
14313 
14314 	op1 = EX_VAR(opline->op1.var);
14315 	op2 = EX_VAR(opline->op2.var);
14316 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
14317 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14318 }
14319 
ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14320 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14321 {
14322 	USE_OPLINE
14323 	zval *op1, *op2;
14324 	bool result;
14325 
14326 	op1 = EX_VAR(opline->op1.var);
14327 	op2 = EX_VAR(opline->op2.var);
14328 	result = (Z_DVAL_P(op1) < Z_DVAL_P(op2));
14329 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14330 }
14331 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14332 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14333 {
14334 	USE_OPLINE
14335 	zval *op1, *op2;
14336 	bool result;
14337 
14338 	op1 = EX_VAR(opline->op1.var);
14339 	op2 = EX_VAR(opline->op2.var);
14340 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
14341 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14342 }
14343 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14344 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)
14345 {
14346 	USE_OPLINE
14347 	zval *op1, *op2;
14348 	bool result;
14349 
14350 	op1 = EX_VAR(opline->op1.var);
14351 	op2 = EX_VAR(opline->op2.var);
14352 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
14353 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14354 }
14355 
ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14356 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)
14357 {
14358 	USE_OPLINE
14359 	zval *op1, *op2;
14360 	bool result;
14361 
14362 	op1 = EX_VAR(opline->op1.var);
14363 	op2 = EX_VAR(opline->op2.var);
14364 	result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2));
14365 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14366 }
14367 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14368 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14369 {
14370 	USE_OPLINE
14371 	zval *op1, *op2;
14372 	bool result;
14373 
14374 	op1 = EX_VAR(opline->op1.var);
14375 	op2 = EX_VAR(opline->op2.var);
14376 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
14377 	ZEND_VM_SMART_BRANCH_NONE(result, 0);
14378 }
14379 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14380 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)
14381 {
14382 	USE_OPLINE
14383 	zval *op1, *op2;
14384 	bool result;
14385 
14386 	op1 = EX_VAR(opline->op1.var);
14387 	op2 = EX_VAR(opline->op2.var);
14388 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
14389 	ZEND_VM_SMART_BRANCH_JMPZ(result, 0);
14390 }
14391 
ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14392 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)
14393 {
14394 	USE_OPLINE
14395 	zval *op1, *op2;
14396 	bool result;
14397 
14398 	op1 = EX_VAR(opline->op1.var);
14399 	op2 = EX_VAR(opline->op2.var);
14400 	result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2));
14401 	ZEND_VM_SMART_BRANCH_JMPNZ(result, 0);
14402 }
14403 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14404 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14405 {
14406 	USE_OPLINE
14407 	zval *container;
14408 
14409 	SAVE_OPLINE();
14410 	container = EX_VAR(opline->op1.var);
14411 	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);
14412 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
14413 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14414 }
14415 
ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14416 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14417 {
14418 	USE_OPLINE
14419 	zval *op;
14420 
14421 	SAVE_OPLINE();
14422 	op = EX_VAR(opline->op1.var);
14423 	zend_match_unhandled_error(op);
14424 	HANDLE_EXCEPTION();
14425 }
14426 
ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14427 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14428 {
14429 	USE_OPLINE
14430 	zval *container;
14431 
14432 	SAVE_OPLINE();
14433 	container = EX_VAR(opline->op1.var);
14434 	zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
14435 
14436 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14437 }
14438 
ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14439 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14440 {
14441 	USE_OPLINE
14442 	zval *val;
14443 
14444 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14445 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14446 		ZVAL_FALSE(EX_VAR(opline->result.var));
14447 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14448 		/* The result and op1 can be the same cv zval */
14449 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
14450 		ZVAL_TRUE(EX_VAR(opline->result.var));
14451 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
14452 			SAVE_OPLINE();
14453 			ZVAL_UNDEFINED_OP1();
14454 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14455 		}
14456 	} else {
14457 		SAVE_OPLINE();
14458 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
14459 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14460 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14461 	}
14462 	ZEND_VM_NEXT_OPCODE();
14463 }
14464 
ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14465 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14466 {
14467 	USE_OPLINE
14468 	zval *z;
14469 
14470 	SAVE_OPLINE();
14471 	z = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14472 
14473 	if (Z_TYPE_P(z) == IS_STRING) {
14474 		zend_string *str = Z_STR_P(z);
14475 
14476 		if (ZSTR_LEN(str) != 0) {
14477 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
14478 		}
14479 	} else {
14480 		zend_string *str = zval_get_string_func(z);
14481 
14482 		if (ZSTR_LEN(str) != 0) {
14483 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
14484 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
14485 			ZVAL_UNDEFINED_OP1();
14486 		}
14487 		zend_string_release_ex(str, 0);
14488 	}
14489 
14490 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14491 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14492 }
14493 
ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14494 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14495 {
14496 	USE_OPLINE
14497 	zval *val;
14498 	uint8_t op1_type;
14499 
14500 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14501 
14502 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14503 		ZEND_VM_NEXT_OPCODE();
14504 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14505 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14506 			SAVE_OPLINE();
14507 			ZVAL_UNDEFINED_OP1();
14508 			if (UNEXPECTED(EG(exception))) {
14509 				HANDLE_EXCEPTION();
14510 			}
14511 		}
14512 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14513 	}
14514 
14515 	SAVE_OPLINE();
14516 	op1_type = (IS_TMP_VAR|IS_VAR);
14517 	if (i_zend_is_true(val)) {
14518 		opline++;
14519 	} else {
14520 		opline = OP_JMP_ADDR(opline, opline->op2);
14521 	}
14522 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
14523 		zval_ptr_dtor_nogc(val);
14524 	}
14525 	ZEND_VM_JMP(opline);
14526 }
14527 
ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14528 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14529 {
14530 	USE_OPLINE
14531 	zval *val;
14532 	uint8_t op1_type;
14533 
14534 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14535 
14536 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14537 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14538 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14539 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14540 			SAVE_OPLINE();
14541 			ZVAL_UNDEFINED_OP1();
14542 			if (UNEXPECTED(EG(exception))) {
14543 				HANDLE_EXCEPTION();
14544 			}
14545 		}
14546 		ZEND_VM_NEXT_OPCODE();
14547 	}
14548 
14549 	SAVE_OPLINE();
14550 	op1_type = (IS_TMP_VAR|IS_VAR);
14551 	if (i_zend_is_true(val)) {
14552 		opline = OP_JMP_ADDR(opline, opline->op2);
14553 	} else {
14554 		opline++;
14555 	}
14556 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
14557 		zval_ptr_dtor_nogc(val);
14558 	}
14559 	ZEND_VM_JMP(opline);
14560 }
14561 
ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14562 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14563 {
14564 	USE_OPLINE
14565 	zval *val;
14566 	bool ret;
14567 
14568 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14569 
14570 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14571 		ZVAL_TRUE(EX_VAR(opline->result.var));
14572 		ZEND_VM_NEXT_OPCODE();
14573 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14574 		ZVAL_FALSE(EX_VAR(opline->result.var));
14575 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14576 			SAVE_OPLINE();
14577 			ZVAL_UNDEFINED_OP1();
14578 			if (UNEXPECTED(EG(exception))) {
14579 				HANDLE_EXCEPTION();
14580 			}
14581 		}
14582 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14583 	}
14584 
14585 	SAVE_OPLINE();
14586 	ret = i_zend_is_true(val);
14587 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14588 	if (ret) {
14589 		ZVAL_TRUE(EX_VAR(opline->result.var));
14590 		opline++;
14591 	} else {
14592 		ZVAL_FALSE(EX_VAR(opline->result.var));
14593 		opline = OP_JMP_ADDR(opline, opline->op2);
14594 	}
14595 	ZEND_VM_JMP(opline);
14596 }
14597 
ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14598 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14599 {
14600 	USE_OPLINE
14601 	zval *val;
14602 	bool ret;
14603 
14604 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14605 
14606 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14607 		ZVAL_TRUE(EX_VAR(opline->result.var));
14608 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
14609 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14610 		ZVAL_FALSE(EX_VAR(opline->result.var));
14611 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
14612 			SAVE_OPLINE();
14613 			ZVAL_UNDEFINED_OP1();
14614 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14615 		} else {
14616 			ZEND_VM_NEXT_OPCODE();
14617 		}
14618 	}
14619 
14620 	SAVE_OPLINE();
14621 	ret = i_zend_is_true(val);
14622 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14623 	if (ret) {
14624 		ZVAL_TRUE(EX_VAR(opline->result.var));
14625 		opline = OP_JMP_ADDR(opline, opline->op2);
14626 	} else {
14627 		ZVAL_FALSE(EX_VAR(opline->result.var));
14628 		opline++;
14629 	}
14630 	ZEND_VM_JMP(opline);
14631 }
14632 
ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14633 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14634 {
14635 	USE_OPLINE
14636 
14637 	SAVE_OPLINE();
14638 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14639 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14640 }
14641 
ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14642 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14643 {
14644 	zval *var;
14645 	USE_OPLINE
14646 
14647 	var = EX_VAR(opline->op1.var);
14648 	if (Z_TYPE_P(var) != IS_ARRAY) {
14649 		SAVE_OPLINE();
14650 		if (Z_FE_ITER_P(var) != (uint32_t)-1) {
14651 			zend_hash_iterator_del(Z_FE_ITER_P(var));
14652 		}
14653 		zval_ptr_dtor_nogc(var);
14654 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14655 	}
14656 
14657 	/* This is freeing an array. Use an inlined version of zval_ptr_dtor_nogc. */
14658 	/* 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) */
14659 	if (Z_REFCOUNTED_P(var) && !Z_DELREF_P(var)) {
14660 		SAVE_OPLINE();
14661 		rc_dtor_func(Z_COUNTED_P(var));
14662 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14663 	}
14664 	ZEND_VM_NEXT_OPCODE();
14665 }
14666 
ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14667 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14668 {
14669 	USE_OPLINE
14670 	zval *value;
14671 
14672 	SAVE_OPLINE();
14673 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14674 
14675 	do {
14676 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
14677 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
14678 				value = Z_REFVAL_P(value);
14679 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
14680 					break;
14681 				}
14682 			}
14683 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
14684 				ZVAL_UNDEFINED_OP1();
14685 				if (UNEXPECTED(EG(exception) != NULL)) {
14686 					HANDLE_EXCEPTION();
14687 				}
14688 			}
14689 			zend_throw_error(NULL, "Can only throw objects");
14690 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14691 			HANDLE_EXCEPTION();
14692 		}
14693 	} while (0);
14694 
14695 	zend_exception_save();
14696 	Z_TRY_ADDREF_P(value);
14697 	zend_throw_exception_object(value);
14698 	zend_exception_restore();
14699 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14700 	HANDLE_EXCEPTION();
14701 }
14702 
ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14703 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14704 {
14705 	USE_OPLINE
14706 	zval *val;
14707 
14708 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14709 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
14710 		ZVAL_TRUE(EX_VAR(opline->result.var));
14711 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
14712 		/* The result and op1 can be the same cv zval */
14713 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
14714 		ZVAL_FALSE(EX_VAR(opline->result.var));
14715 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
14716 			SAVE_OPLINE();
14717 			ZVAL_UNDEFINED_OP1();
14718 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14719 		}
14720 	} else {
14721 		SAVE_OPLINE();
14722 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
14723 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14724 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14725 	}
14726 	ZEND_VM_NEXT_OPCODE();
14727 }
14728 
ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14729 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14730 {
14731 	USE_OPLINE
14732 	zval *obj;
14733 	zend_object *zobj;
14734 	zend_class_entry *ce, *scope;
14735 	zend_function *clone;
14736 	zend_object_clone_obj_t clone_call;
14737 
14738 	SAVE_OPLINE();
14739 	obj = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14740 
14741 	do {
14742 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
14743 		    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
14744 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
14745 				obj = Z_REFVAL_P(obj);
14746 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
14747 					break;
14748 				}
14749 			}
14750 			ZVAL_UNDEF(EX_VAR(opline->result.var));
14751 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
14752 				ZVAL_UNDEFINED_OP1();
14753 				if (UNEXPECTED(EG(exception) != NULL)) {
14754 					HANDLE_EXCEPTION();
14755 				}
14756 			}
14757 			zend_throw_error(NULL, "__clone method called on non-object");
14758 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14759 			HANDLE_EXCEPTION();
14760 		}
14761 	} while (0);
14762 
14763 	zobj = Z_OBJ_P(obj);
14764 	ce = zobj->ce;
14765 	clone = ce->clone;
14766 	clone_call = zobj->handlers->clone_obj;
14767 	if (UNEXPECTED(clone_call == NULL)) {
14768 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
14769 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14770 		ZVAL_UNDEF(EX_VAR(opline->result.var));
14771 		HANDLE_EXCEPTION();
14772 	}
14773 
14774 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
14775 		scope = EX(func)->op_array.scope;
14776 		if (clone->common.scope != scope) {
14777 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
14778 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
14779 				zend_wrong_clone_call(clone, scope);
14780 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14781 				ZVAL_UNDEF(EX_VAR(opline->result.var));
14782 				HANDLE_EXCEPTION();
14783 			}
14784 		}
14785 	}
14786 
14787 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
14788 
14789 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14790 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
14791 }
14792 
ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14793 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14794 {
14795 	USE_OPLINE
14796 	zend_op_array *new_op_array;
14797 	zval *inc_filename;
14798 
14799 	SAVE_OPLINE();
14800 	inc_filename = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14801 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
14802 	if (UNEXPECTED(EG(exception) != NULL)) {
14803 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14804 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
14805 			destroy_op_array(new_op_array);
14806 			efree_size(new_op_array, sizeof(zend_op_array));
14807 		}
14808 		UNDEF_RESULT();
14809 		HANDLE_EXCEPTION();
14810 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
14811 		if (RETURN_VALUE_USED(opline)) {
14812 			ZVAL_TRUE(EX_VAR(opline->result.var));
14813 		}
14814 	} else if (UNEXPECTED(new_op_array == NULL)) {
14815 		if (RETURN_VALUE_USED(opline)) {
14816 			ZVAL_FALSE(EX_VAR(opline->result.var));
14817 		}
14818 	} else if (new_op_array->last == 1
14819 			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
14820 			&& new_op_array->opcodes[0].op1_type == IS_CONST
14821 			&& EXPECTED(zend_execute_ex == execute_ex)) {
14822 		if (RETURN_VALUE_USED(opline)) {
14823 			const zend_op *op = new_op_array->opcodes;
14824 
14825 			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
14826 		}
14827 		zend_destroy_static_vars(new_op_array);
14828 		destroy_op_array(new_op_array);
14829 		efree_size(new_op_array, sizeof(zend_op_array));
14830 	} else {
14831 		zval *return_value = NULL;
14832 		zend_execute_data *call;
14833 		if (RETURN_VALUE_USED(opline)) {
14834 			return_value = EX_VAR(opline->result.var);
14835 		}
14836 
14837 		new_op_array->scope = EX(func)->op_array.scope;
14838 
14839 		call = zend_vm_stack_push_call_frame(
14840 			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
14841 			(zend_function*)new_op_array, 0,
14842 			Z_PTR(EX(This)));
14843 
14844 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
14845 			call->symbol_table = EX(symbol_table);
14846 		} else {
14847 			call->symbol_table = zend_rebuild_symbol_table();
14848 		}
14849 
14850 		call->prev_execute_data = execute_data;
14851 		i_init_code_execute_data(call, new_op_array, return_value);
14852 
14853 		if (EXPECTED(zend_execute_ex == execute_ex)) {
14854 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14855 			ZEND_VM_ENTER();
14856 		} else {
14857 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
14858 			zend_execute_ex(call);
14859 			zend_vm_stack_free_call_frame(call);
14860 		}
14861 
14862 		zend_destroy_static_vars(new_op_array);
14863 		destroy_op_array(new_op_array);
14864 		efree_size(new_op_array, sizeof(zend_op_array));
14865 		if (UNEXPECTED(EG(exception) != NULL)) {
14866 			zend_rethrow_exception(execute_data);
14867 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14868 			UNDEF_RESULT();
14869 			HANDLE_EXCEPTION();
14870 		}
14871 	}
14872 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14873 	ZEND_VM_NEXT_OPCODE();
14874 }
14875 
ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14876 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14877 {
14878 	USE_OPLINE
14879 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
14880 	zval *val;
14881 
14882 	SAVE_OPLINE();
14883 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14884 
14885 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
14886 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
14887 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14888 		UNDEF_RESULT();
14889 		HANDLE_EXCEPTION();
14890 	}
14891 
14892 yield_from_try_again:
14893 	if (Z_TYPE_P(val) == IS_ARRAY) {
14894 		ZVAL_COPY_VALUE(&generator->values, val);
14895 		if (Z_OPT_REFCOUNTED_P(val)) {
14896 			Z_ADDREF_P(val);
14897 		}
14898 		Z_FE_POS(generator->values) = 0;
14899 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14900 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
14901 		zend_class_entry *ce = Z_OBJCE_P(val);
14902 		if (ce == zend_ce_generator) {
14903 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
14904 
14905 			Z_ADDREF_P(val);
14906 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14907 
14908 			if (UNEXPECTED(new_gen->execute_data == NULL)) {
14909 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
14910 				zval_ptr_dtor(val);
14911 				UNDEF_RESULT();
14912 				HANDLE_EXCEPTION();
14913 			} else if (Z_ISUNDEF(new_gen->retval)) {
14914 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
14915 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
14916 					zval_ptr_dtor(val);
14917 					UNDEF_RESULT();
14918 					HANDLE_EXCEPTION();
14919 				} else {
14920 					zend_generator_yield_from(generator, new_gen);
14921 				}
14922 			} else {
14923 				if (RETURN_VALUE_USED(opline)) {
14924 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
14925 				}
14926 				ZEND_VM_NEXT_OPCODE();
14927 			}
14928 		} else {
14929 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
14930 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14931 
14932 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
14933 				if (!EG(exception)) {
14934 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
14935 				}
14936 				UNDEF_RESULT();
14937 				HANDLE_EXCEPTION();
14938 			}
14939 
14940 			iter->index = 0;
14941 			if (iter->funcs->rewind) {
14942 				iter->funcs->rewind(iter);
14943 				if (UNEXPECTED(EG(exception) != NULL)) {
14944 					OBJ_RELEASE(&iter->std);
14945 					UNDEF_RESULT();
14946 					HANDLE_EXCEPTION();
14947 				}
14948 			}
14949 
14950 			ZVAL_OBJ(&generator->values, &iter->std);
14951 		}
14952 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
14953 		val = Z_REFVAL_P(val);
14954 		goto yield_from_try_again;
14955 	} else {
14956 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
14957 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
14958 		UNDEF_RESULT();
14959 		HANDLE_EXCEPTION();
14960 	}
14961 
14962 	/* This is the default return value
14963 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
14964 	if (RETURN_VALUE_USED(opline)) {
14965 		ZVAL_NULL(EX_VAR(opline->result.var));
14966 	}
14967 
14968 	/* This generator has no send target (though the generator we delegate to might have one) */
14969 	generator->send_target = NULL;
14970 
14971 	/* We increment to the next op, so we are at the correct position when the
14972 	 * generator is resumed. */
14973 	ZEND_VM_INC_OPCODE();
14974 
14975 	/* The GOTO VM uses a local opline variable. We need to set the opline
14976 	 * variable in execute_data so we don't resume at an old position. */
14977 	SAVE_OPLINE();
14978 
14979 	ZEND_VM_RETURN();
14980 }
14981 
ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)14982 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14983 {
14984 	USE_OPLINE
14985 	zval *value;
14986 
14987 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
14988 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
14989 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
14990 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
14991 			zval_ptr_dtor_str(value);
14992 		}
14993 		ZEND_VM_NEXT_OPCODE();
14994 	} else {
14995 		bool strict;
14996 
14997 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
14998 			value = Z_REFVAL_P(value);
14999 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
15000 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
15001 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15002 				ZEND_VM_NEXT_OPCODE();
15003 			}
15004 		}
15005 
15006 		SAVE_OPLINE();
15007 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
15008 			value = ZVAL_UNDEFINED_OP1();
15009 		}
15010 		strict = EX_USES_STRICT_TYPES();
15011 		do {
15012 			if (EXPECTED(!strict)) {
15013 				zend_string *str;
15014 				zval tmp;
15015 
15016 				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
15017 					zend_error(E_DEPRECATED,
15018 						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
15019 					ZVAL_LONG(EX_VAR(opline->result.var), 0);
15020 					if (UNEXPECTED(EG(exception))) {
15021 						HANDLE_EXCEPTION();
15022 					}
15023 					break;
15024 				}
15025 
15026 				ZVAL_COPY(&tmp, value);
15027 				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
15028 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
15029 					zval_ptr_dtor(&tmp);
15030 					break;
15031 				}
15032 				zval_ptr_dtor(&tmp);
15033 			}
15034 			if (!EG(exception)) {
15035 				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_value_name(value));
15036 			}
15037 			ZVAL_UNDEF(EX_VAR(opline->result.var));
15038 		} while (0);
15039 	}
15040 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15041 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15042 }
15043 
ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15044 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15045 {
15046 	USE_OPLINE
15047 	zval *value;
15048 	int result = 0;
15049 
15050 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15051 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
15052 type_check_resource:
15053 		if (opline->extended_value != MAY_BE_RESOURCE
15054 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
15055 			result = 1;
15056 		}
15057 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
15058 		value = Z_REFVAL_P(value);
15059 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
15060 			goto type_check_resource;
15061 		}
15062 	} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
15063 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
15064 		SAVE_OPLINE();
15065 		ZVAL_UNDEFINED_OP1();
15066 		if (UNEXPECTED(EG(exception))) {
15067 			ZVAL_UNDEF(EX_VAR(opline->result.var));
15068 			HANDLE_EXCEPTION();
15069 		}
15070 	}
15071 	if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15072 		SAVE_OPLINE();
15073 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15074 		ZEND_VM_SMART_BRANCH(result, 1);
15075 	} else {
15076 		ZEND_VM_SMART_BRANCH(result, 0);
15077 	}
15078 }
15079 
ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15080 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15081 {
15082 	uint32_t fetch_type;
15083 	zend_class_entry *called_scope, *scope;
15084 	USE_OPLINE
15085 
15086 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
15087 		SAVE_OPLINE();
15088 		zval *op = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15089 		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
15090 			ZVAL_DEREF(op);
15091 			if (Z_TYPE_P(op) != IS_OBJECT) {
15092 				zend_type_error("Cannot use \"::class\" on %s", zend_zval_value_name(op));
15093 				ZVAL_UNDEF(EX_VAR(opline->result.var));
15094 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15095 				HANDLE_EXCEPTION();
15096 			}
15097 		}
15098 
15099 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
15100 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15101 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15102 	}
15103 
15104 	fetch_type = opline->op1.num;
15105 	scope = EX(func)->op_array.scope;
15106 	if (UNEXPECTED(scope == NULL)) {
15107 		SAVE_OPLINE();
15108 		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
15109 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
15110 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
15111 		ZVAL_UNDEF(EX_VAR(opline->result.var));
15112 		HANDLE_EXCEPTION();
15113 	}
15114 
15115 	switch (fetch_type) {
15116 		case ZEND_FETCH_CLASS_SELF:
15117 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
15118 			break;
15119 		case ZEND_FETCH_CLASS_PARENT:
15120 			if (UNEXPECTED(scope->parent == NULL)) {
15121 				SAVE_OPLINE();
15122 				zend_throw_error(NULL,
15123 					"Cannot use \"parent\" when current class scope has no parent");
15124 				ZVAL_UNDEF(EX_VAR(opline->result.var));
15125 				HANDLE_EXCEPTION();
15126 			}
15127 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
15128 			break;
15129 		case ZEND_FETCH_CLASS_STATIC:
15130 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
15131 				called_scope = Z_OBJCE(EX(This));
15132 			} else {
15133 				called_scope = Z_CE(EX(This));
15134 			}
15135 			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
15136 			break;
15137 		EMPTY_SWITCH_DEFAULT_CASE()
15138 	}
15139 	ZEND_VM_NEXT_OPCODE();
15140 }
15141 
ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15142 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15143 {
15144 	USE_OPLINE
15145 	zval *op1, *op2;
15146 
15147 	SAVE_OPLINE();
15148 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15149 	op2 = RT_CONSTANT(opline, opline->op2);
15150 	div_function(EX_VAR(opline->result.var), op1, op2);
15151 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15152 
15153 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15154 }
15155 
ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15156 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15157 {
15158 	USE_OPLINE
15159 	zval *op1, *op2;
15160 
15161 	SAVE_OPLINE();
15162 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15163 	op2 = RT_CONSTANT(opline, opline->op2);
15164 	pow_function(EX_VAR(opline->result.var), op1, op2);
15165 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15166 
15167 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15168 }
15169 
ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15170 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15171 {
15172 	USE_OPLINE
15173 	zval *op1, *op2;
15174 
15175 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15176 	op2 = RT_CONSTANT(opline, opline->op2);
15177 
15178 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
15179 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
15180 		zend_string *op1_str = Z_STR_P(op1);
15181 		zend_string *op2_str = Z_STR_P(op2);
15182 		zend_string *str;
15183 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
15184 
15185 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
15186 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
15187 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
15188 			} else {
15189 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
15190 			}
15191 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15192 				zend_string_release_ex(op1_str, 0);
15193 			}
15194 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
15195 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
15196 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
15197 			} else {
15198 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
15199 			}
15200 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15201 				zend_string_release_ex(op2_str, 0);
15202 			}
15203 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
15204 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
15205 			size_t len = ZSTR_LEN(op1_str);
15206 
15207 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
15208 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
15209 			}
15210 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
15211 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
15212 			GC_ADD_FLAGS(str, flags);
15213 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
15214 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15215 				zend_string_release_ex(op2_str, 0);
15216 			}
15217 		} else {
15218 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
15219 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
15220 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
15221 			GC_ADD_FLAGS(str, flags);
15222 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
15223 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15224 				zend_string_release_ex(op1_str, 0);
15225 			}
15226 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15227 				zend_string_release_ex(op2_str, 0);
15228 			}
15229 		}
15230 		ZEND_VM_NEXT_OPCODE();
15231 	} else {
15232 		SAVE_OPLINE();
15233 
15234 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
15235 			op1 = ZVAL_UNDEFINED_OP1();
15236 		}
15237 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
15238 			op2 = ZVAL_UNDEFINED_OP2();
15239 		}
15240 		concat_function(EX_VAR(opline->result.var), op1, op2);
15241 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15242 
15243 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15244 	}
15245 }
15246 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15247 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15248 {
15249 	USE_OPLINE
15250 	zval *op1, *op2;
15251 	double d1, d2;
15252 
15253 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15254 	op2 = RT_CONSTANT(opline, opline->op2);
15255 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15256 		/* pass */
15257 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15258 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15259 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
15260 is_equal_true:
15261 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
15262 			} else {
15263 is_equal_false:
15264 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
15265 			}
15266 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15267 			d1 = (double)Z_LVAL_P(op1);
15268 			d2 = Z_DVAL_P(op2);
15269 			goto is_equal_double;
15270 		}
15271 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15272 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15273 			d1 = Z_DVAL_P(op1);
15274 			d2 = Z_DVAL_P(op2);
15275 is_equal_double:
15276 			if (d1 == d2) {
15277 				goto is_equal_true;
15278 			} else {
15279 				goto is_equal_false;
15280 			}
15281 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15282 			d1 = Z_DVAL_P(op1);
15283 			d2 = (double)Z_LVAL_P(op2);
15284 			goto is_equal_double;
15285 		}
15286 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15287 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15288 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15289 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15290 				zval_ptr_dtor_str(op1);
15291 			}
15292 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15293 				zval_ptr_dtor_str(op2);
15294 			}
15295 			if (result) {
15296 				goto is_equal_true;
15297 			} else {
15298 				goto is_equal_false;
15299 			}
15300 		}
15301 	}
15302 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15303 }
15304 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15305 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15306 {
15307 	USE_OPLINE
15308 	zval *op1, *op2;
15309 	double d1, d2;
15310 
15311 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15312 	op2 = RT_CONSTANT(opline, opline->op2);
15313 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15314 		/* pass */
15315 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15316 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15317 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
15318 is_equal_true:
15319 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
15320 			} else {
15321 is_equal_false:
15322 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
15323 			}
15324 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15325 			d1 = (double)Z_LVAL_P(op1);
15326 			d2 = Z_DVAL_P(op2);
15327 			goto is_equal_double;
15328 		}
15329 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15330 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15331 			d1 = Z_DVAL_P(op1);
15332 			d2 = Z_DVAL_P(op2);
15333 is_equal_double:
15334 			if (d1 == d2) {
15335 				goto is_equal_true;
15336 			} else {
15337 				goto is_equal_false;
15338 			}
15339 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15340 			d1 = Z_DVAL_P(op1);
15341 			d2 = (double)Z_LVAL_P(op2);
15342 			goto is_equal_double;
15343 		}
15344 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15345 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15346 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15347 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15348 				zval_ptr_dtor_str(op1);
15349 			}
15350 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15351 				zval_ptr_dtor_str(op2);
15352 			}
15353 			if (result) {
15354 				goto is_equal_true;
15355 			} else {
15356 				goto is_equal_false;
15357 			}
15358 		}
15359 	}
15360 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15361 }
15362 
ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15363 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15364 {
15365 	USE_OPLINE
15366 	zval *op1, *op2;
15367 	double d1, d2;
15368 
15369 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15370 	op2 = RT_CONSTANT(opline, opline->op2);
15371 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15372 		/* pass */
15373 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15374 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15375 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
15376 is_equal_true:
15377 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
15378 			} else {
15379 is_equal_false:
15380 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
15381 			}
15382 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15383 			d1 = (double)Z_LVAL_P(op1);
15384 			d2 = Z_DVAL_P(op2);
15385 			goto is_equal_double;
15386 		}
15387 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15388 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15389 			d1 = Z_DVAL_P(op1);
15390 			d2 = Z_DVAL_P(op2);
15391 is_equal_double:
15392 			if (d1 == d2) {
15393 				goto is_equal_true;
15394 			} else {
15395 				goto is_equal_false;
15396 			}
15397 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15398 			d1 = Z_DVAL_P(op1);
15399 			d2 = (double)Z_LVAL_P(op2);
15400 			goto is_equal_double;
15401 		}
15402 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15403 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15404 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15405 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15406 				zval_ptr_dtor_str(op1);
15407 			}
15408 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15409 				zval_ptr_dtor_str(op2);
15410 			}
15411 			if (result) {
15412 				goto is_equal_true;
15413 			} else {
15414 				goto is_equal_false;
15415 			}
15416 		}
15417 	}
15418 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15419 }
15420 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15421 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15422 {
15423 	USE_OPLINE
15424 	zval *op1, *op2;
15425 	double d1, d2;
15426 
15427 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15428 	op2 = RT_CONSTANT(opline, opline->op2);
15429 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15430 		/* pass */
15431 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15432 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15433 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
15434 is_not_equal_true:
15435 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
15436 			} else {
15437 is_not_equal_false:
15438 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
15439 			}
15440 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15441 			d1 = (double)Z_LVAL_P(op1);
15442 			d2 = Z_DVAL_P(op2);
15443 			goto is_not_equal_double;
15444 		}
15445 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15446 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15447 			d1 = Z_DVAL_P(op1);
15448 			d2 = Z_DVAL_P(op2);
15449 is_not_equal_double:
15450 			if (d1 != d2) {
15451 				goto is_not_equal_true;
15452 			} else {
15453 				goto is_not_equal_false;
15454 			}
15455 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15456 			d1 = Z_DVAL_P(op1);
15457 			d2 = (double)Z_LVAL_P(op2);
15458 			goto is_not_equal_double;
15459 		}
15460 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15461 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15462 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15463 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15464 				zval_ptr_dtor_str(op1);
15465 			}
15466 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15467 				zval_ptr_dtor_str(op2);
15468 			}
15469 			if (!result) {
15470 				goto is_not_equal_true;
15471 			} else {
15472 				goto is_not_equal_false;
15473 			}
15474 		}
15475 	}
15476 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15477 }
15478 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15479 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15480 {
15481 	USE_OPLINE
15482 	zval *op1, *op2;
15483 	double d1, d2;
15484 
15485 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15486 	op2 = RT_CONSTANT(opline, opline->op2);
15487 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15488 		/* pass */
15489 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15490 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15491 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
15492 is_not_equal_true:
15493 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
15494 			} else {
15495 is_not_equal_false:
15496 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
15497 			}
15498 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15499 			d1 = (double)Z_LVAL_P(op1);
15500 			d2 = Z_DVAL_P(op2);
15501 			goto is_not_equal_double;
15502 		}
15503 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15504 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15505 			d1 = Z_DVAL_P(op1);
15506 			d2 = Z_DVAL_P(op2);
15507 is_not_equal_double:
15508 			if (d1 != d2) {
15509 				goto is_not_equal_true;
15510 			} else {
15511 				goto is_not_equal_false;
15512 			}
15513 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15514 			d1 = Z_DVAL_P(op1);
15515 			d2 = (double)Z_LVAL_P(op2);
15516 			goto is_not_equal_double;
15517 		}
15518 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15519 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15520 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15521 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15522 				zval_ptr_dtor_str(op1);
15523 			}
15524 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15525 				zval_ptr_dtor_str(op2);
15526 			}
15527 			if (!result) {
15528 				goto is_not_equal_true;
15529 			} else {
15530 				goto is_not_equal_false;
15531 			}
15532 		}
15533 	}
15534 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15535 }
15536 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15537 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15538 {
15539 	USE_OPLINE
15540 	zval *op1, *op2;
15541 	double d1, d2;
15542 
15543 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15544 	op2 = RT_CONSTANT(opline, opline->op2);
15545 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && IS_CONST == IS_CONST) {
15546 		/* pass */
15547 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
15548 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15549 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
15550 is_not_equal_true:
15551 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
15552 			} else {
15553 is_not_equal_false:
15554 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
15555 			}
15556 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15557 			d1 = (double)Z_LVAL_P(op1);
15558 			d2 = Z_DVAL_P(op2);
15559 			goto is_not_equal_double;
15560 		}
15561 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
15562 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
15563 			d1 = Z_DVAL_P(op1);
15564 			d2 = Z_DVAL_P(op2);
15565 is_not_equal_double:
15566 			if (d1 != d2) {
15567 				goto is_not_equal_true;
15568 			} else {
15569 				goto is_not_equal_false;
15570 			}
15571 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
15572 			d1 = Z_DVAL_P(op1);
15573 			d2 = (double)Z_LVAL_P(op2);
15574 			goto is_not_equal_double;
15575 		}
15576 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15577 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15578 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
15579 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15580 				zval_ptr_dtor_str(op1);
15581 			}
15582 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15583 				zval_ptr_dtor_str(op2);
15584 			}
15585 			if (!result) {
15586 				goto is_not_equal_true;
15587 			} else {
15588 				goto is_not_equal_false;
15589 			}
15590 		}
15591 	}
15592 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
15593 }
15594 
ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15595 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15596 {
15597 	USE_OPLINE
15598 	zval *op1, *op2;
15599 
15600 	SAVE_OPLINE();
15601 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15602 	op2 = RT_CONSTANT(opline, opline->op2);
15603 	compare_function(EX_VAR(opline->result.var), op1, op2);
15604 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15605 
15606 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15607 }
15608 
ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15609 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15610 {
15611 	USE_OPLINE
15612 	zval *op1, *op2;
15613 
15614 	SAVE_OPLINE();
15615 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15616 	op2 = RT_CONSTANT(opline, opline->op2);
15617 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
15618 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15619 
15620 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15621 }
15622 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15623 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15624 {
15625 	USE_OPLINE
15626 	zval *container, *dim, *value;
15627 
15628 	SAVE_OPLINE();
15629 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15630 	dim = RT_CONSTANT(opline, opline->op2);
15631 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
15632 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15633 fetch_dim_r_array:
15634 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
15635 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
15636 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
15637 			container = Z_REFVAL_P(container);
15638 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
15639 				goto fetch_dim_r_array;
15640 			} else {
15641 				goto fetch_dim_r_slow;
15642 			}
15643 		} else {
15644 fetch_dim_r_slow:
15645 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
15646 				dim++;
15647 			}
15648 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
15649 		}
15650 	} else {
15651 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
15652 	}
15653 
15654 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15655 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15656 }
15657 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15658 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15659 {
15660 	USE_OPLINE
15661 	zval *container;
15662 
15663 	SAVE_OPLINE();
15664 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15665 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
15666 
15667 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15668 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15669 }
15670 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15671 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15672 {
15673 	USE_OPLINE
15674 	zval *container;
15675 	void **cache_slot = NULL;
15676 
15677 	SAVE_OPLINE();
15678 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15679 
15680 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
15681 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
15682 		do {
15683 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
15684 				container = Z_REFVAL_P(container);
15685 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
15686 					break;
15687 				}
15688 			}
15689 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
15690 				ZVAL_UNDEFINED_OP1();
15691 			}
15692 			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
15693 			ZVAL_NULL(EX_VAR(opline->result.var));
15694 			goto fetch_obj_r_finish;
15695 		} while (0);
15696 	}
15697 
15698 	/* here we are sure we are dealing with an object */
15699 	do {
15700 		zend_object *zobj = Z_OBJ_P(container);
15701 		zend_string *name, *tmp_name;
15702 		zval *retval;
15703 
15704 		if (IS_CONST == IS_CONST) {
15705 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
15706 
15707 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
15708 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
15709 
15710 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
15711 					retval = OBJ_PROP(zobj, prop_offset);
15712 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
15713 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15714 							goto fetch_obj_r_copy;
15715 						} else {
15716 fetch_obj_r_fast_copy:
15717 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15718 							ZEND_VM_NEXT_OPCODE();
15719 						}
15720 					}
15721 				} else if (EXPECTED(zobj->properties != NULL)) {
15722 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
15723 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
15724 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
15725 
15726 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
15727 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
15728 
15729 							if (EXPECTED(p->key == name) ||
15730 							    (EXPECTED(p->h == ZSTR_H(name)) &&
15731 							     EXPECTED(p->key != NULL) &&
15732 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
15733 								retval = &p->val;
15734 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15735 									goto fetch_obj_r_copy;
15736 								} else {
15737 									goto fetch_obj_r_fast_copy;
15738 								}
15739 							}
15740 						}
15741 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
15742 					}
15743 					retval = zend_hash_find_known_hash(zobj->properties, name);
15744 					if (EXPECTED(retval)) {
15745 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
15746 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
15747 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15748 							goto fetch_obj_r_copy;
15749 						} else {
15750 							goto fetch_obj_r_fast_copy;
15751 						}
15752 					}
15753 				}
15754 			}
15755 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
15756 		} else {
15757 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
15758 			if (UNEXPECTED(!name)) {
15759 				ZVAL_UNDEF(EX_VAR(opline->result.var));
15760 				break;
15761 			}
15762 		}
15763 
15764 #if ZEND_DEBUG
15765 		/* For non-standard object handlers, verify a declared property type in debug builds.
15766 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
15767 		zend_property_info *prop_info = NULL;
15768 		if (zobj->handlers->read_property != zend_std_read_property) {
15769 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
15770 		}
15771 #endif
15772 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
15773 #if ZEND_DEBUG
15774 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
15775 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
15776 			ZVAL_OPT_DEREF(retval);
15777 			zend_verify_property_type(prop_info, retval, /* strict */ true);
15778 		}
15779 #endif
15780 
15781 		if (IS_CONST != IS_CONST) {
15782 			zend_tmp_string_release(tmp_name);
15783 		}
15784 
15785 		if (retval != EX_VAR(opline->result.var)) {
15786 fetch_obj_r_copy:
15787 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15788 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
15789 			zend_unwrap_reference(retval);
15790 		}
15791 	} while (0);
15792 
15793 fetch_obj_r_finish:
15794 
15795 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15796 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15797 }
15798 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15799 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15800 {
15801 	USE_OPLINE
15802 	zval *container;
15803 	void **cache_slot = NULL;
15804 
15805 	SAVE_OPLINE();
15806 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15807 
15808 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
15809 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
15810 		do {
15811 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
15812 				container = Z_REFVAL_P(container);
15813 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
15814 					break;
15815 				}
15816 			}
15817 			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
15818 				ZVAL_UNDEFINED_OP2();
15819 			}
15820 			ZVAL_NULL(EX_VAR(opline->result.var));
15821 			goto fetch_obj_is_finish;
15822 		} while (0);
15823 	}
15824 
15825 	/* here we are sure we are dealing with an object */
15826 	do {
15827 		zend_object *zobj = Z_OBJ_P(container);
15828 		zend_string *name, *tmp_name;
15829 		zval *retval;
15830 
15831 		if (IS_CONST == IS_CONST) {
15832 			cache_slot = CACHE_ADDR(opline->extended_value);
15833 
15834 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
15835 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
15836 
15837 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
15838 					retval = OBJ_PROP(zobj, prop_offset);
15839 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
15840 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15841 							goto fetch_obj_is_copy;
15842 						} else {
15843 fetch_obj_is_fast_copy:
15844 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15845 							ZEND_VM_NEXT_OPCODE();
15846 						}
15847 					}
15848 				} else if (EXPECTED(zobj->properties != NULL)) {
15849 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
15850 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
15851 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
15852 
15853 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
15854 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
15855 
15856 							if (EXPECTED(p->key == name) ||
15857 							    (EXPECTED(p->h == ZSTR_H(name)) &&
15858 							     EXPECTED(p->key != NULL) &&
15859 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
15860 								retval = &p->val;
15861 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15862 									goto fetch_obj_is_copy;
15863 								} else {
15864 									goto fetch_obj_is_fast_copy;
15865 								}
15866 							}
15867 						}
15868 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
15869 					}
15870 					retval = zend_hash_find_known_hash(zobj->properties, name);
15871 					if (EXPECTED(retval)) {
15872 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
15873 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
15874 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
15875 							goto fetch_obj_is_copy;
15876 						} else {
15877 							goto fetch_obj_is_fast_copy;
15878 						}
15879 					}
15880 				}
15881 			}
15882 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
15883 		} else {
15884 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
15885 			if (UNEXPECTED(!name)) {
15886 				ZVAL_UNDEF(EX_VAR(opline->result.var));
15887 				break;
15888 			}
15889 		}
15890 
15891 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
15892 
15893 		if (IS_CONST != IS_CONST) {
15894 			zend_tmp_string_release(tmp_name);
15895 		}
15896 
15897 		if (retval != EX_VAR(opline->result.var)) {
15898 fetch_obj_is_copy:
15899 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
15900 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
15901 			zend_unwrap_reference(retval);
15902 		}
15903 	} while (0);
15904 
15905 fetch_obj_is_finish:
15906 
15907 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
15908 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
15909 }
15910 
ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)15911 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15912 {
15913 	USE_OPLINE
15914 	zval *op1, *op2;
15915 	zend_string *op1_str, *op2_str, *str;
15916 
15917 
15918 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
15919 	op2 = RT_CONSTANT(opline, opline->op2);
15920 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
15921 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
15922 		zend_string *op1_str = Z_STR_P(op1);
15923 		zend_string *op2_str = Z_STR_P(op2);
15924 		zend_string *str;
15925 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
15926 
15927 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
15928 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
15929 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
15930 			} else {
15931 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
15932 			}
15933 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15934 				zend_string_release_ex(op1_str, 0);
15935 			}
15936 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
15937 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
15938 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
15939 			} else {
15940 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
15941 			}
15942 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15943 				zend_string_release_ex(op2_str, 0);
15944 			}
15945 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
15946 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
15947 			size_t len = ZSTR_LEN(op1_str);
15948 
15949 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
15950 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
15951 			GC_ADD_FLAGS(str, flags);
15952 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
15953 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15954 				zend_string_release_ex(op2_str, 0);
15955 			}
15956 		} else {
15957 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
15958 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
15959 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
15960 			GC_ADD_FLAGS(str, flags);
15961 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
15962 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
15963 				zend_string_release_ex(op1_str, 0);
15964 			}
15965 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
15966 				zend_string_release_ex(op2_str, 0);
15967 			}
15968 		}
15969 		ZEND_VM_NEXT_OPCODE();
15970 	}
15971 
15972 	SAVE_OPLINE();
15973 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
15974 		op1_str = Z_STR_P(op1);
15975 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
15976 		op1_str = zend_string_copy(Z_STR_P(op1));
15977 	} else {
15978 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
15979 			ZVAL_UNDEFINED_OP1();
15980 		}
15981 		op1_str = zval_get_string_func(op1);
15982 	}
15983 	if (IS_CONST == IS_CONST) {
15984 		op2_str = Z_STR_P(op2);
15985 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
15986 		op2_str = zend_string_copy(Z_STR_P(op2));
15987 	} else {
15988 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
15989 			ZVAL_UNDEFINED_OP2();
15990 		}
15991 		op2_str = zval_get_string_func(op2);
15992 	}
15993 	do {
15994 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
15995 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
15996 				if (IS_CONST == IS_CONST) {
15997 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
15998 						GC_ADDREF(op2_str);
15999 					}
16000 				}
16001 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
16002 				zend_string_release_ex(op1_str, 0);
16003 				break;
16004 			}
16005 		}
16006 		if (IS_CONST != IS_CONST) {
16007 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
16008 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16009 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
16010 						GC_ADDREF(op1_str);
16011 					}
16012 				}
16013 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
16014 				zend_string_release_ex(op2_str, 0);
16015 				break;
16016 			}
16017 		}
16018 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
16019 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
16020 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16021 
16022 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
16023 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16024 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
16025 			zend_string_release_ex(op1_str, 0);
16026 		}
16027 		if (IS_CONST != IS_CONST) {
16028 			zend_string_release_ex(op2_str, 0);
16029 		}
16030 	} while (0);
16031 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16032 
16033 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16034 }
16035 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16036 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16037 {
16038 	USE_OPLINE
16039 	zval *function_name;
16040 	zval *object;
16041 	zend_function *fbc;
16042 	zend_class_entry *called_scope;
16043 	zend_object *obj;
16044 	zend_execute_data *call;
16045 	uint32_t call_info;
16046 
16047 	SAVE_OPLINE();
16048 
16049 	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16050 
16051 	if (IS_CONST != IS_CONST) {
16052 		function_name = RT_CONSTANT(opline, opline->op2);
16053 	}
16054 
16055 	if (IS_CONST != IS_CONST &&
16056 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
16057 		do {
16058 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
16059 				function_name = Z_REFVAL_P(function_name);
16060 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
16061 					break;
16062 				}
16063 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
16064 				ZVAL_UNDEFINED_OP2();
16065 				if (UNEXPECTED(EG(exception) != NULL)) {
16066 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16067 					HANDLE_EXCEPTION();
16068 				}
16069 			}
16070 			zend_throw_error(NULL, "Method name must be a string");
16071 
16072 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16073 			HANDLE_EXCEPTION();
16074 		} while (0);
16075 	}
16076 
16077 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
16078 		obj = Z_OBJ_P(object);
16079 	} else {
16080 		do {
16081 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
16082 				obj = Z_OBJ_P(object);
16083 			} else {
16084 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
16085 					zend_reference *ref = Z_REF_P(object);
16086 
16087 					object = &ref->val;
16088 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
16089 						obj = Z_OBJ_P(object);
16090 						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
16091 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
16092 								efree_size(ref, sizeof(zend_reference));
16093 							} else {
16094 								Z_ADDREF_P(object);
16095 							}
16096 						}
16097 						break;
16098 					}
16099 				}
16100 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
16101 					object = ZVAL_UNDEFINED_OP1();
16102 					if (UNEXPECTED(EG(exception) != NULL)) {
16103 						if (IS_CONST != IS_CONST) {
16104 
16105 						}
16106 						HANDLE_EXCEPTION();
16107 					}
16108 				}
16109 				if (IS_CONST == IS_CONST) {
16110 					function_name = RT_CONSTANT(opline, opline->op2);
16111 				}
16112 				zend_invalid_method_call(object, function_name);
16113 
16114 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16115 				HANDLE_EXCEPTION();
16116 			}
16117 		} while (0);
16118 	}
16119 
16120 	called_scope = obj->ce;
16121 
16122 	if (IS_CONST == IS_CONST &&
16123 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
16124 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
16125 	} else {
16126 		zend_object *orig_obj = obj;
16127 
16128 		if (IS_CONST == IS_CONST) {
16129 			function_name = RT_CONSTANT(opline, opline->op2);
16130 		}
16131 
16132 		/* First, locate the function. */
16133 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
16134 		if (UNEXPECTED(fbc == NULL)) {
16135 			if (EXPECTED(!EG(exception))) {
16136 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
16137 			}
16138 
16139 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
16140 				zend_objects_store_del(orig_obj);
16141 			}
16142 			HANDLE_EXCEPTION();
16143 		}
16144 		if (IS_CONST == IS_CONST &&
16145 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
16146 		    EXPECTED(obj == orig_obj)) {
16147 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
16148 		}
16149 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
16150 			GC_ADDREF(obj); /* For $this pointer */
16151 			if (GC_DELREF(orig_obj) == 0) {
16152 				zend_objects_store_del(orig_obj);
16153 			}
16154 		}
16155 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
16156 			init_func_run_time_cache(&fbc->op_array);
16157 		}
16158 	}
16159 
16160 	if (IS_CONST != IS_CONST) {
16161 
16162 	}
16163 
16164 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
16165 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
16166 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
16167 			zend_objects_store_del(obj);
16168 			if (UNEXPECTED(EG(exception))) {
16169 				HANDLE_EXCEPTION();
16170 			}
16171 		}
16172 		/* call static method */
16173 		obj = (zend_object*)called_scope;
16174 		call_info = ZEND_CALL_NESTED_FUNCTION;
16175 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
16176 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
16177 			GC_ADDREF(obj); /* For $this pointer */
16178 		}
16179 		/* CV may be changed indirectly (e.g. when it's a reference) */
16180 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
16181 	}
16182 
16183 	call = zend_vm_stack_push_call_frame(call_info,
16184 		fbc, opline->extended_value, obj);
16185 	call->prev_execute_data = EX(call);
16186 	EX(call) = call;
16187 
16188 	ZEND_VM_NEXT_OPCODE();
16189 }
16190 
ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16191 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16192 {
16193 	USE_OPLINE
16194 	zval *value, *arg;
16195 
16196 	if (IS_CONST == IS_CONST) {
16197 		SAVE_OPLINE();
16198 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
16199 		uint32_t arg_num;
16200 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
16201 		if (UNEXPECTED(!arg)) {
16202 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16203 			HANDLE_EXCEPTION();
16204 		}
16205 	} else {
16206 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
16207 	}
16208 
16209 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16210 	ZVAL_COPY_VALUE(arg, value);
16211 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
16212 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
16213 			Z_ADDREF_P(arg);
16214 		}
16215 	}
16216 	ZEND_VM_NEXT_OPCODE();
16217 }
16218 
ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16219 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16220 {
16221 	USE_OPLINE
16222 	zval *op1, *op2;
16223 	double d1, d2;
16224 
16225 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16226 	op2 = RT_CONSTANT(opline, opline->op2);
16227 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16228 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16229 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
16230 case_true:
16231 				ZEND_VM_SMART_BRANCH_TRUE();
16232 			} else {
16233 case_false:
16234 				ZEND_VM_SMART_BRANCH_FALSE();
16235 			}
16236 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16237 			d1 = (double)Z_LVAL_P(op1);
16238 			d2 = Z_DVAL_P(op2);
16239 			goto case_double;
16240 		}
16241 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16242 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16243 			d1 = Z_DVAL_P(op1);
16244 			d2 = Z_DVAL_P(op2);
16245 case_double:
16246 			if (d1 == d2) {
16247 				goto case_true;
16248 			} else {
16249 				goto case_false;
16250 			}
16251 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16252 			d1 = Z_DVAL_P(op1);
16253 			d2 = (double)Z_LVAL_P(op2);
16254 			goto case_double;
16255 		}
16256 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16257 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16258 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16259 
16260 			if (result) {
16261 				goto case_true;
16262 			} else {
16263 				goto case_false;
16264 			}
16265 		}
16266 	}
16267 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16268 }
16269 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16270 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16271 {
16272 	USE_OPLINE
16273 	zval *container;
16274 	bool result;
16275 	zend_ulong hval;
16276 	zval *offset;
16277 
16278 	SAVE_OPLINE();
16279 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16280 	offset = RT_CONSTANT(opline, opline->op2);
16281 
16282 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16283 		HashTable *ht;
16284 		zval *value;
16285 		zend_string *str;
16286 
16287 isset_dim_obj_array:
16288 		ht = Z_ARRVAL_P(container);
16289 isset_again:
16290 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
16291 			str = Z_STR_P(offset);
16292 			if (IS_CONST != IS_CONST) {
16293 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
16294 					goto num_index_prop;
16295 				}
16296 			}
16297 			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
16298 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
16299 			hval = Z_LVAL_P(offset);
16300 num_index_prop:
16301 			value = zend_hash_index_find(ht, hval);
16302 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
16303 			offset = Z_REFVAL_P(offset);
16304 			goto isset_again;
16305 		} else {
16306 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
16307 			if (UNEXPECTED(EG(exception))) {
16308 				result = 0;
16309 				goto isset_dim_obj_exit;
16310 			}
16311 		}
16312 
16313 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
16314 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
16315 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
16316 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
16317 
16318 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
16319 				/* avoid exception check */
16320 
16321 				ZEND_VM_SMART_BRANCH(result, 0);
16322 			}
16323 		} else {
16324 			result = (value == NULL || !i_zend_is_true(value));
16325 		}
16326 		goto isset_dim_obj_exit;
16327 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
16328 		container = Z_REFVAL_P(container);
16329 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16330 			goto isset_dim_obj_array;
16331 		}
16332 	}
16333 
16334 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
16335 		offset++;
16336 	}
16337 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
16338 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
16339 	} else {
16340 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
16341 	}
16342 
16343 isset_dim_obj_exit:
16344 
16345 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16346 	ZEND_VM_SMART_BRANCH(result, 1);
16347 }
16348 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16349 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16350 {
16351 	USE_OPLINE
16352 	zval *container;
16353 	int result;
16354 	zval *offset;
16355 	zend_string *name, *tmp_name;
16356 
16357 	SAVE_OPLINE();
16358 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16359 	offset = RT_CONSTANT(opline, opline->op2);
16360 
16361 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
16362 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
16363 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
16364 			container = Z_REFVAL_P(container);
16365 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
16366 				result = (opline->extended_value & ZEND_ISEMPTY);
16367 				goto isset_object_finish;
16368 			}
16369 		} else {
16370 			result = (opline->extended_value & ZEND_ISEMPTY);
16371 			goto isset_object_finish;
16372 		}
16373 	}
16374 
16375 	if (IS_CONST == IS_CONST) {
16376 		name = Z_STR_P(offset);
16377 	} else {
16378 		name = zval_try_get_tmp_string(offset, &tmp_name);
16379 		if (UNEXPECTED(!name)) {
16380 			result = 0;
16381 			goto isset_object_finish;
16382 		}
16383 	}
16384 
16385 	result =
16386 		(opline->extended_value & ZEND_ISEMPTY) ^
16387 		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));
16388 
16389 	if (IS_CONST != IS_CONST) {
16390 		zend_tmp_string_release(tmp_name);
16391 	}
16392 
16393 isset_object_finish:
16394 
16395 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16396 	ZEND_VM_SMART_BRANCH(result, 1);
16397 }
16398 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16399 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16400 {
16401 	USE_OPLINE
16402 
16403 	zval *key, *subject;
16404 	HashTable *ht;
16405 	bool result;
16406 
16407 	SAVE_OPLINE();
16408 
16409 	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16410 	subject = RT_CONSTANT(opline, opline->op2);
16411 
16412 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
16413 array_key_exists_array:
16414 		ht = Z_ARRVAL_P(subject);
16415 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
16416 	} else {
16417 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
16418 			subject = Z_REFVAL_P(subject);
16419 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
16420 				goto array_key_exists_array;
16421 			}
16422 		}
16423 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
16424 		result = 0;
16425 	}
16426 
16427 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16428 	ZEND_VM_SMART_BRANCH(result, 1);
16429 }
16430 
16431 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16432 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16433 {
16434 	USE_OPLINE
16435 	zval *expr;
16436 	bool result;
16437 
16438 	SAVE_OPLINE();
16439 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16440 
16441 try_instanceof:
16442 	if (Z_TYPE_P(expr) == IS_OBJECT) {
16443 		zend_class_entry *ce;
16444 
16445 		if (IS_CONST == IS_CONST) {
16446 			ce = CACHED_PTR(opline->extended_value);
16447 			if (UNEXPECTED(ce == NULL)) {
16448 				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
16449 				if (EXPECTED(ce)) {
16450 					CACHE_PTR(opline->extended_value, ce);
16451 				}
16452 			}
16453 		} else if (IS_CONST == IS_UNUSED) {
16454 			ce = zend_fetch_class(NULL, opline->op2.num);
16455 			if (UNEXPECTED(ce == NULL)) {
16456 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16457 				ZVAL_UNDEF(EX_VAR(opline->result.var));
16458 				HANDLE_EXCEPTION();
16459 			}
16460 		} else {
16461 			ce = Z_CE_P(EX_VAR(opline->op2.var));
16462 		}
16463 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
16464 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
16465 		expr = Z_REFVAL_P(expr);
16466 		goto try_instanceof;
16467 	} else {
16468 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
16469 			ZVAL_UNDEFINED_OP1();
16470 		}
16471 		result = 0;
16472 	}
16473 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16474 	ZEND_VM_SMART_BRANCH(result, 1);
16475 }
16476 
ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16477 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16478 {
16479 	USE_OPLINE
16480 	zval *container, *dim, *value;
16481 	zend_long offset;
16482 	HashTable *ht;
16483 
16484 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16485 	dim = RT_CONSTANT(opline, opline->op2);
16486 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16487 fetch_dim_r_index_array:
16488 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
16489 			offset = Z_LVAL_P(dim);
16490 		} else {
16491 			SAVE_OPLINE();
16492 			zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
16493 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16494 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16495 		}
16496 		ht = Z_ARRVAL_P(container);
16497 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
16498 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
16499 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16500 			SAVE_OPLINE();
16501 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16502 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16503 		} else {
16504 			ZEND_VM_NEXT_OPCODE();
16505 		}
16506 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
16507 		container = Z_REFVAL_P(container);
16508 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16509 			goto fetch_dim_r_index_array;
16510 		} else {
16511 			goto fetch_dim_r_index_slow;
16512 		}
16513 	} else {
16514 fetch_dim_r_index_slow:
16515 		SAVE_OPLINE();
16516 		if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
16517 			dim++;
16518 		}
16519 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
16520 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16521 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16522 	}
16523 
16524 fetch_dim_r_index_undef:
16525 	ZVAL_NULL(EX_VAR(opline->result.var));
16526 	SAVE_OPLINE();
16527 	zend_undefined_offset(offset);
16528 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16529 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16530 }
16531 
ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16532 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16533 {
16534 	USE_OPLINE
16535 	zval *container, *dim, *value;
16536 	zend_long offset;
16537 	HashTable *ht;
16538 
16539 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16540 	dim = EX_VAR(opline->op2.var);
16541 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16542 fetch_dim_r_index_array:
16543 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
16544 			offset = Z_LVAL_P(dim);
16545 		} else {
16546 			SAVE_OPLINE();
16547 			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
16548 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16549 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16550 		}
16551 		ht = Z_ARRVAL_P(container);
16552 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
16553 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
16554 		if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16555 			SAVE_OPLINE();
16556 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16557 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16558 		} else {
16559 			ZEND_VM_NEXT_OPCODE();
16560 		}
16561 	} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
16562 		container = Z_REFVAL_P(container);
16563 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
16564 			goto fetch_dim_r_index_array;
16565 		} else {
16566 			goto fetch_dim_r_index_slow;
16567 		}
16568 	} else {
16569 fetch_dim_r_index_slow:
16570 		SAVE_OPLINE();
16571 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
16572 			dim++;
16573 		}
16574 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
16575 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16576 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16577 	}
16578 
16579 fetch_dim_r_index_undef:
16580 	ZVAL_NULL(EX_VAR(opline->result.var));
16581 	SAVE_OPLINE();
16582 	zend_undefined_offset(offset);
16583 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16584 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16585 }
16586 
ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16587 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16588 {
16589 	USE_OPLINE
16590 	zval *op1, *op2;
16591 
16592 	SAVE_OPLINE();
16593 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16594 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16595 	div_function(EX_VAR(opline->result.var), op1, op2);
16596 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16597 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16598 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16599 }
16600 
ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16601 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16602 {
16603 	USE_OPLINE
16604 	zval *op1, *op2;
16605 
16606 	SAVE_OPLINE();
16607 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16608 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16609 	pow_function(EX_VAR(opline->result.var), op1, op2);
16610 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16611 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16612 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16613 }
16614 
ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16615 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16616 {
16617 	USE_OPLINE
16618 	zval *op1, *op2;
16619 
16620 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16621 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16622 
16623 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
16624 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
16625 		zend_string *op1_str = Z_STR_P(op1);
16626 		zend_string *op2_str = Z_STR_P(op2);
16627 		zend_string *str;
16628 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
16629 
16630 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
16631 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
16632 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
16633 			} else {
16634 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
16635 			}
16636 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16637 				zend_string_release_ex(op1_str, 0);
16638 			}
16639 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
16640 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
16641 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
16642 			} else {
16643 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
16644 			}
16645 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16646 				zend_string_release_ex(op2_str, 0);
16647 			}
16648 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
16649 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
16650 			size_t len = ZSTR_LEN(op1_str);
16651 
16652 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
16653 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
16654 			}
16655 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
16656 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16657 			GC_ADD_FLAGS(str, flags);
16658 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16659 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16660 				zend_string_release_ex(op2_str, 0);
16661 			}
16662 		} else {
16663 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
16664 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
16665 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
16666 			GC_ADD_FLAGS(str, flags);
16667 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
16668 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16669 				zend_string_release_ex(op1_str, 0);
16670 			}
16671 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16672 				zend_string_release_ex(op2_str, 0);
16673 			}
16674 		}
16675 		ZEND_VM_NEXT_OPCODE();
16676 	} else {
16677 		SAVE_OPLINE();
16678 
16679 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
16680 			op1 = ZVAL_UNDEFINED_OP1();
16681 		}
16682 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
16683 			op2 = ZVAL_UNDEFINED_OP2();
16684 		}
16685 		concat_function(EX_VAR(opline->result.var), op1, op2);
16686 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
16687 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
16688 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
16689 	}
16690 }
16691 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16692 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16693 {
16694 	USE_OPLINE
16695 	zval *op1, *op2;
16696 	double d1, d2;
16697 
16698 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16699 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16700 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16701 		/* pass */
16702 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16703 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16704 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
16705 is_equal_true:
16706 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
16707 			} else {
16708 is_equal_false:
16709 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
16710 			}
16711 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16712 			d1 = (double)Z_LVAL_P(op1);
16713 			d2 = Z_DVAL_P(op2);
16714 			goto is_equal_double;
16715 		}
16716 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16717 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16718 			d1 = Z_DVAL_P(op1);
16719 			d2 = Z_DVAL_P(op2);
16720 is_equal_double:
16721 			if (d1 == d2) {
16722 				goto is_equal_true;
16723 			} else {
16724 				goto is_equal_false;
16725 			}
16726 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16727 			d1 = Z_DVAL_P(op1);
16728 			d2 = (double)Z_LVAL_P(op2);
16729 			goto is_equal_double;
16730 		}
16731 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16732 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16733 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16734 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16735 				zval_ptr_dtor_str(op1);
16736 			}
16737 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16738 				zval_ptr_dtor_str(op2);
16739 			}
16740 			if (result) {
16741 				goto is_equal_true;
16742 			} else {
16743 				goto is_equal_false;
16744 			}
16745 		}
16746 	}
16747 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16748 }
16749 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16750 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16751 {
16752 	USE_OPLINE
16753 	zval *op1, *op2;
16754 	double d1, d2;
16755 
16756 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16757 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16758 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16759 		/* pass */
16760 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16761 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16762 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
16763 is_equal_true:
16764 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
16765 			} else {
16766 is_equal_false:
16767 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
16768 			}
16769 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16770 			d1 = (double)Z_LVAL_P(op1);
16771 			d2 = Z_DVAL_P(op2);
16772 			goto is_equal_double;
16773 		}
16774 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16775 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16776 			d1 = Z_DVAL_P(op1);
16777 			d2 = Z_DVAL_P(op2);
16778 is_equal_double:
16779 			if (d1 == d2) {
16780 				goto is_equal_true;
16781 			} else {
16782 				goto is_equal_false;
16783 			}
16784 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16785 			d1 = Z_DVAL_P(op1);
16786 			d2 = (double)Z_LVAL_P(op2);
16787 			goto is_equal_double;
16788 		}
16789 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16790 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16791 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16792 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16793 				zval_ptr_dtor_str(op1);
16794 			}
16795 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16796 				zval_ptr_dtor_str(op2);
16797 			}
16798 			if (result) {
16799 				goto is_equal_true;
16800 			} else {
16801 				goto is_equal_false;
16802 			}
16803 		}
16804 	}
16805 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16806 }
16807 
ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16808 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16809 {
16810 	USE_OPLINE
16811 	zval *op1, *op2;
16812 	double d1, d2;
16813 
16814 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16815 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16816 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16817 		/* pass */
16818 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16819 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16820 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
16821 is_equal_true:
16822 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
16823 			} else {
16824 is_equal_false:
16825 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
16826 			}
16827 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16828 			d1 = (double)Z_LVAL_P(op1);
16829 			d2 = Z_DVAL_P(op2);
16830 			goto is_equal_double;
16831 		}
16832 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16833 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16834 			d1 = Z_DVAL_P(op1);
16835 			d2 = Z_DVAL_P(op2);
16836 is_equal_double:
16837 			if (d1 == d2) {
16838 				goto is_equal_true;
16839 			} else {
16840 				goto is_equal_false;
16841 			}
16842 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16843 			d1 = Z_DVAL_P(op1);
16844 			d2 = (double)Z_LVAL_P(op2);
16845 			goto is_equal_double;
16846 		}
16847 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16848 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16849 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16850 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16851 				zval_ptr_dtor_str(op1);
16852 			}
16853 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16854 				zval_ptr_dtor_str(op2);
16855 			}
16856 			if (result) {
16857 				goto is_equal_true;
16858 			} else {
16859 				goto is_equal_false;
16860 			}
16861 		}
16862 	}
16863 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16864 }
16865 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16866 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16867 {
16868 	USE_OPLINE
16869 	zval *op1, *op2;
16870 	double d1, d2;
16871 
16872 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16873 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16874 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16875 		/* pass */
16876 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16877 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16878 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
16879 is_not_equal_true:
16880 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
16881 			} else {
16882 is_not_equal_false:
16883 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
16884 			}
16885 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16886 			d1 = (double)Z_LVAL_P(op1);
16887 			d2 = Z_DVAL_P(op2);
16888 			goto is_not_equal_double;
16889 		}
16890 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16891 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16892 			d1 = Z_DVAL_P(op1);
16893 			d2 = Z_DVAL_P(op2);
16894 is_not_equal_double:
16895 			if (d1 != d2) {
16896 				goto is_not_equal_true;
16897 			} else {
16898 				goto is_not_equal_false;
16899 			}
16900 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16901 			d1 = Z_DVAL_P(op1);
16902 			d2 = (double)Z_LVAL_P(op2);
16903 			goto is_not_equal_double;
16904 		}
16905 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16906 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16907 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16908 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16909 				zval_ptr_dtor_str(op1);
16910 			}
16911 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16912 				zval_ptr_dtor_str(op2);
16913 			}
16914 			if (!result) {
16915 				goto is_not_equal_true;
16916 			} else {
16917 				goto is_not_equal_false;
16918 			}
16919 		}
16920 	}
16921 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16922 }
16923 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16924 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16925 {
16926 	USE_OPLINE
16927 	zval *op1, *op2;
16928 	double d1, d2;
16929 
16930 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16931 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16932 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16933 		/* pass */
16934 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16935 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16936 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
16937 is_not_equal_true:
16938 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
16939 			} else {
16940 is_not_equal_false:
16941 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
16942 			}
16943 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16944 			d1 = (double)Z_LVAL_P(op1);
16945 			d2 = Z_DVAL_P(op2);
16946 			goto is_not_equal_double;
16947 		}
16948 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
16949 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
16950 			d1 = Z_DVAL_P(op1);
16951 			d2 = Z_DVAL_P(op2);
16952 is_not_equal_double:
16953 			if (d1 != d2) {
16954 				goto is_not_equal_true;
16955 			} else {
16956 				goto is_not_equal_false;
16957 			}
16958 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16959 			d1 = Z_DVAL_P(op1);
16960 			d2 = (double)Z_LVAL_P(op2);
16961 			goto is_not_equal_double;
16962 		}
16963 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
16964 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
16965 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
16966 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16967 				zval_ptr_dtor_str(op1);
16968 			}
16969 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
16970 				zval_ptr_dtor_str(op2);
16971 			}
16972 			if (!result) {
16973 				goto is_not_equal_true;
16974 			} else {
16975 				goto is_not_equal_false;
16976 			}
16977 		}
16978 	}
16979 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
16980 }
16981 
ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)16982 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16983 {
16984 	USE_OPLINE
16985 	zval *op1, *op2;
16986 	double d1, d2;
16987 
16988 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
16989 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
16990 	if (1 && (IS_TMP_VAR|IS_VAR) == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
16991 		/* pass */
16992 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
16993 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
16994 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
16995 is_not_equal_true:
16996 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
16997 			} else {
16998 is_not_equal_false:
16999 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
17000 			}
17001 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17002 			d1 = (double)Z_LVAL_P(op1);
17003 			d2 = Z_DVAL_P(op2);
17004 			goto is_not_equal_double;
17005 		}
17006 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
17007 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17008 			d1 = Z_DVAL_P(op1);
17009 			d2 = Z_DVAL_P(op2);
17010 is_not_equal_double:
17011 			if (d1 != d2) {
17012 				goto is_not_equal_true;
17013 			} else {
17014 				goto is_not_equal_false;
17015 			}
17016 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17017 			d1 = Z_DVAL_P(op1);
17018 			d2 = (double)Z_LVAL_P(op2);
17019 			goto is_not_equal_double;
17020 		}
17021 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17022 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17023 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
17024 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17025 				zval_ptr_dtor_str(op1);
17026 			}
17027 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17028 				zval_ptr_dtor_str(op2);
17029 			}
17030 			if (!result) {
17031 				goto is_not_equal_true;
17032 			} else {
17033 				goto is_not_equal_false;
17034 			}
17035 		}
17036 	}
17037 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17038 }
17039 
ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17040 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17041 {
17042 	USE_OPLINE
17043 	zval *op1, *op2;
17044 
17045 	SAVE_OPLINE();
17046 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17047 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17048 	compare_function(EX_VAR(opline->result.var), op1, op2);
17049 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17050 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17051 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17052 }
17053 
ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17054 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17055 {
17056 	USE_OPLINE
17057 	zval *op1, *op2;
17058 
17059 	SAVE_OPLINE();
17060 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17061 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17062 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
17063 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17064 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17065 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17066 }
17067 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17068 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17069 {
17070 	USE_OPLINE
17071 	zval *container, *dim, *value;
17072 
17073 	SAVE_OPLINE();
17074 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17075 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17076 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17077 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17078 fetch_dim_r_array:
17079 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
17080 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
17081 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
17082 			container = Z_REFVAL_P(container);
17083 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17084 				goto fetch_dim_r_array;
17085 			} else {
17086 				goto fetch_dim_r_slow;
17087 			}
17088 		} else {
17089 fetch_dim_r_slow:
17090 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
17091 				dim++;
17092 			}
17093 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
17094 		}
17095 	} else {
17096 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
17097 	}
17098 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17099 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17100 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17101 }
17102 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17103 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17104 {
17105 	USE_OPLINE
17106 	zval *container;
17107 
17108 	SAVE_OPLINE();
17109 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17110 	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);
17111 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17112 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17113 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17114 }
17115 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17116 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17117 {
17118 	USE_OPLINE
17119 	zval *container;
17120 	void **cache_slot = NULL;
17121 
17122 	SAVE_OPLINE();
17123 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17124 
17125 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
17126 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
17127 		do {
17128 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
17129 				container = Z_REFVAL_P(container);
17130 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
17131 					break;
17132 				}
17133 			}
17134 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
17135 				ZVAL_UNDEFINED_OP1();
17136 			}
17137 			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
17138 			ZVAL_NULL(EX_VAR(opline->result.var));
17139 			goto fetch_obj_r_finish;
17140 		} while (0);
17141 	}
17142 
17143 	/* here we are sure we are dealing with an object */
17144 	do {
17145 		zend_object *zobj = Z_OBJ_P(container);
17146 		zend_string *name, *tmp_name;
17147 		zval *retval;
17148 
17149 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17150 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
17151 
17152 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
17153 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
17154 
17155 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
17156 					retval = OBJ_PROP(zobj, prop_offset);
17157 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
17158 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17159 							goto fetch_obj_r_copy;
17160 						} else {
17161 fetch_obj_r_fast_copy:
17162 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17163 							ZEND_VM_NEXT_OPCODE();
17164 						}
17165 					}
17166 				} else if (EXPECTED(zobj->properties != NULL)) {
17167 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
17168 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
17169 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
17170 
17171 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
17172 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
17173 
17174 							if (EXPECTED(p->key == name) ||
17175 							    (EXPECTED(p->h == ZSTR_H(name)) &&
17176 							     EXPECTED(p->key != NULL) &&
17177 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
17178 								retval = &p->val;
17179 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17180 									goto fetch_obj_r_copy;
17181 								} else {
17182 									goto fetch_obj_r_fast_copy;
17183 								}
17184 							}
17185 						}
17186 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
17187 					}
17188 					retval = zend_hash_find_known_hash(zobj->properties, name);
17189 					if (EXPECTED(retval)) {
17190 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
17191 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
17192 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17193 							goto fetch_obj_r_copy;
17194 						} else {
17195 							goto fetch_obj_r_fast_copy;
17196 						}
17197 					}
17198 				}
17199 			}
17200 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
17201 		} else {
17202 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
17203 			if (UNEXPECTED(!name)) {
17204 				ZVAL_UNDEF(EX_VAR(opline->result.var));
17205 				break;
17206 			}
17207 		}
17208 
17209 #if ZEND_DEBUG
17210 		/* For non-standard object handlers, verify a declared property type in debug builds.
17211 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
17212 		zend_property_info *prop_info = NULL;
17213 		if (zobj->handlers->read_property != zend_std_read_property) {
17214 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
17215 		}
17216 #endif
17217 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
17218 #if ZEND_DEBUG
17219 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
17220 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
17221 			ZVAL_OPT_DEREF(retval);
17222 			zend_verify_property_type(prop_info, retval, /* strict */ true);
17223 		}
17224 #endif
17225 
17226 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17227 			zend_tmp_string_release(tmp_name);
17228 		}
17229 
17230 		if (retval != EX_VAR(opline->result.var)) {
17231 fetch_obj_r_copy:
17232 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17233 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
17234 			zend_unwrap_reference(retval);
17235 		}
17236 	} while (0);
17237 
17238 fetch_obj_r_finish:
17239 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17240 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17241 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17242 }
17243 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17244 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17245 {
17246 	USE_OPLINE
17247 	zval *container;
17248 	void **cache_slot = NULL;
17249 
17250 	SAVE_OPLINE();
17251 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17252 
17253 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
17254 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
17255 		do {
17256 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
17257 				container = Z_REFVAL_P(container);
17258 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
17259 					break;
17260 				}
17261 			}
17262 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
17263 				ZVAL_UNDEFINED_OP2();
17264 			}
17265 			ZVAL_NULL(EX_VAR(opline->result.var));
17266 			goto fetch_obj_is_finish;
17267 		} while (0);
17268 	}
17269 
17270 	/* here we are sure we are dealing with an object */
17271 	do {
17272 		zend_object *zobj = Z_OBJ_P(container);
17273 		zend_string *name, *tmp_name;
17274 		zval *retval;
17275 
17276 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17277 			cache_slot = CACHE_ADDR(opline->extended_value);
17278 
17279 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
17280 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
17281 
17282 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
17283 					retval = OBJ_PROP(zobj, prop_offset);
17284 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
17285 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17286 							goto fetch_obj_is_copy;
17287 						} else {
17288 fetch_obj_is_fast_copy:
17289 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17290 							ZEND_VM_NEXT_OPCODE();
17291 						}
17292 					}
17293 				} else if (EXPECTED(zobj->properties != NULL)) {
17294 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
17295 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
17296 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
17297 
17298 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
17299 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
17300 
17301 							if (EXPECTED(p->key == name) ||
17302 							    (EXPECTED(p->h == ZSTR_H(name)) &&
17303 							     EXPECTED(p->key != NULL) &&
17304 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
17305 								retval = &p->val;
17306 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17307 									goto fetch_obj_is_copy;
17308 								} else {
17309 									goto fetch_obj_is_fast_copy;
17310 								}
17311 							}
17312 						}
17313 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
17314 					}
17315 					retval = zend_hash_find_known_hash(zobj->properties, name);
17316 					if (EXPECTED(retval)) {
17317 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
17318 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
17319 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
17320 							goto fetch_obj_is_copy;
17321 						} else {
17322 							goto fetch_obj_is_fast_copy;
17323 						}
17324 					}
17325 				}
17326 			}
17327 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
17328 		} else {
17329 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
17330 			if (UNEXPECTED(!name)) {
17331 				ZVAL_UNDEF(EX_VAR(opline->result.var));
17332 				break;
17333 			}
17334 		}
17335 
17336 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
17337 
17338 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17339 			zend_tmp_string_release(tmp_name);
17340 		}
17341 
17342 		if (retval != EX_VAR(opline->result.var)) {
17343 fetch_obj_is_copy:
17344 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17345 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
17346 			zend_unwrap_reference(retval);
17347 		}
17348 	} while (0);
17349 
17350 fetch_obj_is_finish:
17351 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17352 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17353 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17354 }
17355 
ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17356 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17357 {
17358 	USE_OPLINE
17359 	zval *op1, *op2;
17360 	zend_string *op1_str, *op2_str, *str;
17361 
17362 
17363 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17364 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17365 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
17366 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
17367 		zend_string *op1_str = Z_STR_P(op1);
17368 		zend_string *op2_str = Z_STR_P(op2);
17369 		zend_string *str;
17370 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
17371 
17372 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
17373 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
17374 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
17375 			} else {
17376 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
17377 			}
17378 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17379 				zend_string_release_ex(op1_str, 0);
17380 			}
17381 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
17382 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
17383 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
17384 			} else {
17385 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
17386 			}
17387 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17388 				zend_string_release_ex(op2_str, 0);
17389 			}
17390 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
17391 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
17392 			size_t len = ZSTR_LEN(op1_str);
17393 
17394 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
17395 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17396 			GC_ADD_FLAGS(str, flags);
17397 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17398 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17399 				zend_string_release_ex(op2_str, 0);
17400 			}
17401 		} else {
17402 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
17403 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
17404 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17405 			GC_ADD_FLAGS(str, flags);
17406 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17407 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17408 				zend_string_release_ex(op1_str, 0);
17409 			}
17410 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
17411 				zend_string_release_ex(op2_str, 0);
17412 			}
17413 		}
17414 		ZEND_VM_NEXT_OPCODE();
17415 	}
17416 
17417 	SAVE_OPLINE();
17418 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17419 		op1_str = Z_STR_P(op1);
17420 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17421 		op1_str = zend_string_copy(Z_STR_P(op1));
17422 	} else {
17423 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
17424 			ZVAL_UNDEFINED_OP1();
17425 		}
17426 		op1_str = zval_get_string_func(op1);
17427 	}
17428 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17429 		op2_str = Z_STR_P(op2);
17430 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17431 		op2_str = zend_string_copy(Z_STR_P(op2));
17432 	} else {
17433 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
17434 			ZVAL_UNDEFINED_OP2();
17435 		}
17436 		op2_str = zval_get_string_func(op2);
17437 	}
17438 	do {
17439 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17440 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
17441 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17442 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
17443 						GC_ADDREF(op2_str);
17444 					}
17445 				}
17446 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
17447 				zend_string_release_ex(op1_str, 0);
17448 				break;
17449 			}
17450 		}
17451 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17452 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
17453 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17454 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
17455 						GC_ADDREF(op1_str);
17456 					}
17457 				}
17458 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
17459 				zend_string_release_ex(op2_str, 0);
17460 				break;
17461 			}
17462 		}
17463 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
17464 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
17465 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
17466 
17467 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
17468 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
17469 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17470 			zend_string_release_ex(op1_str, 0);
17471 		}
17472 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17473 			zend_string_release_ex(op2_str, 0);
17474 		}
17475 	} while (0);
17476 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17477 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17478 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17479 }
17480 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17481 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17482 {
17483 	USE_OPLINE
17484 	zval *function_name;
17485 	zval *object;
17486 	zend_function *fbc;
17487 	zend_class_entry *called_scope;
17488 	zend_object *obj;
17489 	zend_execute_data *call;
17490 	uint32_t call_info;
17491 
17492 	SAVE_OPLINE();
17493 
17494 	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17495 
17496 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17497 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17498 	}
17499 
17500 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
17501 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
17502 		do {
17503 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
17504 				function_name = Z_REFVAL_P(function_name);
17505 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
17506 					break;
17507 				}
17508 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
17509 				ZVAL_UNDEFINED_OP2();
17510 				if (UNEXPECTED(EG(exception) != NULL)) {
17511 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17512 					HANDLE_EXCEPTION();
17513 				}
17514 			}
17515 			zend_throw_error(NULL, "Method name must be a string");
17516 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17517 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17518 			HANDLE_EXCEPTION();
17519 		} while (0);
17520 	}
17521 
17522 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
17523 		obj = Z_OBJ_P(object);
17524 	} else {
17525 		do {
17526 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
17527 				obj = Z_OBJ_P(object);
17528 			} else {
17529 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
17530 					zend_reference *ref = Z_REF_P(object);
17531 
17532 					object = &ref->val;
17533 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
17534 						obj = Z_OBJ_P(object);
17535 						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
17536 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
17537 								efree_size(ref, sizeof(zend_reference));
17538 							} else {
17539 								Z_ADDREF_P(object);
17540 							}
17541 						}
17542 						break;
17543 					}
17544 				}
17545 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
17546 					object = ZVAL_UNDEFINED_OP1();
17547 					if (UNEXPECTED(EG(exception) != NULL)) {
17548 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17549 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17550 						}
17551 						HANDLE_EXCEPTION();
17552 					}
17553 				}
17554 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17555 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17556 				}
17557 				zend_invalid_method_call(object, function_name);
17558 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17559 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17560 				HANDLE_EXCEPTION();
17561 			}
17562 		} while (0);
17563 	}
17564 
17565 	called_scope = obj->ce;
17566 
17567 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
17568 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
17569 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
17570 	} else {
17571 		zend_object *orig_obj = obj;
17572 
17573 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17574 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17575 		}
17576 
17577 		/* First, locate the function. */
17578 		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));
17579 		if (UNEXPECTED(fbc == NULL)) {
17580 			if (EXPECTED(!EG(exception))) {
17581 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
17582 			}
17583 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17584 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
17585 				zend_objects_store_del(orig_obj);
17586 			}
17587 			HANDLE_EXCEPTION();
17588 		}
17589 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
17590 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
17591 		    EXPECTED(obj == orig_obj)) {
17592 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
17593 		}
17594 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
17595 			GC_ADDREF(obj); /* For $this pointer */
17596 			if (GC_DELREF(orig_obj) == 0) {
17597 				zend_objects_store_del(orig_obj);
17598 			}
17599 		}
17600 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
17601 			init_func_run_time_cache(&fbc->op_array);
17602 		}
17603 	}
17604 
17605 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17606 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17607 	}
17608 
17609 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
17610 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
17611 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
17612 			zend_objects_store_del(obj);
17613 			if (UNEXPECTED(EG(exception))) {
17614 				HANDLE_EXCEPTION();
17615 			}
17616 		}
17617 		/* call static method */
17618 		obj = (zend_object*)called_scope;
17619 		call_info = ZEND_CALL_NESTED_FUNCTION;
17620 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
17621 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
17622 			GC_ADDREF(obj); /* For $this pointer */
17623 		}
17624 		/* CV may be changed indirectly (e.g. when it's a reference) */
17625 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
17626 	}
17627 
17628 	call = zend_vm_stack_push_call_frame(call_info,
17629 		fbc, opline->extended_value, obj);
17630 	call->prev_execute_data = EX(call);
17631 	EX(call) = call;
17632 
17633 	ZEND_VM_NEXT_OPCODE();
17634 }
17635 
ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17636 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17637 {
17638 	USE_OPLINE
17639 	zval *op1, *op2;
17640 	double d1, d2;
17641 
17642 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17643 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17644 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
17645 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17646 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
17647 case_true:
17648 				ZEND_VM_SMART_BRANCH_TRUE();
17649 			} else {
17650 case_false:
17651 				ZEND_VM_SMART_BRANCH_FALSE();
17652 			}
17653 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17654 			d1 = (double)Z_LVAL_P(op1);
17655 			d2 = Z_DVAL_P(op2);
17656 			goto case_double;
17657 		}
17658 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
17659 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
17660 			d1 = Z_DVAL_P(op1);
17661 			d2 = Z_DVAL_P(op2);
17662 case_double:
17663 			if (d1 == d2) {
17664 				goto case_true;
17665 			} else {
17666 				goto case_false;
17667 			}
17668 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
17669 			d1 = Z_DVAL_P(op1);
17670 			d2 = (double)Z_LVAL_P(op2);
17671 			goto case_double;
17672 		}
17673 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
17674 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
17675 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
17676 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17677 			if (result) {
17678 				goto case_true;
17679 			} else {
17680 				goto case_false;
17681 			}
17682 		}
17683 	}
17684 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17685 }
17686 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17687 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17688 {
17689 	USE_OPLINE
17690 	zval *container;
17691 	bool result;
17692 	zend_ulong hval;
17693 	zval *offset;
17694 
17695 	SAVE_OPLINE();
17696 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17697 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17698 
17699 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17700 		HashTable *ht;
17701 		zval *value;
17702 		zend_string *str;
17703 
17704 isset_dim_obj_array:
17705 		ht = Z_ARRVAL_P(container);
17706 isset_again:
17707 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
17708 			str = Z_STR_P(offset);
17709 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17710 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
17711 					goto num_index_prop;
17712 				}
17713 			}
17714 			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
17715 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
17716 			hval = Z_LVAL_P(offset);
17717 num_index_prop:
17718 			value = zend_hash_index_find(ht, hval);
17719 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
17720 			offset = Z_REFVAL_P(offset);
17721 			goto isset_again;
17722 		} else {
17723 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
17724 			if (UNEXPECTED(EG(exception))) {
17725 				result = 0;
17726 				goto isset_dim_obj_exit;
17727 			}
17728 		}
17729 
17730 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
17731 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
17732 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
17733 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
17734 
17735 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
17736 				/* avoid exception check */
17737 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17738 				ZEND_VM_SMART_BRANCH(result, 0);
17739 			}
17740 		} else {
17741 			result = (value == NULL || !i_zend_is_true(value));
17742 		}
17743 		goto isset_dim_obj_exit;
17744 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
17745 		container = Z_REFVAL_P(container);
17746 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
17747 			goto isset_dim_obj_array;
17748 		}
17749 	}
17750 
17751 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
17752 		offset++;
17753 	}
17754 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
17755 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
17756 	} else {
17757 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
17758 	}
17759 
17760 isset_dim_obj_exit:
17761 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17762 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17763 	ZEND_VM_SMART_BRANCH(result, 1);
17764 }
17765 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17766 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17767 {
17768 	USE_OPLINE
17769 	zval *container;
17770 	int result;
17771 	zval *offset;
17772 	zend_string *name, *tmp_name;
17773 
17774 	SAVE_OPLINE();
17775 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17776 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17777 
17778 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
17779 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
17780 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
17781 			container = Z_REFVAL_P(container);
17782 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
17783 				result = (opline->extended_value & ZEND_ISEMPTY);
17784 				goto isset_object_finish;
17785 			}
17786 		} else {
17787 			result = (opline->extended_value & ZEND_ISEMPTY);
17788 			goto isset_object_finish;
17789 		}
17790 	}
17791 
17792 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17793 		name = Z_STR_P(offset);
17794 	} else {
17795 		name = zval_try_get_tmp_string(offset, &tmp_name);
17796 		if (UNEXPECTED(!name)) {
17797 			result = 0;
17798 			goto isset_object_finish;
17799 		}
17800 	}
17801 
17802 	result =
17803 		(opline->extended_value & ZEND_ISEMPTY) ^
17804 		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));
17805 
17806 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17807 		zend_tmp_string_release(tmp_name);
17808 	}
17809 
17810 isset_object_finish:
17811 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17812 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17813 	ZEND_VM_SMART_BRANCH(result, 1);
17814 }
17815 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17816 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17817 {
17818 	USE_OPLINE
17819 
17820 	zval *key, *subject;
17821 	HashTable *ht;
17822 	bool result;
17823 
17824 	SAVE_OPLINE();
17825 
17826 	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17827 	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
17828 
17829 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
17830 array_key_exists_array:
17831 		ht = Z_ARRVAL_P(subject);
17832 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
17833 	} else {
17834 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
17835 			subject = Z_REFVAL_P(subject);
17836 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
17837 				goto array_key_exists_array;
17838 			}
17839 		}
17840 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
17841 		result = 0;
17842 	}
17843 
17844 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
17845 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17846 	ZEND_VM_SMART_BRANCH(result, 1);
17847 }
17848 
17849 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17850 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17851 {
17852 	USE_OPLINE
17853 	zval *expr;
17854 	bool result;
17855 
17856 	SAVE_OPLINE();
17857 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17858 
17859 try_instanceof:
17860 	if (Z_TYPE_P(expr) == IS_OBJECT) {
17861 		zend_class_entry *ce;
17862 
17863 		if (IS_VAR == IS_CONST) {
17864 			ce = CACHED_PTR(opline->extended_value);
17865 			if (UNEXPECTED(ce == NULL)) {
17866 				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
17867 				if (EXPECTED(ce)) {
17868 					CACHE_PTR(opline->extended_value, ce);
17869 				}
17870 			}
17871 		} else if (IS_VAR == IS_UNUSED) {
17872 			ce = zend_fetch_class(NULL, opline->op2.num);
17873 			if (UNEXPECTED(ce == NULL)) {
17874 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17875 				ZVAL_UNDEF(EX_VAR(opline->result.var));
17876 				HANDLE_EXCEPTION();
17877 			}
17878 		} else {
17879 			ce = Z_CE_P(EX_VAR(opline->op2.var));
17880 		}
17881 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
17882 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
17883 		expr = Z_REFVAL_P(expr);
17884 		goto try_instanceof;
17885 	} else {
17886 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
17887 			ZVAL_UNDEFINED_OP1();
17888 		}
17889 		result = 0;
17890 	}
17891 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17892 	ZEND_VM_SMART_BRANCH(result, 1);
17893 }
17894 
zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)17895 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)
17896 {
17897 	USE_OPLINE
17898 	zval *varname;
17899 	zval *retval;
17900 	zend_string *name, *tmp_name;
17901 	HashTable *target_symbol_table;
17902 
17903 	SAVE_OPLINE();
17904 	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
17905 
17906 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
17907 		name = Z_STR_P(varname);
17908 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
17909 		name = Z_STR_P(varname);
17910 		tmp_name = NULL;
17911 	} else {
17912 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
17913 			ZVAL_UNDEFINED_OP1();
17914 		}
17915 		name = zval_try_get_tmp_string(varname, &tmp_name);
17916 		if (UNEXPECTED(!name)) {
17917 			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
17918 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17919 			}
17920 			ZVAL_UNDEF(EX_VAR(opline->result.var));
17921 			HANDLE_EXCEPTION();
17922 		}
17923 	}
17924 
17925 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
17926 	retval = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
17927 	if (retval == NULL) {
17928 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
17929 fetch_this:
17930 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
17931 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17932 				zend_tmp_string_release(tmp_name);
17933 			}
17934 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17935 		}
17936 		if (type == BP_VAR_W) {
17937 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
17938 		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
17939 			retval = &EG(uninitialized_zval);
17940 		} else {
17941 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
17942 				/* Keep name alive in case an error handler tries to free it. */
17943 				zend_string_addref(name);
17944 			}
17945 			zend_error(E_WARNING, "Undefined %svariable $%s",
17946 				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
17947 			if (type == BP_VAR_RW && !EG(exception)) {
17948 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
17949 			} else {
17950 				retval = &EG(uninitialized_zval);
17951 			}
17952 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
17953 				zend_string_release(name);
17954 			}
17955 		}
17956 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
17957 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
17958 		retval = Z_INDIRECT_P(retval);
17959 		if (Z_TYPE_P(retval) == IS_UNDEF) {
17960 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
17961 				goto fetch_this;
17962 			}
17963 			if (type == BP_VAR_W) {
17964 				ZVAL_NULL(retval);
17965 			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
17966 				retval = &EG(uninitialized_zval);
17967 			} else {
17968 				zend_error(E_WARNING, "Undefined %svariable $%s",
17969 					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
17970 				if (type == BP_VAR_RW && !EG(exception)) {
17971 					ZVAL_NULL(retval);
17972 				} else {
17973 					retval = &EG(uninitialized_zval);
17974 				}
17975 			}
17976 		}
17977 	}
17978 
17979 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
17980 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
17981 	}
17982 
17983 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
17984 		zend_tmp_string_release(tmp_name);
17985 	}
17986 
17987 	ZEND_ASSERT(retval != NULL);
17988 	if (type == BP_VAR_R || type == BP_VAR_IS) {
17989 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
17990 	} else {
17991 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
17992 	}
17993 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
17994 }
17995 
ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)17996 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17997 {
17998 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
17999 }
18000 
ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18001 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18002 {
18003 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18004 }
18005 
ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18006 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18007 {
18008 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18009 }
18010 
ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18011 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18012 {
18013 	int fetch_type =
18014 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
18015 			BP_VAR_W : BP_VAR_R;
18016 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18017 }
18018 
ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18019 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18020 {
18021 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18022 }
18023 
ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18024 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18025 {
18026 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
18027 }
18028 
18029 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18030 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18031 {
18032 	USE_OPLINE
18033 	zval *value, *arg;
18034 
18035 	if (IS_UNUSED == IS_CONST) {
18036 		SAVE_OPLINE();
18037 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
18038 		uint32_t arg_num;
18039 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
18040 		if (UNEXPECTED(!arg)) {
18041 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18042 			HANDLE_EXCEPTION();
18043 		}
18044 	} else {
18045 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
18046 	}
18047 
18048 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18049 	ZVAL_COPY_VALUE(arg, value);
18050 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
18051 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
18052 			Z_ADDREF_P(arg);
18053 		}
18054 	}
18055 	ZEND_VM_NEXT_OPCODE();
18056 }
18057 
ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18058 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18059 {
18060 	USE_OPLINE
18061 	zval *varname;
18062 	zend_string *name, *tmp_name;
18063 	HashTable *target_symbol_table;
18064 
18065 	SAVE_OPLINE();
18066 
18067 	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18068 
18069 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
18070 		name = Z_STR_P(varname);
18071 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
18072 		name = Z_STR_P(varname);
18073 		tmp_name = NULL;
18074 	} else {
18075 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
18076 			varname = ZVAL_UNDEFINED_OP1();
18077 		}
18078 		name = zval_try_get_tmp_string(varname, &tmp_name);
18079 		if (UNEXPECTED(!name)) {
18080 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18081 			HANDLE_EXCEPTION();
18082 		}
18083 	}
18084 
18085 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
18086 	zend_hash_del_ind(target_symbol_table, name);
18087 
18088 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18089 		zend_tmp_string_release(tmp_name);
18090 	}
18091 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18092 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18093 }
18094 
18095 /* 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)18096 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18097 {
18098 	USE_OPLINE
18099 	zval *value;
18100 	/* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
18101 	int result;
18102 	zval *varname;
18103 	zend_string *name, *tmp_name;
18104 	HashTable *target_symbol_table;
18105 
18106 	SAVE_OPLINE();
18107 	varname = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18108 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
18109 		name = Z_STR_P(varname);
18110 	} else {
18111 		name = zval_get_tmp_string(varname, &tmp_name);
18112 	}
18113 
18114 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
18115 	value = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST);
18116 
18117 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18118 		zend_tmp_string_release(tmp_name);
18119 	}
18120 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18121 
18122 	if (!value) {
18123 		result = (opline->extended_value & ZEND_ISEMPTY);
18124 	} else {
18125 		if (Z_TYPE_P(value) == IS_INDIRECT) {
18126 			value = Z_INDIRECT_P(value);
18127 		}
18128 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
18129 			if (Z_ISREF_P(value)) {
18130 				value = Z_REFVAL_P(value);
18131 			}
18132 			result = Z_TYPE_P(value) > IS_NULL;
18133 		} else {
18134 			result = !i_zend_is_true(value);
18135 		}
18136 	}
18137 
18138 	ZEND_VM_SMART_BRANCH(result, 1);
18139 }
18140 
18141 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18142 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18143 {
18144 	USE_OPLINE
18145 	zval *expr;
18146 	bool result;
18147 
18148 	SAVE_OPLINE();
18149 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18150 
18151 try_instanceof:
18152 	if (Z_TYPE_P(expr) == IS_OBJECT) {
18153 		zend_class_entry *ce;
18154 
18155 		if (IS_UNUSED == IS_CONST) {
18156 			ce = CACHED_PTR(opline->extended_value);
18157 			if (UNEXPECTED(ce == NULL)) {
18158 				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
18159 				if (EXPECTED(ce)) {
18160 					CACHE_PTR(opline->extended_value, ce);
18161 				}
18162 			}
18163 		} else if (IS_UNUSED == IS_UNUSED) {
18164 			ce = zend_fetch_class(NULL, opline->op2.num);
18165 			if (UNEXPECTED(ce == NULL)) {
18166 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18167 				ZVAL_UNDEF(EX_VAR(opline->result.var));
18168 				HANDLE_EXCEPTION();
18169 			}
18170 		} else {
18171 			ce = Z_CE_P(EX_VAR(opline->op2.var));
18172 		}
18173 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
18174 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
18175 		expr = Z_REFVAL_P(expr);
18176 		goto try_instanceof;
18177 	} else {
18178 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
18179 			ZVAL_UNDEFINED_OP1();
18180 		}
18181 		result = 0;
18182 	}
18183 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18184 	ZEND_VM_SMART_BRANCH(result, 1);
18185 }
18186 
ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18187 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18188 {
18189 	USE_OPLINE
18190 	zval *op1;
18191 	zend_long count;
18192 
18193 	SAVE_OPLINE();
18194 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18195 
18196 	while (1) {
18197 		if (Z_TYPE_P(op1) == IS_ARRAY) {
18198 			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
18199 			break;
18200 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
18201 			zend_object *zobj = Z_OBJ_P(op1);
18202 
18203 			/* first, we check if the handler is defined */
18204 			if (zobj->handlers->count_elements) {
18205 				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
18206 					break;
18207 				}
18208 				if (UNEXPECTED(EG(exception))) {
18209 					count = 0;
18210 					break;
18211 				}
18212 			}
18213 
18214 			/* if not and the object implements Countable we call its count() method */
18215 			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
18216 				zval retval;
18217 
18218 				zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
18219 				zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
18220 				count = zval_get_long(&retval);
18221 				zval_ptr_dtor(&retval);
18222 				break;
18223 			}
18224 
18225 			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
18226 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
18227 			op1 = Z_REFVAL_P(op1);
18228 			continue;
18229 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
18230 			ZVAL_UNDEFINED_OP1();
18231 		}
18232 		count = 0;
18233 		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1));
18234 		break;
18235 	}
18236 
18237 	ZVAL_LONG(EX_VAR(opline->result.var), count);
18238 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18239 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18240 }
18241 
ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18242 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18243 {
18244 	USE_OPLINE
18245 	zend_array *ht = Z_ARRVAL_P(_get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC));
18246 	ZVAL_LONG(EX_VAR(opline->result.var), zend_hash_num_elements(ht));
18247 	if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR) && !(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
18248 		SAVE_OPLINE();
18249 		zend_array_destroy(ht);
18250 		if (EG(exception)) {
18251 			HANDLE_EXCEPTION();
18252 		}
18253 	}
18254 	ZEND_VM_NEXT_OPCODE();
18255 }
18256 
ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18257 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18258 {
18259 	USE_OPLINE
18260 
18261 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
18262 		SAVE_OPLINE();
18263 		if (UNEXPECTED(!EX(func)->common.scope)) {
18264 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
18265 			ZVAL_UNDEF(EX_VAR(opline->result.var));
18266 			HANDLE_EXCEPTION();
18267 		} else {
18268 			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
18269 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
18270 			if (UNEXPECTED(EG(exception))) {
18271 				HANDLE_EXCEPTION();
18272 			}
18273 			ZEND_VM_NEXT_OPCODE();
18274 		}
18275 	} else {
18276 		zval *op1;
18277 
18278 		SAVE_OPLINE();
18279 		op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18280 		while (1) {
18281 			if (Z_TYPE_P(op1) == IS_OBJECT) {
18282 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
18283 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
18284 				op1 = Z_REFVAL_P(op1);
18285 				continue;
18286 			} else {
18287 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
18288 					ZVAL_UNDEFINED_OP1();
18289 				}
18290 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
18291 				ZVAL_UNDEF(EX_VAR(opline->result.var));
18292 			}
18293 			break;
18294 		}
18295 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18296 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18297 	}
18298 }
18299 
ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18300 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18301 {
18302 	USE_OPLINE
18303 	zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18304 	zval *result = EX_VAR(opline->result.var);
18305 	ZVAL_COPY(result, value);
18306 	ZEND_VM_NEXT_OPCODE();
18307 }
18308 
ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18309 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18310 {
18311 	USE_OPLINE
18312 	zval *op1, *op2;
18313 
18314 	SAVE_OPLINE();
18315 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18316 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
18317 	div_function(EX_VAR(opline->result.var), op1, op2);
18318 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18319 
18320 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18321 }
18322 
ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18323 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18324 {
18325 	USE_OPLINE
18326 	zval *op1, *op2;
18327 
18328 	SAVE_OPLINE();
18329 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18330 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
18331 	pow_function(EX_VAR(opline->result.var), op1, op2);
18332 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18333 
18334 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18335 }
18336 
ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18337 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18338 {
18339 	USE_OPLINE
18340 	zval *op1, *op2;
18341 
18342 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18343 	op2 = EX_VAR(opline->op2.var);
18344 
18345 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
18346 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
18347 		zend_string *op1_str = Z_STR_P(op1);
18348 		zend_string *op2_str = Z_STR_P(op2);
18349 		zend_string *str;
18350 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
18351 
18352 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
18353 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
18354 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
18355 			} else {
18356 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
18357 			}
18358 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
18359 				zend_string_release_ex(op1_str, 0);
18360 			}
18361 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
18362 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
18363 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
18364 			} else {
18365 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
18366 			}
18367 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18368 				zend_string_release_ex(op2_str, 0);
18369 			}
18370 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
18371 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
18372 			size_t len = ZSTR_LEN(op1_str);
18373 
18374 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
18375 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
18376 			}
18377 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
18378 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
18379 			GC_ADD_FLAGS(str, flags);
18380 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
18381 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18382 				zend_string_release_ex(op2_str, 0);
18383 			}
18384 		} else {
18385 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
18386 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
18387 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
18388 			GC_ADD_FLAGS(str, flags);
18389 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
18390 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
18391 				zend_string_release_ex(op1_str, 0);
18392 			}
18393 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18394 				zend_string_release_ex(op2_str, 0);
18395 			}
18396 		}
18397 		ZEND_VM_NEXT_OPCODE();
18398 	} else {
18399 		SAVE_OPLINE();
18400 
18401 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
18402 			op1 = ZVAL_UNDEFINED_OP1();
18403 		}
18404 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
18405 			op2 = ZVAL_UNDEFINED_OP2();
18406 		}
18407 		concat_function(EX_VAR(opline->result.var), op1, op2);
18408 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18409 
18410 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18411 	}
18412 }
18413 
ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18414 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18415 {
18416 	USE_OPLINE
18417 	zval *op1, *op2;
18418 
18419 	SAVE_OPLINE();
18420 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18421 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
18422 	compare_function(EX_VAR(opline->result.var), op1, op2);
18423 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18424 
18425 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18426 }
18427 
ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18428 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18429 {
18430 	USE_OPLINE
18431 	zval *container, *dim, *value;
18432 
18433 	SAVE_OPLINE();
18434 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18435 	dim = EX_VAR(opline->op2.var);
18436 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18437 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
18438 fetch_dim_r_array:
18439 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
18440 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
18441 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
18442 			container = Z_REFVAL_P(container);
18443 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
18444 				goto fetch_dim_r_array;
18445 			} else {
18446 				goto fetch_dim_r_slow;
18447 			}
18448 		} else {
18449 fetch_dim_r_slow:
18450 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
18451 				dim++;
18452 			}
18453 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
18454 		}
18455 	} else {
18456 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
18457 	}
18458 
18459 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18460 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18461 }
18462 
ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18463 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18464 {
18465 	USE_OPLINE
18466 	zval *container;
18467 
18468 	SAVE_OPLINE();
18469 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18470 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
18471 
18472 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18473 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18474 }
18475 
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18476 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18477 {
18478 	USE_OPLINE
18479 	zval *container;
18480 	void **cache_slot = NULL;
18481 
18482 	SAVE_OPLINE();
18483 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18484 
18485 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
18486 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
18487 		do {
18488 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
18489 				container = Z_REFVAL_P(container);
18490 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
18491 					break;
18492 				}
18493 			}
18494 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
18495 				ZVAL_UNDEFINED_OP1();
18496 			}
18497 			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18498 			ZVAL_NULL(EX_VAR(opline->result.var));
18499 			goto fetch_obj_r_finish;
18500 		} while (0);
18501 	}
18502 
18503 	/* here we are sure we are dealing with an object */
18504 	do {
18505 		zend_object *zobj = Z_OBJ_P(container);
18506 		zend_string *name, *tmp_name;
18507 		zval *retval;
18508 
18509 		if (IS_CV == IS_CONST) {
18510 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
18511 
18512 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
18513 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
18514 
18515 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
18516 					retval = OBJ_PROP(zobj, prop_offset);
18517 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
18518 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18519 							goto fetch_obj_r_copy;
18520 						} else {
18521 fetch_obj_r_fast_copy:
18522 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18523 							ZEND_VM_NEXT_OPCODE();
18524 						}
18525 					}
18526 				} else if (EXPECTED(zobj->properties != NULL)) {
18527 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18528 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
18529 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
18530 
18531 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
18532 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
18533 
18534 							if (EXPECTED(p->key == name) ||
18535 							    (EXPECTED(p->h == ZSTR_H(name)) &&
18536 							     EXPECTED(p->key != NULL) &&
18537 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
18538 								retval = &p->val;
18539 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18540 									goto fetch_obj_r_copy;
18541 								} else {
18542 									goto fetch_obj_r_fast_copy;
18543 								}
18544 							}
18545 						}
18546 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
18547 					}
18548 					retval = zend_hash_find_known_hash(zobj->properties, name);
18549 					if (EXPECTED(retval)) {
18550 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
18551 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
18552 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18553 							goto fetch_obj_r_copy;
18554 						} else {
18555 							goto fetch_obj_r_fast_copy;
18556 						}
18557 					}
18558 				}
18559 			}
18560 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18561 		} else {
18562 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
18563 			if (UNEXPECTED(!name)) {
18564 				ZVAL_UNDEF(EX_VAR(opline->result.var));
18565 				break;
18566 			}
18567 		}
18568 
18569 #if ZEND_DEBUG
18570 		/* For non-standard object handlers, verify a declared property type in debug builds.
18571 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
18572 		zend_property_info *prop_info = NULL;
18573 		if (zobj->handlers->read_property != zend_std_read_property) {
18574 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
18575 		}
18576 #endif
18577 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
18578 #if ZEND_DEBUG
18579 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
18580 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
18581 			ZVAL_OPT_DEREF(retval);
18582 			zend_verify_property_type(prop_info, retval, /* strict */ true);
18583 		}
18584 #endif
18585 
18586 		if (IS_CV != IS_CONST) {
18587 			zend_tmp_string_release(tmp_name);
18588 		}
18589 
18590 		if (retval != EX_VAR(opline->result.var)) {
18591 fetch_obj_r_copy:
18592 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18593 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
18594 			zend_unwrap_reference(retval);
18595 		}
18596 	} while (0);
18597 
18598 fetch_obj_r_finish:
18599 
18600 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18601 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18602 }
18603 
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18604 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18605 {
18606 	USE_OPLINE
18607 	zval *container;
18608 	void **cache_slot = NULL;
18609 
18610 	SAVE_OPLINE();
18611 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18612 
18613 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
18614 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
18615 		do {
18616 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
18617 				container = Z_REFVAL_P(container);
18618 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
18619 					break;
18620 				}
18621 			}
18622 			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
18623 				ZVAL_UNDEFINED_OP2();
18624 			}
18625 			ZVAL_NULL(EX_VAR(opline->result.var));
18626 			goto fetch_obj_is_finish;
18627 		} while (0);
18628 	}
18629 
18630 	/* here we are sure we are dealing with an object */
18631 	do {
18632 		zend_object *zobj = Z_OBJ_P(container);
18633 		zend_string *name, *tmp_name;
18634 		zval *retval;
18635 
18636 		if (IS_CV == IS_CONST) {
18637 			cache_slot = CACHE_ADDR(opline->extended_value);
18638 
18639 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
18640 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
18641 
18642 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
18643 					retval = OBJ_PROP(zobj, prop_offset);
18644 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
18645 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18646 							goto fetch_obj_is_copy;
18647 						} else {
18648 fetch_obj_is_fast_copy:
18649 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18650 							ZEND_VM_NEXT_OPCODE();
18651 						}
18652 					}
18653 				} else if (EXPECTED(zobj->properties != NULL)) {
18654 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18655 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
18656 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
18657 
18658 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
18659 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
18660 
18661 							if (EXPECTED(p->key == name) ||
18662 							    (EXPECTED(p->h == ZSTR_H(name)) &&
18663 							     EXPECTED(p->key != NULL) &&
18664 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
18665 								retval = &p->val;
18666 								if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18667 									goto fetch_obj_is_copy;
18668 								} else {
18669 									goto fetch_obj_is_fast_copy;
18670 								}
18671 							}
18672 						}
18673 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
18674 					}
18675 					retval = zend_hash_find_known_hash(zobj->properties, name);
18676 					if (EXPECTED(retval)) {
18677 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
18678 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
18679 						if (0 || ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) != 0) {
18680 							goto fetch_obj_is_copy;
18681 						} else {
18682 							goto fetch_obj_is_fast_copy;
18683 						}
18684 					}
18685 				}
18686 			}
18687 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
18688 		} else {
18689 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
18690 			if (UNEXPECTED(!name)) {
18691 				ZVAL_UNDEF(EX_VAR(opline->result.var));
18692 				break;
18693 			}
18694 		}
18695 
18696 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
18697 
18698 		if (IS_CV != IS_CONST) {
18699 			zend_tmp_string_release(tmp_name);
18700 		}
18701 
18702 		if (retval != EX_VAR(opline->result.var)) {
18703 fetch_obj_is_copy:
18704 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
18705 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
18706 			zend_unwrap_reference(retval);
18707 		}
18708 	} while (0);
18709 
18710 fetch_obj_is_finish:
18711 
18712 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18713 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18714 }
18715 
ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18716 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18717 {
18718 	USE_OPLINE
18719 	zval *op1, *op2;
18720 	zend_string *op1_str, *op2_str, *str;
18721 
18722 
18723 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18724 	op2 = EX_VAR(opline->op2.var);
18725 	if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
18726 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
18727 		zend_string *op1_str = Z_STR_P(op1);
18728 		zend_string *op2_str = Z_STR_P(op2);
18729 		zend_string *str;
18730 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
18731 
18732 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
18733 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
18734 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
18735 			} else {
18736 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
18737 			}
18738 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
18739 				zend_string_release_ex(op1_str, 0);
18740 			}
18741 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
18742 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
18743 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
18744 			} else {
18745 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
18746 			}
18747 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18748 				zend_string_release_ex(op2_str, 0);
18749 			}
18750 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV &&
18751 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
18752 			size_t len = ZSTR_LEN(op1_str);
18753 
18754 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
18755 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
18756 			GC_ADD_FLAGS(str, flags);
18757 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
18758 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18759 				zend_string_release_ex(op2_str, 0);
18760 			}
18761 		} else {
18762 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
18763 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
18764 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
18765 			GC_ADD_FLAGS(str, flags);
18766 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
18767 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
18768 				zend_string_release_ex(op1_str, 0);
18769 			}
18770 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
18771 				zend_string_release_ex(op2_str, 0);
18772 			}
18773 		}
18774 		ZEND_VM_NEXT_OPCODE();
18775 	}
18776 
18777 	SAVE_OPLINE();
18778 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
18779 		op1_str = Z_STR_P(op1);
18780 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
18781 		op1_str = zend_string_copy(Z_STR_P(op1));
18782 	} else {
18783 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
18784 			ZVAL_UNDEFINED_OP1();
18785 		}
18786 		op1_str = zval_get_string_func(op1);
18787 	}
18788 	if (IS_CV == IS_CONST) {
18789 		op2_str = Z_STR_P(op2);
18790 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
18791 		op2_str = zend_string_copy(Z_STR_P(op2));
18792 	} else {
18793 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
18794 			ZVAL_UNDEFINED_OP2();
18795 		}
18796 		op2_str = zval_get_string_func(op2);
18797 	}
18798 	do {
18799 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18800 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
18801 				if (IS_CV == IS_CONST) {
18802 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
18803 						GC_ADDREF(op2_str);
18804 					}
18805 				}
18806 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
18807 				zend_string_release_ex(op1_str, 0);
18808 				break;
18809 			}
18810 		}
18811 		if (IS_CV != IS_CONST) {
18812 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
18813 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
18814 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
18815 						GC_ADDREF(op1_str);
18816 					}
18817 				}
18818 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
18819 				zend_string_release_ex(op2_str, 0);
18820 				break;
18821 			}
18822 		}
18823 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
18824 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
18825 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
18826 
18827 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
18828 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
18829 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
18830 			zend_string_release_ex(op1_str, 0);
18831 		}
18832 		if (IS_CV != IS_CONST) {
18833 			zend_string_release_ex(op2_str, 0);
18834 		}
18835 	} while (0);
18836 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18837 
18838 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
18839 }
18840 
ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18841 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18842 {
18843 	USE_OPLINE
18844 	zval *function_name;
18845 	zval *object;
18846 	zend_function *fbc;
18847 	zend_class_entry *called_scope;
18848 	zend_object *obj;
18849 	zend_execute_data *call;
18850 	uint32_t call_info;
18851 
18852 	SAVE_OPLINE();
18853 
18854 	object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
18855 
18856 	if (IS_CV != IS_CONST) {
18857 		function_name = EX_VAR(opline->op2.var);
18858 	}
18859 
18860 	if (IS_CV != IS_CONST &&
18861 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
18862 		do {
18863 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
18864 				function_name = Z_REFVAL_P(function_name);
18865 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
18866 					break;
18867 				}
18868 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
18869 				ZVAL_UNDEFINED_OP2();
18870 				if (UNEXPECTED(EG(exception) != NULL)) {
18871 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18872 					HANDLE_EXCEPTION();
18873 				}
18874 			}
18875 			zend_throw_error(NULL, "Method name must be a string");
18876 
18877 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18878 			HANDLE_EXCEPTION();
18879 		} while (0);
18880 	}
18881 
18882 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
18883 		obj = Z_OBJ_P(object);
18884 	} else {
18885 		do {
18886 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
18887 				obj = Z_OBJ_P(object);
18888 			} else {
18889 				if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
18890 					zend_reference *ref = Z_REF_P(object);
18891 
18892 					object = &ref->val;
18893 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
18894 						obj = Z_OBJ_P(object);
18895 						if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
18896 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
18897 								efree_size(ref, sizeof(zend_reference));
18898 							} else {
18899 								Z_ADDREF_P(object);
18900 							}
18901 						}
18902 						break;
18903 					}
18904 				}
18905 				if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
18906 					object = ZVAL_UNDEFINED_OP1();
18907 					if (UNEXPECTED(EG(exception) != NULL)) {
18908 						if (IS_CV != IS_CONST) {
18909 
18910 						}
18911 						HANDLE_EXCEPTION();
18912 					}
18913 				}
18914 				if (IS_CV == IS_CONST) {
18915 					function_name = EX_VAR(opline->op2.var);
18916 				}
18917 				zend_invalid_method_call(object, function_name);
18918 
18919 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
18920 				HANDLE_EXCEPTION();
18921 			}
18922 		} while (0);
18923 	}
18924 
18925 	called_scope = obj->ce;
18926 
18927 	if (IS_CV == IS_CONST &&
18928 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
18929 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
18930 	} else {
18931 		zend_object *orig_obj = obj;
18932 
18933 		if (IS_CV == IS_CONST) {
18934 			function_name = EX_VAR(opline->op2.var);
18935 		}
18936 
18937 		/* First, locate the function. */
18938 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
18939 		if (UNEXPECTED(fbc == NULL)) {
18940 			if (EXPECTED(!EG(exception))) {
18941 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
18942 			}
18943 
18944 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
18945 				zend_objects_store_del(orig_obj);
18946 			}
18947 			HANDLE_EXCEPTION();
18948 		}
18949 		if (IS_CV == IS_CONST &&
18950 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
18951 		    EXPECTED(obj == orig_obj)) {
18952 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
18953 		}
18954 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
18955 			GC_ADDREF(obj); /* For $this pointer */
18956 			if (GC_DELREF(orig_obj) == 0) {
18957 				zend_objects_store_del(orig_obj);
18958 			}
18959 		}
18960 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
18961 			init_func_run_time_cache(&fbc->op_array);
18962 		}
18963 	}
18964 
18965 	if (IS_CV != IS_CONST) {
18966 
18967 	}
18968 
18969 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
18970 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
18971 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
18972 			zend_objects_store_del(obj);
18973 			if (UNEXPECTED(EG(exception))) {
18974 				HANDLE_EXCEPTION();
18975 			}
18976 		}
18977 		/* call static method */
18978 		obj = (zend_object*)called_scope;
18979 		call_info = ZEND_CALL_NESTED_FUNCTION;
18980 	} else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) {
18981 		if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
18982 			GC_ADDREF(obj); /* For $this pointer */
18983 		}
18984 		/* CV may be changed indirectly (e.g. when it's a reference) */
18985 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
18986 	}
18987 
18988 	call = zend_vm_stack_push_call_frame(call_info,
18989 		fbc, opline->extended_value, obj);
18990 	call->prev_execute_data = EX(call);
18991 	EX(call) = call;
18992 
18993 	ZEND_VM_NEXT_OPCODE();
18994 }
18995 
ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)18996 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18997 {
18998 	USE_OPLINE
18999 	zval *op1, *op2;
19000 	double d1, d2;
19001 
19002 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
19003 	op2 = EX_VAR(opline->op2.var);
19004 	if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
19005 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
19006 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
19007 case_true:
19008 				ZEND_VM_SMART_BRANCH_TRUE();
19009 			} else {
19010 case_false:
19011 				ZEND_VM_SMART_BRANCH_FALSE();
19012 			}
19013 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
19014 			d1 = (double)Z_LVAL_P(op1);
19015 			d2 = Z_DVAL_P(op2);
19016 			goto case_double;
19017 		}
19018 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
19019 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
19020 			d1 = Z_DVAL_P(op1);
19021 			d2 = Z_DVAL_P(op2);
19022 case_double:
19023 			if (d1 == d2) {
19024 				goto case_true;
19025 			} else {
19026 				goto case_false;
19027 			}
19028 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
19029 			d1 = Z_DVAL_P(op1);
19030 			d2 = (double)Z_LVAL_P(op2);
19031 			goto case_double;
19032 		}
19033 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
19034 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
19035 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
19036 
19037 			if (result) {
19038 				goto case_true;
19039 			} else {
19040 				goto case_false;
19041 			}
19042 		}
19043 	}
19044 	ZEND_VM_TAIL_CALL(zend_case_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
19045 }
19046 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19047 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19048 {
19049 	USE_OPLINE
19050 	zval *container;
19051 	bool result;
19052 	zend_ulong hval;
19053 	zval *offset;
19054 
19055 	SAVE_OPLINE();
19056 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
19057 	offset = EX_VAR(opline->op2.var);
19058 
19059 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
19060 		HashTable *ht;
19061 		zval *value;
19062 		zend_string *str;
19063 
19064 isset_dim_obj_array:
19065 		ht = Z_ARRVAL_P(container);
19066 isset_again:
19067 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
19068 			str = Z_STR_P(offset);
19069 			if (IS_CV != IS_CONST) {
19070 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
19071 					goto num_index_prop;
19072 				}
19073 			}
19074 			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
19075 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
19076 			hval = Z_LVAL_P(offset);
19077 num_index_prop:
19078 			value = zend_hash_index_find(ht, hval);
19079 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
19080 			offset = Z_REFVAL_P(offset);
19081 			goto isset_again;
19082 		} else {
19083 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
19084 			if (UNEXPECTED(EG(exception))) {
19085 				result = 0;
19086 				goto isset_dim_obj_exit;
19087 			}
19088 		}
19089 
19090 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
19091 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
19092 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
19093 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
19094 
19095 			if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
19096 				/* avoid exception check */
19097 
19098 				ZEND_VM_SMART_BRANCH(result, 0);
19099 			}
19100 		} else {
19101 			result = (value == NULL || !i_zend_is_true(value));
19102 		}
19103 		goto isset_dim_obj_exit;
19104 	} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
19105 		container = Z_REFVAL_P(container);
19106 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
19107 			goto isset_dim_obj_array;
19108 		}
19109 	}
19110 
19111 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
19112 		offset++;
19113 	}
19114 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
19115 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
19116 	} else {
19117 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
19118 	}
19119 
19120 isset_dim_obj_exit:
19121 
19122 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19123 	ZEND_VM_SMART_BRANCH(result, 1);
19124 }
19125 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19126 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19127 {
19128 	USE_OPLINE
19129 	zval *container;
19130 	int result;
19131 	zval *offset;
19132 	zend_string *name, *tmp_name;
19133 
19134 	SAVE_OPLINE();
19135 	container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
19136 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
19137 
19138 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST ||
19139 	    ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
19140 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
19141 			container = Z_REFVAL_P(container);
19142 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
19143 				result = (opline->extended_value & ZEND_ISEMPTY);
19144 				goto isset_object_finish;
19145 			}
19146 		} else {
19147 			result = (opline->extended_value & ZEND_ISEMPTY);
19148 			goto isset_object_finish;
19149 		}
19150 	}
19151 
19152 	if (IS_CV == IS_CONST) {
19153 		name = Z_STR_P(offset);
19154 	} else {
19155 		name = zval_try_get_tmp_string(offset, &tmp_name);
19156 		if (UNEXPECTED(!name)) {
19157 			result = 0;
19158 			goto isset_object_finish;
19159 		}
19160 	}
19161 
19162 	result =
19163 		(opline->extended_value & ZEND_ISEMPTY) ^
19164 		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));
19165 
19166 	if (IS_CV != IS_CONST) {
19167 		zend_tmp_string_release(tmp_name);
19168 	}
19169 
19170 isset_object_finish:
19171 
19172 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19173 	ZEND_VM_SMART_BRANCH(result, 1);
19174 }
19175 
ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19176 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19177 {
19178 	USE_OPLINE
19179 
19180 	zval *key, *subject;
19181 	HashTable *ht;
19182 	bool result;
19183 
19184 	SAVE_OPLINE();
19185 
19186 	key = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
19187 	subject = EX_VAR(opline->op2.var);
19188 
19189 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
19190 array_key_exists_array:
19191 		ht = Z_ARRVAL_P(subject);
19192 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
19193 	} else {
19194 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
19195 			subject = Z_REFVAL_P(subject);
19196 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
19197 				goto array_key_exists_array;
19198 			}
19199 		}
19200 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
19201 		result = 0;
19202 	}
19203 
19204 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19205 	ZEND_VM_SMART_BRANCH(result, 1);
19206 }
19207 
19208 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19209 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19210 {
19211 	USE_OPLINE
19212 	zval *retval_ptr;
19213 	zval *return_value;
19214 
19215 	retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19216 	return_value = EX(return_value);
19217 
19218 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
19219 		SAVE_OPLINE();
19220 		retval_ptr = ZVAL_UNDEFINED_OP1();
19221 		if (return_value) {
19222 			ZVAL_NULL(return_value);
19223 		}
19224 	} else if (!return_value) {
19225 		if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
19226 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
19227 				SAVE_OPLINE();
19228 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
19229 			}
19230 		}
19231 	} else {
19232 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19233 			ZVAL_COPY_VALUE(return_value, retval_ptr);
19234 			if (IS_TMP_VAR == IS_CONST) {
19235 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
19236 					Z_ADDREF_P(return_value);
19237 				}
19238 			}
19239 		} else if (IS_TMP_VAR == IS_CV) {
19240 			do {
19241 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
19242 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
19243 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
19244 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
19245 							ZVAL_COPY_VALUE(return_value, retval_ptr);
19246 							if (GC_MAY_LEAK(ref)) {
19247 								SAVE_OPLINE();
19248 								gc_possible_root(ref);
19249 							}
19250 							ZVAL_NULL(retval_ptr);
19251 							break;
19252 						} else {
19253 							Z_ADDREF_P(retval_ptr);
19254 						}
19255 					} else {
19256 						retval_ptr = Z_REFVAL_P(retval_ptr);
19257 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
19258 							Z_ADDREF_P(retval_ptr);
19259 						}
19260 					}
19261 				}
19262 				ZVAL_COPY_VALUE(return_value, retval_ptr);
19263 			} while (0);
19264 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
19265 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
19266 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
19267 
19268 				retval_ptr = Z_REFVAL_P(retval_ptr);
19269 				ZVAL_COPY_VALUE(return_value, retval_ptr);
19270 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19271 					efree_size(ref, sizeof(zend_reference));
19272 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
19273 					Z_ADDREF_P(retval_ptr);
19274 				}
19275 			} else {
19276 				ZVAL_COPY_VALUE(return_value, retval_ptr);
19277 			}
19278 		}
19279 	}
19280 
19281 
19282 
19283 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19284 }
19285 
ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19286 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19287 {
19288 	USE_OPLINE
19289 	zval *retval_ptr;
19290 	zval *return_value;
19291 
19292 	SAVE_OPLINE();
19293 
19294 	return_value = EX(return_value);
19295 
19296 	do {
19297 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) ||
19298 		    (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
19299 			/* Not supposed to happen, but we'll allow it */
19300 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
19301 
19302 			retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19303 			if (!return_value) {
19304 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19305 			} else {
19306 				if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
19307 					ZVAL_COPY_VALUE(return_value, retval_ptr);
19308 					break;
19309 				}
19310 
19311 				ZVAL_NEW_REF(return_value, retval_ptr);
19312 				if (IS_TMP_VAR == IS_CONST) {
19313 					Z_TRY_ADDREF_P(retval_ptr);
19314 				}
19315 			}
19316 			break;
19317 		}
19318 
19319 		retval_ptr = zend_get_bad_ptr();
19320 
19321 		if (IS_TMP_VAR == IS_VAR) {
19322 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
19323 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
19324 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
19325 				if (return_value) {
19326 					ZVAL_NEW_REF(return_value, retval_ptr);
19327 				} else {
19328 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19329 				}
19330 				break;
19331 			}
19332 		}
19333 
19334 		if (return_value) {
19335 			if (Z_ISREF_P(retval_ptr)) {
19336 				Z_ADDREF_P(retval_ptr);
19337 			} else {
19338 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
19339 			}
19340 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
19341 		}
19342 
19343 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19344 	} while (0);
19345 
19346 
19347 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19348 }
19349 
ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19350 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19351 {
19352 	USE_OPLINE
19353 	zval *retval;
19354 
19355 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
19356 
19357 	SAVE_OPLINE();
19358 	retval = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19359 
19360 	/* Copy return value into generator->retval */
19361 	if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19362 		ZVAL_COPY_VALUE(&generator->retval, retval);
19363 		if (IS_TMP_VAR == IS_CONST) {
19364 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
19365 				Z_ADDREF(generator->retval);
19366 			}
19367 		}
19368 	} else if (IS_TMP_VAR == IS_CV) {
19369 		ZVAL_COPY_DEREF(&generator->retval, retval);
19370 	} else /* if (IS_TMP_VAR == IS_VAR) */ {
19371 		if (UNEXPECTED(Z_ISREF_P(retval))) {
19372 			zend_refcounted *ref = Z_COUNTED_P(retval);
19373 
19374 			retval = Z_REFVAL_P(retval);
19375 			ZVAL_COPY_VALUE(&generator->retval, retval);
19376 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19377 				efree_size(ref, sizeof(zend_reference));
19378 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
19379 				Z_ADDREF_P(retval);
19380 			}
19381 		} else {
19382 			ZVAL_COPY_VALUE(&generator->retval, retval);
19383 		}
19384 	}
19385 
19386 	EG(current_execute_data) = EX(prev_execute_data);
19387 
19388 	/* Close the generator to free up resources */
19389 	zend_generator_close(generator, 1);
19390 
19391 	/* Pass execution back to handling code */
19392 	ZEND_VM_RETURN();
19393 }
19394 
ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19395 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19396 {
19397 	USE_OPLINE
19398 	zval *arg, *param;
19399 
19400 	SAVE_OPLINE();
19401 
19402 	arg = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19403 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
19404 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
19405 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
19406 		Z_TRY_ADDREF_P(arg);
19407 		ZVAL_NEW_REF(param, arg);
19408 	} else {
19409 		ZVAL_COPY(param, arg);
19410 	}
19411 
19412 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19413 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19414 }
19415 
ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19416 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19417 {
19418 	USE_OPLINE
19419 	zval *expr;
19420 	zval *result = EX_VAR(opline->result.var);
19421 	HashTable *ht;
19422 
19423 	SAVE_OPLINE();
19424 	expr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19425 
19426 	switch (opline->extended_value) {
19427 		case IS_LONG:
19428 			ZVAL_LONG(result, zval_get_long(expr));
19429 			break;
19430 		case IS_DOUBLE:
19431 			ZVAL_DOUBLE(result, zval_get_double(expr));
19432 			break;
19433 		case IS_STRING:
19434 			ZVAL_STR(result, zval_get_string(expr));
19435 			break;
19436 		default:
19437 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
19438 			if (IS_TMP_VAR & (IS_VAR|IS_CV)) {
19439 				ZVAL_DEREF(expr);
19440 			}
19441 			/* If value is already of correct type, return it directly */
19442 			if (Z_TYPE_P(expr) == opline->extended_value) {
19443 				ZVAL_COPY_VALUE(result, expr);
19444 				if (IS_TMP_VAR == IS_CONST) {
19445 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
19446 				} else if (IS_TMP_VAR != IS_TMP_VAR) {
19447 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
19448 				}
19449 
19450 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19451 			}
19452 
19453 			if (opline->extended_value == IS_ARRAY) {
19454 				if (IS_TMP_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
19455 					if (Z_TYPE_P(expr) != IS_NULL) {
19456 						ZVAL_ARR(result, zend_new_array(1));
19457 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
19458 						if (IS_TMP_VAR == IS_CONST) {
19459 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
19460 						} else {
19461 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
19462 						}
19463 					} else {
19464 						ZVAL_EMPTY_ARRAY(result);
19465 					}
19466 				} else if (Z_OBJ_P(expr)->properties == NULL
19467 				 && Z_OBJ_HT_P(expr)->get_properties_for == NULL
19468 				 && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
19469 					/* Optimized version without rebuilding properties HashTable */
19470 					ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
19471 				} else {
19472 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
19473 					if (obj_ht) {
19474 						/* fast copy */
19475 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
19476 							(Z_OBJCE_P(expr)->default_properties_count ||
19477 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
19478 							 GC_IS_RECURSIVE(obj_ht))));
19479 						zend_release_properties(obj_ht);
19480 					} else {
19481 						ZVAL_EMPTY_ARRAY(result);
19482 					}
19483 				}
19484 			} else {
19485 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
19486 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
19487 				if (Z_TYPE_P(expr) == IS_ARRAY) {
19488 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
19489 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
19490 						/* TODO: try not to duplicate immutable arrays as well ??? */
19491 						ht = zend_array_dup(ht);
19492 					}
19493 					Z_OBJ_P(result)->properties = ht;
19494 				} else if (Z_TYPE_P(expr) != IS_NULL) {
19495 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
19496 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
19497 					if (IS_TMP_VAR == IS_CONST) {
19498 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
19499 					} else {
19500 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
19501 					}
19502 				}
19503 			}
19504 	}
19505 
19506 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19507 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19508 }
19509 
ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19510 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19511 {
19512 	USE_OPLINE
19513 	zval *array_ptr, *result;
19514 
19515 	SAVE_OPLINE();
19516 
19517 	array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19518 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
19519 		result = EX_VAR(opline->result.var);
19520 		ZVAL_COPY_VALUE(result, array_ptr);
19521 		if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
19522 			Z_ADDREF_P(array_ptr);
19523 		}
19524 		Z_FE_POS_P(result) = 0;
19525 
19526 		ZEND_VM_NEXT_OPCODE();
19527 	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
19528 		zend_object *zobj = Z_OBJ_P(array_ptr);
19529 		if (!zobj->ce->get_iterator) {
19530 			HashTable *properties = zobj->properties;
19531 			if (properties) {
19532 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
19533 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
19534 						GC_DELREF(properties);
19535 					}
19536 					properties = zobj->properties = zend_array_dup(properties);
19537 				}
19538 			} else {
19539 				properties = zobj->handlers->get_properties(zobj);
19540 			}
19541 
19542 			result = EX_VAR(opline->result.var);
19543 			ZVAL_COPY_VALUE(result, array_ptr);
19544 			if (IS_TMP_VAR != IS_TMP_VAR) {
19545 				Z_ADDREF_P(array_ptr);
19546 			}
19547 
19548 			if (zend_hash_num_elements(properties) == 0) {
19549 				Z_FE_ITER_P(result) = (uint32_t) -1;
19550 
19551 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
19552 			}
19553 
19554 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
19555 
19556 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19557 		} else {
19558 			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
19559 
19560 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19561 			if (UNEXPECTED(EG(exception))) {
19562 				HANDLE_EXCEPTION();
19563 			} else if (is_empty) {
19564 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19565 			} else {
19566 				ZEND_VM_NEXT_OPCODE();
19567 			}
19568 		}
19569 	} else {
19570 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
19571 		ZVAL_UNDEF(EX_VAR(opline->result.var));
19572 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
19573 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19574 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
19575 	}
19576 }
19577 
ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19578 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19579 {
19580 	USE_OPLINE
19581 	zval *array_ptr, *array_ref;
19582 
19583 	SAVE_OPLINE();
19584 
19585 	if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
19586 		array_ref = array_ptr = zend_get_bad_ptr();
19587 		if (Z_ISREF_P(array_ref)) {
19588 			array_ptr = Z_REFVAL_P(array_ref);
19589 		}
19590 	} else {
19591 		array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19592 	}
19593 
19594 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
19595 		if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
19596 			if (array_ptr == array_ref) {
19597 				ZVAL_NEW_REF(array_ref, array_ref);
19598 				array_ptr = Z_REFVAL_P(array_ref);
19599 			}
19600 			Z_ADDREF_P(array_ref);
19601 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
19602 		} else {
19603 			array_ref = EX_VAR(opline->result.var);
19604 			ZVAL_NEW_REF(array_ref, array_ptr);
19605 			array_ptr = Z_REFVAL_P(array_ref);
19606 		}
19607 		if (IS_TMP_VAR == IS_CONST) {
19608 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
19609 		} else {
19610 			SEPARATE_ARRAY(array_ptr);
19611 		}
19612 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
19613 
19614 		ZEND_VM_NEXT_OPCODE();
19615 	} else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
19616 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
19617 			HashTable *properties;
19618 			if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
19619 				if (array_ptr == array_ref) {
19620 					ZVAL_NEW_REF(array_ref, array_ref);
19621 					array_ptr = Z_REFVAL_P(array_ref);
19622 				}
19623 				Z_ADDREF_P(array_ref);
19624 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
19625 			} else {
19626 				array_ptr = EX_VAR(opline->result.var);
19627 				ZVAL_COPY_VALUE(array_ptr, array_ref);
19628 			}
19629 			if (Z_OBJ_P(array_ptr)->properties
19630 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
19631 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
19632 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
19633 				}
19634 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
19635 			}
19636 
19637 			properties = Z_OBJPROP_P(array_ptr);
19638 			if (zend_hash_num_elements(properties) == 0) {
19639 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
19640 
19641 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
19642 			}
19643 
19644 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
19645 
19646 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19647 		} else {
19648 			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
19649 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19650 			if (UNEXPECTED(EG(exception))) {
19651 				HANDLE_EXCEPTION();
19652 			} else if (is_empty) {
19653 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19654 			} else {
19655 				ZEND_VM_NEXT_OPCODE();
19656 			}
19657 		}
19658 	} else {
19659 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
19660 		ZVAL_UNDEF(EX_VAR(opline->result.var));
19661 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
19662 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19663 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
19664 	}
19665 }
19666 
ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19667 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19668 {
19669 	USE_OPLINE
19670 
19671 	if (E_HAS_ONLY_FATAL_ERRORS(EG(error_reporting))
19672 			&& !E_HAS_ONLY_FATAL_ERRORS(Z_LVAL_P(EX_VAR(opline->op1.var)))) {
19673 		EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var));
19674 	}
19675 	ZEND_VM_NEXT_OPCODE();
19676 }
19677 
ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19678 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19679 {
19680 	USE_OPLINE
19681 	zval *value;
19682 	zend_reference *ref = NULL;
19683 	bool ret;
19684 
19685 	SAVE_OPLINE();
19686 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19687 
19688 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
19689 		if (IS_TMP_VAR == IS_VAR) {
19690 			ref = Z_REF_P(value);
19691 		}
19692 		value = Z_REFVAL_P(value);
19693 	}
19694 
19695 	ret = i_zend_is_true(value);
19696 
19697 	if (UNEXPECTED(EG(exception))) {
19698 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19699 		ZVAL_UNDEF(EX_VAR(opline->result.var));
19700 		HANDLE_EXCEPTION();
19701 	}
19702 
19703 	if (ret) {
19704 		zval *result = EX_VAR(opline->result.var);
19705 
19706 		ZVAL_COPY_VALUE(result, value);
19707 		if (IS_TMP_VAR == IS_CONST) {
19708 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
19709 		} else if (IS_TMP_VAR == IS_CV) {
19710 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
19711 		} else if (IS_TMP_VAR == IS_VAR && ref) {
19712 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19713 				efree_size(ref, sizeof(zend_reference));
19714 			} else if (Z_OPT_REFCOUNTED_P(result)) {
19715 				Z_ADDREF_P(result);
19716 			}
19717 		}
19718 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19719 	}
19720 
19721 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19722 	ZEND_VM_NEXT_OPCODE();
19723 }
19724 
ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19725 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19726 {
19727 	USE_OPLINE
19728 	zval *value;
19729 	zend_reference *ref = NULL;
19730 
19731 	SAVE_OPLINE();
19732 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19733 
19734 	if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
19735 		if (IS_TMP_VAR & IS_VAR) {
19736 			ref = Z_REF_P(value);
19737 		}
19738 		value = Z_REFVAL_P(value);
19739 	}
19740 
19741 	if (Z_TYPE_P(value) > IS_NULL) {
19742 		zval *result = EX_VAR(opline->result.var);
19743 		ZVAL_COPY_VALUE(result, value);
19744 		if (IS_TMP_VAR == IS_CONST) {
19745 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
19746 		} else if (IS_TMP_VAR == IS_CV) {
19747 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
19748 		} else if ((IS_TMP_VAR & IS_VAR) && ref) {
19749 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19750 				efree_size(ref, sizeof(zend_reference));
19751 			} else if (Z_OPT_REFCOUNTED_P(result)) {
19752 				Z_ADDREF_P(result);
19753 			}
19754 		}
19755 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19756 	}
19757 
19758 	if ((IS_TMP_VAR & IS_VAR) && ref) {
19759 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
19760 			efree_size(ref, sizeof(zend_reference));
19761 		}
19762 	}
19763 	ZEND_VM_NEXT_OPCODE();
19764 }
19765 
ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19766 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19767 {
19768 	USE_OPLINE
19769 	zval *val, *result;
19770 
19771 	val = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19772 
19773 	if (Z_TYPE_P(val) > IS_NULL) {
19774 		do {
19775 			if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
19776 				val = Z_REFVAL_P(val);
19777 				if (Z_TYPE_P(val) <= IS_NULL) {
19778 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19779 					break;
19780 				}
19781 			}
19782 			ZEND_VM_NEXT_OPCODE();
19783 		} while (0);
19784 	}
19785 
19786 	result = EX_VAR(opline->result.var);
19787 	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
19788 	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
19789 		ZVAL_NULL(result);
19790 		if (IS_TMP_VAR == IS_CV
19791 			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
19792 			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
19793 		) {
19794 			SAVE_OPLINE();
19795 			ZVAL_UNDEFINED_OP1();
19796 			if (UNEXPECTED(EG(exception) != NULL)) {
19797 				HANDLE_EXCEPTION();
19798 			}
19799 		}
19800 	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
19801 		ZVAL_FALSE(result);
19802 	} else {
19803 		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
19804 		ZVAL_TRUE(result);
19805 	}
19806 
19807 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
19808 }
19809 
ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19810 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19811 {
19812 	USE_OPLINE
19813 	zval *value;
19814 	zval *result = EX_VAR(opline->result.var);
19815 
19816 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19817 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
19818 		SAVE_OPLINE();
19819 		ZVAL_UNDEFINED_OP1();
19820 		ZVAL_NULL(result);
19821 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19822 	}
19823 
19824 	if (IS_TMP_VAR == IS_CV) {
19825 		ZVAL_COPY_DEREF(result, value);
19826 	} else if (IS_TMP_VAR == IS_VAR) {
19827 		if (UNEXPECTED(Z_ISREF_P(value))) {
19828 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
19829 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
19830 				efree_size(Z_REF_P(value), sizeof(zend_reference));
19831 			} else if (Z_OPT_REFCOUNTED_P(result)) {
19832 				Z_ADDREF_P(result);
19833 			}
19834 		} else {
19835 			ZVAL_COPY_VALUE(result, value);
19836 		}
19837 	} else {
19838 		ZVAL_COPY_VALUE(result, value);
19839 		if (IS_TMP_VAR == IS_CONST) {
19840 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
19841 				Z_ADDREF_P(result);
19842 			}
19843 		}
19844 	}
19845 	ZEND_VM_NEXT_OPCODE();
19846 }
19847 
ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19848 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19849 {
19850 	USE_OPLINE
19851 	zval *op1, *op2;
19852 	bool result;
19853 
19854 	SAVE_OPLINE();
19855 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19856 	op2 = RT_CONSTANT(opline, opline->op2);
19857 	result = fast_is_identical_function(op1, op2);
19858 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19859 
19860 	ZEND_VM_SMART_BRANCH(result, 1);
19861 }
19862 
ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19863 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19864 {
19865 	USE_OPLINE
19866 	zval *op1, *op2;
19867 	bool result;
19868 
19869 	SAVE_OPLINE();
19870 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19871 	op2 = RT_CONSTANT(opline, opline->op2);
19872 	result = fast_is_identical_function(op1, op2);
19873 
19874 	ZEND_VM_SMART_BRANCH(result, 1);
19875 }
19876 
ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19877 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19878 {
19879 	USE_OPLINE
19880 	zval *op1, *op2;
19881 	bool result;
19882 
19883 	SAVE_OPLINE();
19884 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
19885 	op2 = RT_CONSTANT(opline, opline->op2);
19886 	result = fast_is_not_identical_function(op1, op2);
19887 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
19888 
19889 	ZEND_VM_SMART_BRANCH(result, 1);
19890 }
19891 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19892 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19893 {
19894 #if 0
19895 	USE_OPLINE
19896 #endif
19897 
19898 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
19899 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19900 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19901 		}
19902 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19903 	} else {
19904 		if (IS_CONST == IS_UNUSED) {
19905 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19906 		}
19907 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19908 	}
19909 }
19910 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19911 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19912 {
19913 #if 0
19914 	USE_OPLINE
19915 #endif
19916 
19917 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
19918 		/* Behave like FETCH_OBJ_W */
19919 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
19920 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19921 		}
19922 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19923 	} else {
19924 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
19925 	}
19926 }
19927 
ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19928 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19929 {
19930 	USE_OPLINE
19931 	zend_string **rope;
19932 	zval *var;
19933 
19934 	/* op1 and result are the same */
19935 	rope = (zend_string**)EX_VAR(opline->op1.var);
19936 	if (IS_CONST == IS_CONST) {
19937 		var = RT_CONSTANT(opline, opline->op2);
19938 		rope[opline->extended_value] = Z_STR_P(var);
19939 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
19940 			Z_ADDREF_P(var);
19941 		}
19942 	} else {
19943 		var = RT_CONSTANT(opline, opline->op2);
19944 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
19945 			if (IS_CONST == IS_CV) {
19946 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
19947 			} else {
19948 				rope[opline->extended_value] = Z_STR_P(var);
19949 			}
19950 		} else {
19951 			SAVE_OPLINE();
19952 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
19953 				ZVAL_UNDEFINED_OP2();
19954 			}
19955 			rope[opline->extended_value] = zval_get_string_func(var);
19956 
19957 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
19958 		}
19959 	}
19960 	ZEND_VM_NEXT_OPCODE();
19961 }
19962 
ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)19963 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19964 {
19965 	USE_OPLINE
19966 	zend_string **rope;
19967 	zval *var, *ret;
19968 	uint32_t i;
19969 
19970 	rope = (zend_string**)EX_VAR(opline->op1.var);
19971 	if (IS_CONST == IS_CONST) {
19972 		var = RT_CONSTANT(opline, opline->op2);
19973 		rope[opline->extended_value] = Z_STR_P(var);
19974 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
19975 			Z_ADDREF_P(var);
19976 		}
19977 	} else {
19978 		var = RT_CONSTANT(opline, opline->op2);
19979 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
19980 			if (IS_CONST == IS_CV) {
19981 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
19982 			} else {
19983 				rope[opline->extended_value] = Z_STR_P(var);
19984 			}
19985 		} else {
19986 			SAVE_OPLINE();
19987 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
19988 				ZVAL_UNDEFINED_OP2();
19989 			}
19990 			rope[opline->extended_value] = zval_get_string_func(var);
19991 
19992 			if (UNEXPECTED(EG(exception))) {
19993 				for (i = 0; i <= opline->extended_value; i++) {
19994 					zend_string_release_ex(rope[i], 0);
19995 				}
19996 				ZVAL_UNDEF(EX_VAR(opline->result.var));
19997 				HANDLE_EXCEPTION();
19998 			}
19999 		}
20000 	}
20001 
20002 	size_t len = 0;
20003 	uint32_t flags = ZSTR_COPYABLE_CONCAT_PROPERTIES;
20004 	for (i = 0; i <= opline->extended_value; i++) {
20005 		flags &= ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(rope[i]);
20006 		len += ZSTR_LEN(rope[i]);
20007 	}
20008 	ret = EX_VAR(opline->result.var);
20009 	ZVAL_STR(ret, zend_string_alloc(len, 0));
20010 	GC_ADD_FLAGS(Z_STR_P(ret), flags);
20011 
20012 	char *target = Z_STRVAL_P(ret);
20013 	for (i = 0; i <= opline->extended_value; i++) {
20014 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
20015 		target += ZSTR_LEN(rope[i]);
20016 		zend_string_release_ex(rope[i], 0);
20017 	}
20018 	*target = '\0';
20019 
20020 	ZEND_VM_NEXT_OPCODE();
20021 }
20022 
ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20023 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20024 {
20025 	USE_OPLINE
20026 	zval *value, *arg;
20027 	uint32_t arg_num;
20028 
20029 	if (IS_CONST == IS_CONST) {
20030 		SAVE_OPLINE();
20031 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
20032 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
20033 		if (UNEXPECTED(!arg)) {
20034 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20035 			HANDLE_EXCEPTION();
20036 		}
20037 	} else {
20038 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
20039 		arg_num = opline->op2.num;
20040 	}
20041 
20042 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
20043 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20044 			goto send_val_by_ref;
20045 		}
20046 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20047 send_val_by_ref:
20048 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20049 	}
20050 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20051 	ZVAL_COPY_VALUE(arg, value);
20052 	if (IS_TMP_VAR == IS_CONST) {
20053 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
20054 			Z_ADDREF_P(arg);
20055 		}
20056 	}
20057 	ZEND_VM_NEXT_OPCODE();
20058 }
20059 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20060 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20061 {
20062 	USE_OPLINE
20063 	zval *expr_ptr, new_expr;
20064 
20065 	SAVE_OPLINE();
20066 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
20067 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
20068 		expr_ptr = zend_get_bad_ptr();
20069 		if (Z_ISREF_P(expr_ptr)) {
20070 			Z_ADDREF_P(expr_ptr);
20071 		} else {
20072 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
20073 		}
20074 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20075 	} else {
20076 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20077 		if (IS_TMP_VAR == IS_TMP_VAR) {
20078 			/* pass */
20079 		} else if (IS_TMP_VAR == IS_CONST) {
20080 			Z_TRY_ADDREF_P(expr_ptr);
20081 		} else if (IS_TMP_VAR == IS_CV) {
20082 			ZVAL_DEREF(expr_ptr);
20083 			Z_TRY_ADDREF_P(expr_ptr);
20084 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
20085 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
20086 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
20087 
20088 				expr_ptr = Z_REFVAL_P(expr_ptr);
20089 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20090 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
20091 					expr_ptr = &new_expr;
20092 					efree_size(ref, sizeof(zend_reference));
20093 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
20094 					Z_ADDREF_P(expr_ptr);
20095 				}
20096 			}
20097 		}
20098 	}
20099 
20100 	if (IS_CONST != IS_UNUSED) {
20101 		zval *offset = RT_CONSTANT(opline, opline->op2);
20102 		zend_string *str;
20103 		zend_ulong hval;
20104 
20105 add_again:
20106 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
20107 			str = Z_STR_P(offset);
20108 			if (IS_CONST != IS_CONST) {
20109 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
20110 					goto num_index;
20111 				}
20112 			}
20113 str_index:
20114 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
20115 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
20116 			hval = Z_LVAL_P(offset);
20117 num_index:
20118 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
20119 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
20120 			offset = Z_REFVAL_P(offset);
20121 			goto add_again;
20122 		} else if (Z_TYPE_P(offset) == IS_NULL) {
20123 			str = ZSTR_EMPTY_ALLOC();
20124 			goto str_index;
20125 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
20126 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
20127 			goto num_index;
20128 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
20129 			hval = 0;
20130 			goto num_index;
20131 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
20132 			hval = 1;
20133 			goto num_index;
20134 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
20135 			zend_use_resource_as_offset(offset);
20136 			hval = Z_RES_HANDLE_P(offset);
20137 			goto num_index;
20138 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
20139 			ZVAL_UNDEFINED_OP2();
20140 			str = ZSTR_EMPTY_ALLOC();
20141 			goto str_index;
20142 		} else {
20143 			zend_illegal_array_offset_access(offset);
20144 			zval_ptr_dtor_nogc(expr_ptr);
20145 		}
20146 
20147 	} else {
20148 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
20149 			zend_cannot_add_element();
20150 			zval_ptr_dtor_nogc(expr_ptr);
20151 		}
20152 	}
20153 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20154 }
20155 
ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20156 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20157 {
20158 	zval *array;
20159 	uint32_t size;
20160 	USE_OPLINE
20161 
20162 	array = EX_VAR(opline->result.var);
20163 	if (IS_TMP_VAR != IS_UNUSED) {
20164 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
20165 		ZVAL_ARR(array, zend_new_array(size));
20166 		/* Explicitly initialize array as not-packed if flag is set */
20167 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
20168 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
20169 		}
20170 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20171 	} else {
20172 		ZVAL_ARR(array, zend_new_array(0));
20173 		ZEND_VM_NEXT_OPCODE();
20174 	}
20175 }
20176 
ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20177 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20178 {
20179 	USE_OPLINE
20180 
20181 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
20182 
20183 	SAVE_OPLINE();
20184 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
20185 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20186 	}
20187 
20188 	/* Destroy the previously yielded value */
20189 	zval_ptr_dtor(&generator->value);
20190 
20191 	/* Destroy the previously yielded key */
20192 	zval_ptr_dtor(&generator->key);
20193 
20194 	/* Set the new yielded value */
20195 	if (IS_TMP_VAR != IS_UNUSED) {
20196 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20197 			/* Constants and temporary variables aren't yieldable by reference,
20198 			 * but we still allow them with a notice. */
20199 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
20200 				zval *value;
20201 
20202 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20203 
20204 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20205 				ZVAL_COPY_VALUE(&generator->value, value);
20206 				if (IS_TMP_VAR == IS_CONST) {
20207 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20208 						Z_ADDREF(generator->value);
20209 					}
20210 				}
20211 			} else {
20212 				zval *value_ptr = zend_get_bad_ptr();
20213 
20214 				/* If a function call result is yielded and the function did
20215 				 * not return by reference we throw a notice. */
20216 				do {
20217 					if (IS_TMP_VAR == IS_VAR) {
20218 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
20219 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
20220 						 && !Z_ISREF_P(value_ptr)) {
20221 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20222 							ZVAL_COPY(&generator->value, value_ptr);
20223 							break;
20224 						}
20225 					}
20226 					if (Z_ISREF_P(value_ptr)) {
20227 						Z_ADDREF_P(value_ptr);
20228 					} else {
20229 						ZVAL_MAKE_REF_EX(value_ptr, 2);
20230 					}
20231 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
20232 				} while (0);
20233 
20234 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20235 			}
20236 		} else {
20237 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20238 
20239 			/* Consts, temporary variables and references need copying */
20240 			if (IS_TMP_VAR == IS_CONST) {
20241 				ZVAL_COPY_VALUE(&generator->value, value);
20242 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20243 					Z_ADDREF(generator->value);
20244 				}
20245 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
20246 				ZVAL_COPY_VALUE(&generator->value, value);
20247 			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
20248 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
20249 
20250 			} else {
20251 				ZVAL_COPY_VALUE(&generator->value, value);
20252 				if (IS_TMP_VAR == IS_CV) {
20253 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
20254 				}
20255 			}
20256 		}
20257 	} else {
20258 		/* If no value was specified yield null */
20259 		ZVAL_NULL(&generator->value);
20260 	}
20261 
20262 	/* Set the new yielded key */
20263 	if (IS_CONST != IS_UNUSED) {
20264 		zval *key = RT_CONSTANT(opline, opline->op2);
20265 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
20266 			key = Z_REFVAL_P(key);
20267 		}
20268 		ZVAL_COPY(&generator->key, key);
20269 
20270 		if (Z_TYPE(generator->key) == IS_LONG
20271 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
20272 		) {
20273 			generator->largest_used_integer_key = Z_LVAL(generator->key);
20274 		}
20275 	} else {
20276 		/* If no key was specified we use auto-increment keys */
20277 		generator->largest_used_integer_key++;
20278 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
20279 	}
20280 
20281 	if (RETURN_VALUE_USED(opline)) {
20282 		/* If the return value of yield is used set the send
20283 		 * target and initialize it to NULL */
20284 		generator->send_target = EX_VAR(opline->result.var);
20285 		ZVAL_NULL(generator->send_target);
20286 	} else {
20287 		generator->send_target = NULL;
20288 	}
20289 
20290 	/* We increment to the next op, so we are at the correct position when the
20291 	 * generator is resumed. */
20292 	ZEND_VM_INC_OPCODE();
20293 
20294 	/* The GOTO VM uses a local opline variable. We need to set the opline
20295 	 * variable in execute_data so we don't resume at an old position. */
20296 	SAVE_OPLINE();
20297 
20298 	ZEND_VM_RETURN();
20299 }
20300 
ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20301 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20302 {
20303 	USE_OPLINE
20304 	zval *op1;
20305 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
20306 	zval *result;
20307 
20308 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20309 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
20310 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_TMP_VAR == IS_CONST);
20311 		if (IS_TMP_VAR & (IS_TMP_VAR|IS_VAR)) {
20312 			zval_ptr_dtor_str(op1);
20313 		}
20314 		ZEND_VM_SMART_BRANCH(result, 0);
20315 	}
20316 
20317 	if (opline->extended_value) {
20318 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
20319 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
20320 			ZEND_VM_SMART_BRANCH(result, 0);
20321 		}
20322 		SAVE_OPLINE();
20323 		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
20324 			op1 = Z_REFVAL_P(op1);
20325 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
20326 				result = zend_hash_find(ht, Z_STR_P(op1));
20327 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20328 				ZEND_VM_SMART_BRANCH(result, 0);
20329 			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
20330 				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
20331 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20332 				ZEND_VM_SMART_BRANCH(result, 0);
20333 			}
20334 		} else if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
20335 			ZVAL_UNDEFINED_OP1();
20336 		}
20337 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
20338 		if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
20339 			SAVE_OPLINE();
20340 			ZVAL_UNDEFINED_OP1();
20341 			if (UNEXPECTED(EG(exception) != NULL)) {
20342 				HANDLE_EXCEPTION();
20343 			}
20344 		}
20345 		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
20346 		ZEND_VM_SMART_BRANCH(result, 0);
20347 	} else {
20348 		zend_string *key;
20349 		zval key_tmp;
20350 
20351 		if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
20352 			op1 = Z_REFVAL_P(op1);
20353 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
20354 				result = zend_hash_find(ht, Z_STR_P(op1));
20355 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20356 				ZEND_VM_SMART_BRANCH(result, 0);
20357 			}
20358 		}
20359 
20360 		SAVE_OPLINE();
20361 		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
20362 			ZVAL_STR(&key_tmp, key);
20363 			if (zend_compare(op1, &key_tmp) == 0) {
20364 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20365 				ZEND_VM_SMART_BRANCH(1, 1);
20366 			}
20367 		} ZEND_HASH_FOREACH_END();
20368 	}
20369 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20370 	ZEND_VM_SMART_BRANCH(0, 1);
20371 }
20372 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20373 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20374 {
20375 #if 0
20376 	USE_OPLINE
20377 #endif
20378 
20379 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20380 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20381 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20382 		}
20383 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20384 	} else {
20385 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
20386 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20387 		}
20388 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20389 	}
20390 }
20391 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20392 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20393 {
20394 #if 0
20395 	USE_OPLINE
20396 #endif
20397 
20398 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20399 		/* Behave like FETCH_OBJ_W */
20400 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20401 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20402 		}
20403 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20404 	} else {
20405 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20406 	}
20407 }
20408 
ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20409 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20410 {
20411 	USE_OPLINE
20412 	zend_string **rope;
20413 	zval *var;
20414 
20415 	/* op1 and result are the same */
20416 	rope = (zend_string**)EX_VAR(opline->op1.var);
20417 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
20418 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20419 		rope[opline->extended_value] = Z_STR_P(var);
20420 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
20421 			Z_ADDREF_P(var);
20422 		}
20423 	} else {
20424 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20425 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
20426 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
20427 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
20428 			} else {
20429 				rope[opline->extended_value] = Z_STR_P(var);
20430 			}
20431 		} else {
20432 			SAVE_OPLINE();
20433 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
20434 				ZVAL_UNDEFINED_OP2();
20435 			}
20436 			rope[opline->extended_value] = zval_get_string_func(var);
20437 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20438 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20439 		}
20440 	}
20441 	ZEND_VM_NEXT_OPCODE();
20442 }
20443 
ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20444 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20445 {
20446 	USE_OPLINE
20447 	zend_string **rope;
20448 	zval *var, *ret;
20449 	uint32_t i;
20450 
20451 	rope = (zend_string**)EX_VAR(opline->op1.var);
20452 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
20453 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20454 		rope[opline->extended_value] = Z_STR_P(var);
20455 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
20456 			Z_ADDREF_P(var);
20457 		}
20458 	} else {
20459 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20460 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
20461 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
20462 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
20463 			} else {
20464 				rope[opline->extended_value] = Z_STR_P(var);
20465 			}
20466 		} else {
20467 			SAVE_OPLINE();
20468 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
20469 				ZVAL_UNDEFINED_OP2();
20470 			}
20471 			rope[opline->extended_value] = zval_get_string_func(var);
20472 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20473 			if (UNEXPECTED(EG(exception))) {
20474 				for (i = 0; i <= opline->extended_value; i++) {
20475 					zend_string_release_ex(rope[i], 0);
20476 				}
20477 				ZVAL_UNDEF(EX_VAR(opline->result.var));
20478 				HANDLE_EXCEPTION();
20479 			}
20480 		}
20481 	}
20482 
20483 	size_t len = 0;
20484 	uint32_t flags = ZSTR_COPYABLE_CONCAT_PROPERTIES;
20485 	for (i = 0; i <= opline->extended_value; i++) {
20486 		flags &= ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(rope[i]);
20487 		len += ZSTR_LEN(rope[i]);
20488 	}
20489 	ret = EX_VAR(opline->result.var);
20490 	ZVAL_STR(ret, zend_string_alloc(len, 0));
20491 	GC_ADD_FLAGS(Z_STR_P(ret), flags);
20492 
20493 	char *target = Z_STRVAL_P(ret);
20494 	for (i = 0; i <= opline->extended_value; i++) {
20495 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
20496 		target += ZSTR_LEN(rope[i]);
20497 		zend_string_release_ex(rope[i], 0);
20498 	}
20499 	*target = '\0';
20500 
20501 	ZEND_VM_NEXT_OPCODE();
20502 }
20503 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20504 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20505 {
20506 	USE_OPLINE
20507 	zval *expr_ptr, new_expr;
20508 
20509 	SAVE_OPLINE();
20510 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
20511 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
20512 		expr_ptr = zend_get_bad_ptr();
20513 		if (Z_ISREF_P(expr_ptr)) {
20514 			Z_ADDREF_P(expr_ptr);
20515 		} else {
20516 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
20517 		}
20518 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20519 	} else {
20520 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20521 		if (IS_TMP_VAR == IS_TMP_VAR) {
20522 			/* pass */
20523 		} else if (IS_TMP_VAR == IS_CONST) {
20524 			Z_TRY_ADDREF_P(expr_ptr);
20525 		} else if (IS_TMP_VAR == IS_CV) {
20526 			ZVAL_DEREF(expr_ptr);
20527 			Z_TRY_ADDREF_P(expr_ptr);
20528 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
20529 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
20530 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
20531 
20532 				expr_ptr = Z_REFVAL_P(expr_ptr);
20533 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20534 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
20535 					expr_ptr = &new_expr;
20536 					efree_size(ref, sizeof(zend_reference));
20537 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
20538 					Z_ADDREF_P(expr_ptr);
20539 				}
20540 			}
20541 		}
20542 	}
20543 
20544 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
20545 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20546 		zend_string *str;
20547 		zend_ulong hval;
20548 
20549 add_again:
20550 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
20551 			str = Z_STR_P(offset);
20552 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
20553 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
20554 					goto num_index;
20555 				}
20556 			}
20557 str_index:
20558 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
20559 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
20560 			hval = Z_LVAL_P(offset);
20561 num_index:
20562 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
20563 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
20564 			offset = Z_REFVAL_P(offset);
20565 			goto add_again;
20566 		} else if (Z_TYPE_P(offset) == IS_NULL) {
20567 			str = ZSTR_EMPTY_ALLOC();
20568 			goto str_index;
20569 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
20570 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
20571 			goto num_index;
20572 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
20573 			hval = 0;
20574 			goto num_index;
20575 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
20576 			hval = 1;
20577 			goto num_index;
20578 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
20579 			zend_use_resource_as_offset(offset);
20580 			hval = Z_RES_HANDLE_P(offset);
20581 			goto num_index;
20582 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
20583 			ZVAL_UNDEFINED_OP2();
20584 			str = ZSTR_EMPTY_ALLOC();
20585 			goto str_index;
20586 		} else {
20587 			zend_illegal_array_offset_access(offset);
20588 			zval_ptr_dtor_nogc(expr_ptr);
20589 		}
20590 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20591 	} else {
20592 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
20593 			zend_cannot_add_element();
20594 			zval_ptr_dtor_nogc(expr_ptr);
20595 		}
20596 	}
20597 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
20598 }
20599 
ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20600 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20601 {
20602 	zval *array;
20603 	uint32_t size;
20604 	USE_OPLINE
20605 
20606 	array = EX_VAR(opline->result.var);
20607 	if (IS_TMP_VAR != IS_UNUSED) {
20608 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
20609 		ZVAL_ARR(array, zend_new_array(size));
20610 		/* Explicitly initialize array as not-packed if flag is set */
20611 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
20612 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
20613 		}
20614 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20615 	} else {
20616 		ZVAL_ARR(array, zend_new_array(0));
20617 		ZEND_VM_NEXT_OPCODE();
20618 	}
20619 }
20620 
ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20621 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20622 {
20623 	USE_OPLINE
20624 
20625 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
20626 
20627 	SAVE_OPLINE();
20628 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
20629 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20630 	}
20631 
20632 	/* Destroy the previously yielded value */
20633 	zval_ptr_dtor(&generator->value);
20634 
20635 	/* Destroy the previously yielded key */
20636 	zval_ptr_dtor(&generator->key);
20637 
20638 	/* Set the new yielded value */
20639 	if (IS_TMP_VAR != IS_UNUSED) {
20640 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20641 			/* Constants and temporary variables aren't yieldable by reference,
20642 			 * but we still allow them with a notice. */
20643 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
20644 				zval *value;
20645 
20646 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20647 
20648 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20649 				ZVAL_COPY_VALUE(&generator->value, value);
20650 				if (IS_TMP_VAR == IS_CONST) {
20651 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20652 						Z_ADDREF(generator->value);
20653 					}
20654 				}
20655 			} else {
20656 				zval *value_ptr = zend_get_bad_ptr();
20657 
20658 				/* If a function call result is yielded and the function did
20659 				 * not return by reference we throw a notice. */
20660 				do {
20661 					if (IS_TMP_VAR == IS_VAR) {
20662 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
20663 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
20664 						 && !Z_ISREF_P(value_ptr)) {
20665 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
20666 							ZVAL_COPY(&generator->value, value_ptr);
20667 							break;
20668 						}
20669 					}
20670 					if (Z_ISREF_P(value_ptr)) {
20671 						Z_ADDREF_P(value_ptr);
20672 					} else {
20673 						ZVAL_MAKE_REF_EX(value_ptr, 2);
20674 					}
20675 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
20676 				} while (0);
20677 
20678 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20679 			}
20680 		} else {
20681 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20682 
20683 			/* Consts, temporary variables and references need copying */
20684 			if (IS_TMP_VAR == IS_CONST) {
20685 				ZVAL_COPY_VALUE(&generator->value, value);
20686 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
20687 					Z_ADDREF(generator->value);
20688 				}
20689 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
20690 				ZVAL_COPY_VALUE(&generator->value, value);
20691 			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
20692 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
20693 
20694 			} else {
20695 				ZVAL_COPY_VALUE(&generator->value, value);
20696 				if (IS_TMP_VAR == IS_CV) {
20697 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
20698 				}
20699 			}
20700 		}
20701 	} else {
20702 		/* If no value was specified yield null */
20703 		ZVAL_NULL(&generator->value);
20704 	}
20705 
20706 	/* Set the new yielded key */
20707 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
20708 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
20709 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
20710 			key = Z_REFVAL_P(key);
20711 		}
20712 		ZVAL_COPY(&generator->key, key);
20713 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20714 
20715 		if (Z_TYPE(generator->key) == IS_LONG
20716 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
20717 		) {
20718 			generator->largest_used_integer_key = Z_LVAL(generator->key);
20719 		}
20720 	} else {
20721 		/* If no key was specified we use auto-increment keys */
20722 		generator->largest_used_integer_key++;
20723 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
20724 	}
20725 
20726 	if (RETURN_VALUE_USED(opline)) {
20727 		/* If the return value of yield is used set the send
20728 		 * target and initialize it to NULL */
20729 		generator->send_target = EX_VAR(opline->result.var);
20730 		ZVAL_NULL(generator->send_target);
20731 	} else {
20732 		generator->send_target = NULL;
20733 	}
20734 
20735 	/* We increment to the next op, so we are at the correct position when the
20736 	 * generator is resumed. */
20737 	ZEND_VM_INC_OPCODE();
20738 
20739 	/* The GOTO VM uses a local opline variable. We need to set the opline
20740 	 * variable in execute_data so we don't resume at an old position. */
20741 	SAVE_OPLINE();
20742 
20743 	ZEND_VM_RETURN();
20744 }
20745 
ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20746 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20747 {
20748 	USE_OPLINE
20749 	zval *op1, *op2;
20750 	bool result;
20751 
20752 	SAVE_OPLINE();
20753 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20754 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
20755 	result = fast_is_identical_function(op1, op2);
20756 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20757 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20758 	ZEND_VM_SMART_BRANCH(result, 1);
20759 }
20760 
ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20761 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20762 {
20763 	USE_OPLINE
20764 	zval *op1, *op2;
20765 	bool result;
20766 
20767 	SAVE_OPLINE();
20768 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20769 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
20770 	result = fast_is_identical_function(op1, op2);
20771 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20772 	ZEND_VM_SMART_BRANCH(result, 1);
20773 }
20774 
ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20775 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20776 {
20777 	USE_OPLINE
20778 	zval *op1, *op2;
20779 	bool result;
20780 
20781 	SAVE_OPLINE();
20782 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20783 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
20784 	result = fast_is_not_identical_function(op1, op2);
20785 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20786 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20787 	ZEND_VM_SMART_BRANCH(result, 1);
20788 }
20789 
ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20790 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20791 {
20792 	USE_OPLINE
20793 	zval *op1, *op2;
20794 	bool result;
20795 
20796 	SAVE_OPLINE();
20797 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20798 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
20799 	result = fast_is_identical_function(op1, op2);
20800 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
20801 	ZEND_VM_SMART_BRANCH(result, 1);
20802 }
20803 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20804 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20805 {
20806 #if 0
20807 	USE_OPLINE
20808 #endif
20809 
20810 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
20811 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
20812 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20813 		}
20814 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20815 	} else {
20816 		if (IS_UNUSED == IS_UNUSED) {
20817 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20818 		}
20819 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
20820 	}
20821 }
20822 
ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20823 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20824 {
20825 	if (IS_TMP_VAR == IS_UNUSED) {
20826 		SAVE_OPLINE();
20827 		zend_verify_missing_return_type(EX(func));
20828 		HANDLE_EXCEPTION();
20829 	} else {
20830 /* prevents "undefined variable opline" errors */
20831 #if 0 || (IS_TMP_VAR != IS_UNUSED)
20832 		USE_OPLINE
20833 		zval *retval_ref, *retval_ptr;
20834 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
20835 		retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20836 
20837 		if (IS_TMP_VAR == IS_CONST) {
20838 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
20839 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
20840 		} else if (IS_TMP_VAR == IS_VAR) {
20841 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
20842 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
20843 			}
20844 			ZVAL_DEREF(retval_ptr);
20845 		} else if (IS_TMP_VAR == IS_CV) {
20846 			ZVAL_DEREF(retval_ptr);
20847 		}
20848 
20849 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
20850 			ZEND_VM_NEXT_OPCODE();
20851 		}
20852 
20853 		if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
20854 			SAVE_OPLINE();
20855 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
20856 			if (UNEXPECTED(EG(exception))) {
20857 				HANDLE_EXCEPTION();
20858 			}
20859 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
20860 				ZEND_VM_NEXT_OPCODE();
20861 			}
20862 		}
20863 
20864 		zend_reference *ref = NULL;
20865 		void *cache_slot = CACHE_ADDR(opline->op2.num);
20866 		if (UNEXPECTED(retval_ref != retval_ptr)) {
20867 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
20868 				ref = Z_REF_P(retval_ref);
20869 			} else {
20870 				/* A cast might happen - unwrap the reference if this is a by-value return */
20871 				if (Z_REFCOUNT_P(retval_ref) == 1) {
20872 					ZVAL_UNREF(retval_ref);
20873 				} else {
20874 					Z_DELREF_P(retval_ref);
20875 					ZVAL_COPY(retval_ref, retval_ptr);
20876 				}
20877 				retval_ptr = retval_ref;
20878 			}
20879 		}
20880 
20881 		SAVE_OPLINE();
20882 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
20883 			zend_verify_return_error(EX(func), retval_ptr);
20884 			HANDLE_EXCEPTION();
20885 		}
20886 		ZEND_VM_NEXT_OPCODE();
20887 #endif
20888 	}
20889 }
20890 
ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20891 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20892 {
20893 	USE_OPLINE
20894 	zval *value, *arg;
20895 	uint32_t arg_num;
20896 
20897 	if (IS_UNUSED == IS_CONST) {
20898 		SAVE_OPLINE();
20899 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
20900 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
20901 		if (UNEXPECTED(!arg)) {
20902 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20903 			HANDLE_EXCEPTION();
20904 		}
20905 	} else {
20906 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
20907 		arg_num = opline->op2.num;
20908 	}
20909 
20910 	if (EXPECTED(0)) {
20911 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20912 			goto send_val_by_ref;
20913 		}
20914 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20915 send_val_by_ref:
20916 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20917 	}
20918 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20919 	ZVAL_COPY_VALUE(arg, value);
20920 	if (IS_TMP_VAR == IS_CONST) {
20921 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
20922 			Z_ADDREF_P(arg);
20923 		}
20924 	}
20925 	ZEND_VM_NEXT_OPCODE();
20926 }
20927 
ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20928 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20929 {
20930 	USE_OPLINE
20931 	zval *value, *arg;
20932 	uint32_t arg_num;
20933 
20934 	if (IS_UNUSED == IS_CONST) {
20935 		SAVE_OPLINE();
20936 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
20937 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
20938 		if (UNEXPECTED(!arg)) {
20939 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20940 			HANDLE_EXCEPTION();
20941 		}
20942 	} else {
20943 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
20944 		arg_num = opline->op2.num;
20945 	}
20946 
20947 	if (EXPECTED(1)) {
20948 		if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20949 			goto send_val_by_ref;
20950 		}
20951 	} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
20952 send_val_by_ref:
20953 		ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(arg_num, arg ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
20954 	}
20955 	value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20956 	ZVAL_COPY_VALUE(arg, value);
20957 	if (IS_TMP_VAR == IS_CONST) {
20958 		if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
20959 			Z_ADDREF_P(arg);
20960 		}
20961 	}
20962 	ZEND_VM_NEXT_OPCODE();
20963 }
20964 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)20965 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20966 {
20967 	USE_OPLINE
20968 	zval *expr_ptr, new_expr;
20969 
20970 	SAVE_OPLINE();
20971 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
20972 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
20973 		expr_ptr = zend_get_bad_ptr();
20974 		if (Z_ISREF_P(expr_ptr)) {
20975 			Z_ADDREF_P(expr_ptr);
20976 		} else {
20977 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
20978 		}
20979 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
20980 	} else {
20981 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
20982 		if (IS_TMP_VAR == IS_TMP_VAR) {
20983 			/* pass */
20984 		} else if (IS_TMP_VAR == IS_CONST) {
20985 			Z_TRY_ADDREF_P(expr_ptr);
20986 		} else if (IS_TMP_VAR == IS_CV) {
20987 			ZVAL_DEREF(expr_ptr);
20988 			Z_TRY_ADDREF_P(expr_ptr);
20989 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
20990 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
20991 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
20992 
20993 				expr_ptr = Z_REFVAL_P(expr_ptr);
20994 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
20995 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
20996 					expr_ptr = &new_expr;
20997 					efree_size(ref, sizeof(zend_reference));
20998 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
20999 					Z_ADDREF_P(expr_ptr);
21000 				}
21001 			}
21002 		}
21003 	}
21004 
21005 	if (IS_UNUSED != IS_UNUSED) {
21006 		zval *offset = NULL;
21007 		zend_string *str;
21008 		zend_ulong hval;
21009 
21010 add_again:
21011 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
21012 			str = Z_STR_P(offset);
21013 			if (IS_UNUSED != IS_CONST) {
21014 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
21015 					goto num_index;
21016 				}
21017 			}
21018 str_index:
21019 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
21020 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
21021 			hval = Z_LVAL_P(offset);
21022 num_index:
21023 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
21024 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
21025 			offset = Z_REFVAL_P(offset);
21026 			goto add_again;
21027 		} else if (Z_TYPE_P(offset) == IS_NULL) {
21028 			str = ZSTR_EMPTY_ALLOC();
21029 			goto str_index;
21030 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
21031 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
21032 			goto num_index;
21033 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
21034 			hval = 0;
21035 			goto num_index;
21036 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
21037 			hval = 1;
21038 			goto num_index;
21039 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
21040 			zend_use_resource_as_offset(offset);
21041 			hval = Z_RES_HANDLE_P(offset);
21042 			goto num_index;
21043 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
21044 			ZVAL_UNDEFINED_OP2();
21045 			str = ZSTR_EMPTY_ALLOC();
21046 			goto str_index;
21047 		} else {
21048 			zend_illegal_array_offset_access(offset);
21049 			zval_ptr_dtor_nogc(expr_ptr);
21050 		}
21051 
21052 	} else {
21053 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
21054 			zend_cannot_add_element();
21055 			zval_ptr_dtor_nogc(expr_ptr);
21056 		}
21057 	}
21058 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21059 }
21060 
ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21061 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21062 {
21063 	zval *array;
21064 	uint32_t size;
21065 	USE_OPLINE
21066 
21067 	array = EX_VAR(opline->result.var);
21068 	if (IS_TMP_VAR != IS_UNUSED) {
21069 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
21070 		ZVAL_ARR(array, zend_new_array(size));
21071 		/* Explicitly initialize array as not-packed if flag is set */
21072 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
21073 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
21074 		}
21075 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21076 	} else {
21077 		ZVAL_ARR(array, zend_new_array(0));
21078 		ZEND_VM_NEXT_OPCODE();
21079 	}
21080 }
21081 
ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21082 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21083 {
21084 	USE_OPLINE
21085 
21086 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
21087 
21088 	SAVE_OPLINE();
21089 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
21090 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21091 	}
21092 
21093 	/* Destroy the previously yielded value */
21094 	zval_ptr_dtor(&generator->value);
21095 
21096 	/* Destroy the previously yielded key */
21097 	zval_ptr_dtor(&generator->key);
21098 
21099 	/* Set the new yielded value */
21100 	if (IS_TMP_VAR != IS_UNUSED) {
21101 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
21102 			/* Constants and temporary variables aren't yieldable by reference,
21103 			 * but we still allow them with a notice. */
21104 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
21105 				zval *value;
21106 
21107 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
21108 
21109 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21110 				ZVAL_COPY_VALUE(&generator->value, value);
21111 				if (IS_TMP_VAR == IS_CONST) {
21112 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
21113 						Z_ADDREF(generator->value);
21114 					}
21115 				}
21116 			} else {
21117 				zval *value_ptr = zend_get_bad_ptr();
21118 
21119 				/* If a function call result is yielded and the function did
21120 				 * not return by reference we throw a notice. */
21121 				do {
21122 					if (IS_TMP_VAR == IS_VAR) {
21123 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
21124 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
21125 						 && !Z_ISREF_P(value_ptr)) {
21126 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
21127 							ZVAL_COPY(&generator->value, value_ptr);
21128 							break;
21129 						}
21130 					}
21131 					if (Z_ISREF_P(value_ptr)) {
21132 						Z_ADDREF_P(value_ptr);
21133 					} else {
21134 						ZVAL_MAKE_REF_EX(value_ptr, 2);
21135 					}
21136 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
21137 				} while (0);
21138 
21139 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21140 			}
21141 		} else {
21142 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21143 
21144 			/* Consts, temporary variables and references need copying */
21145 			if (IS_TMP_VAR == IS_CONST) {
21146 				ZVAL_COPY_VALUE(&generator->value, value);
21147 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
21148 					Z_ADDREF(generator->value);
21149 				}
21150 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
21151 				ZVAL_COPY_VALUE(&generator->value, value);
21152 			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
21153 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
21154 
21155 			} else {
21156 				ZVAL_COPY_VALUE(&generator->value, value);
21157 				if (IS_TMP_VAR == IS_CV) {
21158 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
21159 				}
21160 			}
21161 		}
21162 	} else {
21163 		/* If no value was specified yield null */
21164 		ZVAL_NULL(&generator->value);
21165 	}
21166 
21167 	/* Set the new yielded key */
21168 	if (IS_UNUSED != IS_UNUSED) {
21169 		zval *key = NULL;
21170 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
21171 			key = Z_REFVAL_P(key);
21172 		}
21173 		ZVAL_COPY(&generator->key, key);
21174 
21175 		if (Z_TYPE(generator->key) == IS_LONG
21176 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
21177 		) {
21178 			generator->largest_used_integer_key = Z_LVAL(generator->key);
21179 		}
21180 	} else {
21181 		/* If no key was specified we use auto-increment keys */
21182 		generator->largest_used_integer_key++;
21183 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
21184 	}
21185 
21186 	if (RETURN_VALUE_USED(opline)) {
21187 		/* If the return value of yield is used set the send
21188 		 * target and initialize it to NULL */
21189 		generator->send_target = EX_VAR(opline->result.var);
21190 		ZVAL_NULL(generator->send_target);
21191 	} else {
21192 		generator->send_target = NULL;
21193 	}
21194 
21195 	/* We increment to the next op, so we are at the correct position when the
21196 	 * generator is resumed. */
21197 	ZEND_VM_INC_OPCODE();
21198 
21199 	/* The GOTO VM uses a local opline variable. We need to set the opline
21200 	 * variable in execute_data so we don't resume at an old position. */
21201 	SAVE_OPLINE();
21202 
21203 	ZEND_VM_RETURN();
21204 }
21205 
ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21206 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21207 {
21208 	USE_OPLINE
21209 	zval *op1;
21210 	zend_string *type;
21211 
21212 	SAVE_OPLINE();
21213 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21214 	type = zend_zval_get_legacy_type(op1);
21215 	if (EXPECTED(type)) {
21216 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
21217 	} else {
21218 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
21219 	}
21220 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21221 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21222 }
21223 
ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21224 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21225 {
21226 	USE_OPLINE
21227 	zval *op1, *op2;
21228 	bool result;
21229 
21230 	SAVE_OPLINE();
21231 	op1 = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21232 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
21233 	result = fast_is_identical_function(op1, op2);
21234 
21235 	ZEND_VM_SMART_BRANCH(result, 1);
21236 }
21237 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21238 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21239 {
21240 #if 0
21241 	USE_OPLINE
21242 #endif
21243 
21244 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
21245 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
21246 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21247 		}
21248 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21249 	} else {
21250 		if (IS_CV == IS_UNUSED) {
21251 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21252 		}
21253 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21254 	}
21255 }
21256 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21257 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21258 {
21259 #if 0
21260 	USE_OPLINE
21261 #endif
21262 
21263 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
21264 		/* Behave like FETCH_OBJ_W */
21265 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
21266 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21267 		}
21268 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21269 	} else {
21270 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21271 	}
21272 }
21273 
ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21274 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21275 {
21276 	USE_OPLINE
21277 	zend_string **rope;
21278 	zval *var;
21279 
21280 	/* op1 and result are the same */
21281 	rope = (zend_string**)EX_VAR(opline->op1.var);
21282 	if (IS_CV == IS_CONST) {
21283 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
21284 		rope[opline->extended_value] = Z_STR_P(var);
21285 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
21286 			Z_ADDREF_P(var);
21287 		}
21288 	} else {
21289 		var = EX_VAR(opline->op2.var);
21290 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
21291 			if (IS_CV == IS_CV) {
21292 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
21293 			} else {
21294 				rope[opline->extended_value] = Z_STR_P(var);
21295 			}
21296 		} else {
21297 			SAVE_OPLINE();
21298 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
21299 				ZVAL_UNDEFINED_OP2();
21300 			}
21301 			rope[opline->extended_value] = zval_get_string_func(var);
21302 
21303 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21304 		}
21305 	}
21306 	ZEND_VM_NEXT_OPCODE();
21307 }
21308 
ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21309 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21310 {
21311 	USE_OPLINE
21312 	zend_string **rope;
21313 	zval *var, *ret;
21314 	uint32_t i;
21315 
21316 	rope = (zend_string**)EX_VAR(opline->op1.var);
21317 	if (IS_CV == IS_CONST) {
21318 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
21319 		rope[opline->extended_value] = Z_STR_P(var);
21320 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
21321 			Z_ADDREF_P(var);
21322 		}
21323 	} else {
21324 		var = EX_VAR(opline->op2.var);
21325 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
21326 			if (IS_CV == IS_CV) {
21327 				rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
21328 			} else {
21329 				rope[opline->extended_value] = Z_STR_P(var);
21330 			}
21331 		} else {
21332 			SAVE_OPLINE();
21333 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
21334 				ZVAL_UNDEFINED_OP2();
21335 			}
21336 			rope[opline->extended_value] = zval_get_string_func(var);
21337 
21338 			if (UNEXPECTED(EG(exception))) {
21339 				for (i = 0; i <= opline->extended_value; i++) {
21340 					zend_string_release_ex(rope[i], 0);
21341 				}
21342 				ZVAL_UNDEF(EX_VAR(opline->result.var));
21343 				HANDLE_EXCEPTION();
21344 			}
21345 		}
21346 	}
21347 
21348 	size_t len = 0;
21349 	uint32_t flags = ZSTR_COPYABLE_CONCAT_PROPERTIES;
21350 	for (i = 0; i <= opline->extended_value; i++) {
21351 		flags &= ZSTR_GET_COPYABLE_CONCAT_PROPERTIES(rope[i]);
21352 		len += ZSTR_LEN(rope[i]);
21353 	}
21354 	ret = EX_VAR(opline->result.var);
21355 	ZVAL_STR(ret, zend_string_alloc(len, 0));
21356 	GC_ADD_FLAGS(Z_STR_P(ret), flags);
21357 
21358 	char *target = Z_STRVAL_P(ret);
21359 	for (i = 0; i <= opline->extended_value; i++) {
21360 		memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i]));
21361 		target += ZSTR_LEN(rope[i]);
21362 		zend_string_release_ex(rope[i], 0);
21363 	}
21364 	*target = '\0';
21365 
21366 	ZEND_VM_NEXT_OPCODE();
21367 }
21368 
ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21369 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21370 {
21371 	USE_OPLINE
21372 	zval *expr_ptr, new_expr;
21373 
21374 	SAVE_OPLINE();
21375 	if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) &&
21376 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
21377 		expr_ptr = zend_get_bad_ptr();
21378 		if (Z_ISREF_P(expr_ptr)) {
21379 			Z_ADDREF_P(expr_ptr);
21380 		} else {
21381 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
21382 		}
21383 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21384 	} else {
21385 		expr_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21386 		if (IS_TMP_VAR == IS_TMP_VAR) {
21387 			/* pass */
21388 		} else if (IS_TMP_VAR == IS_CONST) {
21389 			Z_TRY_ADDREF_P(expr_ptr);
21390 		} else if (IS_TMP_VAR == IS_CV) {
21391 			ZVAL_DEREF(expr_ptr);
21392 			Z_TRY_ADDREF_P(expr_ptr);
21393 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
21394 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
21395 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
21396 
21397 				expr_ptr = Z_REFVAL_P(expr_ptr);
21398 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
21399 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
21400 					expr_ptr = &new_expr;
21401 					efree_size(ref, sizeof(zend_reference));
21402 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
21403 					Z_ADDREF_P(expr_ptr);
21404 				}
21405 			}
21406 		}
21407 	}
21408 
21409 	if (IS_CV != IS_UNUSED) {
21410 		zval *offset = EX_VAR(opline->op2.var);
21411 		zend_string *str;
21412 		zend_ulong hval;
21413 
21414 add_again:
21415 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
21416 			str = Z_STR_P(offset);
21417 			if (IS_CV != IS_CONST) {
21418 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
21419 					goto num_index;
21420 				}
21421 			}
21422 str_index:
21423 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
21424 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
21425 			hval = Z_LVAL_P(offset);
21426 num_index:
21427 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
21428 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
21429 			offset = Z_REFVAL_P(offset);
21430 			goto add_again;
21431 		} else if (Z_TYPE_P(offset) == IS_NULL) {
21432 			str = ZSTR_EMPTY_ALLOC();
21433 			goto str_index;
21434 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
21435 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
21436 			goto num_index;
21437 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
21438 			hval = 0;
21439 			goto num_index;
21440 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
21441 			hval = 1;
21442 			goto num_index;
21443 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
21444 			zend_use_resource_as_offset(offset);
21445 			hval = Z_RES_HANDLE_P(offset);
21446 			goto num_index;
21447 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
21448 			ZVAL_UNDEFINED_OP2();
21449 			str = ZSTR_EMPTY_ALLOC();
21450 			goto str_index;
21451 		} else {
21452 			zend_illegal_array_offset_access(offset);
21453 			zval_ptr_dtor_nogc(expr_ptr);
21454 		}
21455 
21456 	} else {
21457 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
21458 			zend_cannot_add_element();
21459 			zval_ptr_dtor_nogc(expr_ptr);
21460 		}
21461 	}
21462 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21463 }
21464 
ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21465 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21466 {
21467 	zval *array;
21468 	uint32_t size;
21469 	USE_OPLINE
21470 
21471 	array = EX_VAR(opline->result.var);
21472 	if (IS_TMP_VAR != IS_UNUSED) {
21473 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
21474 		ZVAL_ARR(array, zend_new_array(size));
21475 		/* Explicitly initialize array as not-packed if flag is set */
21476 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
21477 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
21478 		}
21479 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21480 	} else {
21481 		ZVAL_ARR(array, zend_new_array(0));
21482 		ZEND_VM_NEXT_OPCODE();
21483 	}
21484 }
21485 
ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21486 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21487 {
21488 	USE_OPLINE
21489 
21490 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
21491 
21492 	SAVE_OPLINE();
21493 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
21494 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21495 	}
21496 
21497 	/* Destroy the previously yielded value */
21498 	zval_ptr_dtor(&generator->value);
21499 
21500 	/* Destroy the previously yielded key */
21501 	zval_ptr_dtor(&generator->key);
21502 
21503 	/* Set the new yielded value */
21504 	if (IS_TMP_VAR != IS_UNUSED) {
21505 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
21506 			/* Constants and temporary variables aren't yieldable by reference,
21507 			 * but we still allow them with a notice. */
21508 			if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) {
21509 				zval *value;
21510 
21511 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
21512 
21513 				value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21514 				ZVAL_COPY_VALUE(&generator->value, value);
21515 				if (IS_TMP_VAR == IS_CONST) {
21516 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
21517 						Z_ADDREF(generator->value);
21518 					}
21519 				}
21520 			} else {
21521 				zval *value_ptr = zend_get_bad_ptr();
21522 
21523 				/* If a function call result is yielded and the function did
21524 				 * not return by reference we throw a notice. */
21525 				do {
21526 					if (IS_TMP_VAR == IS_VAR) {
21527 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
21528 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
21529 						 && !Z_ISREF_P(value_ptr)) {
21530 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
21531 							ZVAL_COPY(&generator->value, value_ptr);
21532 							break;
21533 						}
21534 					}
21535 					if (Z_ISREF_P(value_ptr)) {
21536 						Z_ADDREF_P(value_ptr);
21537 					} else {
21538 						ZVAL_MAKE_REF_EX(value_ptr, 2);
21539 					}
21540 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
21541 				} while (0);
21542 
21543 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21544 			}
21545 		} else {
21546 			zval *value = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21547 
21548 			/* Consts, temporary variables and references need copying */
21549 			if (IS_TMP_VAR == IS_CONST) {
21550 				ZVAL_COPY_VALUE(&generator->value, value);
21551 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
21552 					Z_ADDREF(generator->value);
21553 				}
21554 			} else if (IS_TMP_VAR == IS_TMP_VAR) {
21555 				ZVAL_COPY_VALUE(&generator->value, value);
21556 			} else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
21557 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
21558 
21559 			} else {
21560 				ZVAL_COPY_VALUE(&generator->value, value);
21561 				if (IS_TMP_VAR == IS_CV) {
21562 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
21563 				}
21564 			}
21565 		}
21566 	} else {
21567 		/* If no value was specified yield null */
21568 		ZVAL_NULL(&generator->value);
21569 	}
21570 
21571 	/* Set the new yielded key */
21572 	if (IS_CV != IS_UNUSED) {
21573 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
21574 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
21575 			key = Z_REFVAL_P(key);
21576 		}
21577 		ZVAL_COPY(&generator->key, key);
21578 
21579 		if (Z_TYPE(generator->key) == IS_LONG
21580 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
21581 		) {
21582 			generator->largest_used_integer_key = Z_LVAL(generator->key);
21583 		}
21584 	} else {
21585 		/* If no key was specified we use auto-increment keys */
21586 		generator->largest_used_integer_key++;
21587 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
21588 	}
21589 
21590 	if (RETURN_VALUE_USED(opline)) {
21591 		/* If the return value of yield is used set the send
21592 		 * target and initialize it to NULL */
21593 		generator->send_target = EX_VAR(opline->result.var);
21594 		ZVAL_NULL(generator->send_target);
21595 	} else {
21596 		generator->send_target = NULL;
21597 	}
21598 
21599 	/* We increment to the next op, so we are at the correct position when the
21600 	 * generator is resumed. */
21601 	ZEND_VM_INC_OPCODE();
21602 
21603 	/* The GOTO VM uses a local opline variable. We need to set the opline
21604 	 * variable in execute_data so we don't resume at an old position. */
21605 	SAVE_OPLINE();
21606 
21607 	ZEND_VM_RETURN();
21608 }
21609 
ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21610 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21611 {
21612 	USE_OPLINE
21613 	zval *closure, *var;
21614 
21615 	closure = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
21616 	if (opline->extended_value & ZEND_BIND_REF) {
21617 		/* By-ref binding */
21618 		var = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
21619 		if (Z_ISREF_P(var)) {
21620 			Z_ADDREF_P(var);
21621 		} else {
21622 			ZVAL_MAKE_REF_EX(var, 2);
21623 		}
21624 	} else {
21625 		var = EX_VAR(opline->op2.var);
21626 		if (UNEXPECTED(Z_ISUNDEF_P(var)) && !(opline->extended_value & ZEND_BIND_IMPLICIT)) {
21627 			SAVE_OPLINE();
21628 			var = ZVAL_UNDEFINED_OP2();
21629 			if (UNEXPECTED(EG(exception))) {
21630 				HANDLE_EXCEPTION();
21631 			}
21632 		}
21633 		ZVAL_DEREF(var);
21634 		Z_TRY_ADDREF_P(var);
21635 	}
21636 
21637 	zend_closure_bind_var_ex(closure,
21638 		(opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT)), var);
21639 	ZEND_VM_NEXT_OPCODE();
21640 }
21641 
zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)21642 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
21643 {
21644 	USE_OPLINE
21645 	zval *var_ptr;
21646 
21647 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21648 
21649 	SAVE_OPLINE();
21650 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
21651 		ZVAL_UNDEFINED_OP1();
21652 		ZVAL_NULL(var_ptr);
21653 	}
21654 
21655 	do {
21656 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
21657 			zend_reference *ref = Z_REF_P(var_ptr);
21658 			var_ptr = Z_REFVAL_P(var_ptr);
21659 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
21660 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
21661 				break;
21662 			}
21663 		}
21664 		increment_function(var_ptr);
21665 	} while (0);
21666 
21667 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21668 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21669 	}
21670 
21671 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21672 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21673 }
21674 
ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21675 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21676 {
21677 	USE_OPLINE
21678 	zval *var_ptr;
21679 
21680 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21681 
21682 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21683 		fast_long_increment_function(var_ptr);
21684 		if (UNEXPECTED(0)) {
21685 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
21686 		}
21687 		ZEND_VM_NEXT_OPCODE();
21688 	}
21689 
21690 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21691 }
21692 
ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21693 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21694 {
21695 	USE_OPLINE
21696 	zval *var_ptr;
21697 
21698 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21699 
21700 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21701 		fast_long_increment_function(var_ptr);
21702 		if (UNEXPECTED(1)) {
21703 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
21704 		}
21705 		ZEND_VM_NEXT_OPCODE();
21706 	}
21707 
21708 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21709 }
21710 
zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)21711 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
21712 {
21713 	USE_OPLINE
21714 	zval *var_ptr;
21715 
21716 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21717 
21718 	SAVE_OPLINE();
21719 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
21720 		ZVAL_UNDEFINED_OP1();
21721 		ZVAL_NULL(var_ptr);
21722 	}
21723 
21724 	do {
21725 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
21726 			zend_reference *ref = Z_REF_P(var_ptr);
21727 			var_ptr = Z_REFVAL_P(var_ptr);
21728 
21729 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
21730 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
21731 				break;
21732 			}
21733 		}
21734 		decrement_function(var_ptr);
21735 	} while (0);
21736 
21737 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
21738 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21739 	}
21740 
21741 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21742 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21743 }
21744 
ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21745 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21746 {
21747 	USE_OPLINE
21748 	zval *var_ptr;
21749 
21750 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21751 
21752 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21753 		fast_long_decrement_function(var_ptr);
21754 		if (UNEXPECTED(0)) {
21755 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
21756 		}
21757 		ZEND_VM_NEXT_OPCODE();
21758 	}
21759 
21760 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21761 }
21762 
ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21763 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21764 {
21765 	USE_OPLINE
21766 	zval *var_ptr;
21767 
21768 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21769 
21770 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21771 		fast_long_decrement_function(var_ptr);
21772 		if (UNEXPECTED(1)) {
21773 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
21774 		}
21775 		ZEND_VM_NEXT_OPCODE();
21776 	}
21777 
21778 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21779 }
21780 
zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)21781 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
21782 {
21783 	USE_OPLINE
21784 	zval *var_ptr;
21785 
21786 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21787 
21788 	SAVE_OPLINE();
21789 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
21790 		ZVAL_UNDEFINED_OP1();
21791 		ZVAL_NULL(var_ptr);
21792 	}
21793 
21794 	do {
21795 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
21796 			zend_reference *ref = Z_REF_P(var_ptr);
21797 			var_ptr = Z_REFVAL_P(var_ptr);
21798 
21799 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
21800 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
21801 				break;
21802 			}
21803 		}
21804 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21805 
21806 		increment_function(var_ptr);
21807 	} while (0);
21808 
21809 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21810 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21811 }
21812 
ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21813 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21814 {
21815 	USE_OPLINE
21816 	zval *var_ptr;
21817 
21818 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21819 
21820 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21821 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
21822 		fast_long_increment_function(var_ptr);
21823 		ZEND_VM_NEXT_OPCODE();
21824 	}
21825 
21826 	ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21827 }
21828 
zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)21829 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
21830 {
21831 	USE_OPLINE
21832 	zval *var_ptr;
21833 
21834 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21835 
21836 	SAVE_OPLINE();
21837 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
21838 		ZVAL_UNDEFINED_OP1();
21839 		ZVAL_NULL(var_ptr);
21840 	}
21841 
21842 	do {
21843 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
21844 			zend_reference *ref = Z_REF_P(var_ptr);
21845 			var_ptr = Z_REFVAL_P(var_ptr);
21846 
21847 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
21848 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
21849 				break;
21850 			}
21851 		}
21852 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
21853 
21854 		decrement_function(var_ptr);
21855 	} while (0);
21856 
21857 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21858 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
21859 }
21860 
ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21861 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21862 {
21863 	USE_OPLINE
21864 	zval *var_ptr;
21865 
21866 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21867 
21868 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
21869 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
21870 		fast_long_decrement_function(var_ptr);
21871 		ZEND_VM_NEXT_OPCODE();
21872 	}
21873 
21874 	ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21875 }
21876 
ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21877 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21878 {
21879 	USE_OPLINE
21880 	zval *retval_ptr;
21881 	zval *return_value;
21882 
21883 	retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21884 	return_value = EX(return_value);
21885 
21886 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
21887 		SAVE_OPLINE();
21888 		retval_ptr = ZVAL_UNDEFINED_OP1();
21889 		if (return_value) {
21890 			ZVAL_NULL(return_value);
21891 		}
21892 	} else if (!return_value) {
21893 		if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
21894 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
21895 				SAVE_OPLINE();
21896 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
21897 			}
21898 		}
21899 	} else {
21900 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
21901 			ZVAL_COPY_VALUE(return_value, retval_ptr);
21902 			if (IS_VAR == IS_CONST) {
21903 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
21904 					Z_ADDREF_P(return_value);
21905 				}
21906 			}
21907 		} else if (IS_VAR == IS_CV) {
21908 			do {
21909 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
21910 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
21911 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
21912 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
21913 							ZVAL_COPY_VALUE(return_value, retval_ptr);
21914 							if (GC_MAY_LEAK(ref)) {
21915 								SAVE_OPLINE();
21916 								gc_possible_root(ref);
21917 							}
21918 							ZVAL_NULL(retval_ptr);
21919 							break;
21920 						} else {
21921 							Z_ADDREF_P(retval_ptr);
21922 						}
21923 					} else {
21924 						retval_ptr = Z_REFVAL_P(retval_ptr);
21925 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
21926 							Z_ADDREF_P(retval_ptr);
21927 						}
21928 					}
21929 				}
21930 				ZVAL_COPY_VALUE(return_value, retval_ptr);
21931 			} while (0);
21932 		} else /* if (IS_VAR == IS_VAR) */ {
21933 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
21934 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
21935 
21936 				retval_ptr = Z_REFVAL_P(retval_ptr);
21937 				ZVAL_COPY_VALUE(return_value, retval_ptr);
21938 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
21939 					efree_size(ref, sizeof(zend_reference));
21940 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
21941 					Z_ADDREF_P(retval_ptr);
21942 				}
21943 			} else {
21944 				ZVAL_COPY_VALUE(return_value, retval_ptr);
21945 			}
21946 		}
21947 	}
21948 
21949 
21950 
21951 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
21952 }
21953 
ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)21954 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21955 {
21956 	USE_OPLINE
21957 	zval *retval_ptr;
21958 	zval *return_value;
21959 
21960 	SAVE_OPLINE();
21961 
21962 	return_value = EX(return_value);
21963 
21964 	do {
21965 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR)) ||
21966 		    (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
21967 			/* Not supposed to happen, but we'll allow it */
21968 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
21969 
21970 			retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21971 			if (!return_value) {
21972 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21973 			} else {
21974 				if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
21975 					ZVAL_COPY_VALUE(return_value, retval_ptr);
21976 					break;
21977 				}
21978 
21979 				ZVAL_NEW_REF(return_value, retval_ptr);
21980 				if (IS_VAR == IS_CONST) {
21981 					Z_TRY_ADDREF_P(retval_ptr);
21982 				}
21983 			}
21984 			break;
21985 		}
21986 
21987 		retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
21988 
21989 		if (IS_VAR == IS_VAR) {
21990 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
21991 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
21992 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
21993 				if (return_value) {
21994 					ZVAL_NEW_REF(return_value, retval_ptr);
21995 				} else {
21996 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
21997 				}
21998 				break;
21999 			}
22000 		}
22001 
22002 		if (return_value) {
22003 			if (Z_ISREF_P(retval_ptr)) {
22004 				Z_ADDREF_P(retval_ptr);
22005 			} else {
22006 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
22007 			}
22008 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
22009 		}
22010 
22011 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22012 	} while (0);
22013 
22014 
22015 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22016 }
22017 
ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22018 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22019 {
22020 	USE_OPLINE
22021 	zval *retval;
22022 
22023 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
22024 
22025 	SAVE_OPLINE();
22026 	retval = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22027 
22028 	/* Copy return value into generator->retval */
22029 	if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
22030 		ZVAL_COPY_VALUE(&generator->retval, retval);
22031 		if (IS_VAR == IS_CONST) {
22032 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
22033 				Z_ADDREF(generator->retval);
22034 			}
22035 		}
22036 	} else if (IS_VAR == IS_CV) {
22037 		ZVAL_COPY_DEREF(&generator->retval, retval);
22038 	} else /* if (IS_VAR == IS_VAR) */ {
22039 		if (UNEXPECTED(Z_ISREF_P(retval))) {
22040 			zend_refcounted *ref = Z_COUNTED_P(retval);
22041 
22042 			retval = Z_REFVAL_P(retval);
22043 			ZVAL_COPY_VALUE(&generator->retval, retval);
22044 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22045 				efree_size(ref, sizeof(zend_reference));
22046 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
22047 				Z_ADDREF_P(retval);
22048 			}
22049 		} else {
22050 			ZVAL_COPY_VALUE(&generator->retval, retval);
22051 		}
22052 	}
22053 
22054 	EG(current_execute_data) = EX(prev_execute_data);
22055 
22056 	/* Close the generator to free up resources */
22057 	zend_generator_close(generator, 1);
22058 
22059 	/* Pass execution back to handling code */
22060 	ZEND_VM_RETURN();
22061 }
22062 
ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22063 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22064 {
22065 	USE_OPLINE
22066 	zval *arg, *param;
22067 
22068 	SAVE_OPLINE();
22069 
22070 	arg = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
22071 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
22072 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
22073 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
22074 		Z_TRY_ADDREF_P(arg);
22075 		ZVAL_NEW_REF(param, arg);
22076 	} else {
22077 		ZVAL_COPY(param, arg);
22078 	}
22079 
22080 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22081 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22082 }
22083 
ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22084 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22085 {
22086 	USE_OPLINE
22087 	zval *expr;
22088 	zval *result = EX_VAR(opline->result.var);
22089 	HashTable *ht;
22090 
22091 	SAVE_OPLINE();
22092 	expr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22093 
22094 	switch (opline->extended_value) {
22095 		case IS_LONG:
22096 			ZVAL_LONG(result, zval_get_long(expr));
22097 			break;
22098 		case IS_DOUBLE:
22099 			ZVAL_DOUBLE(result, zval_get_double(expr));
22100 			break;
22101 		case IS_STRING:
22102 			ZVAL_STR(result, zval_get_string(expr));
22103 			break;
22104 		default:
22105 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
22106 			if (IS_VAR & (IS_VAR|IS_CV)) {
22107 				ZVAL_DEREF(expr);
22108 			}
22109 			/* If value is already of correct type, return it directly */
22110 			if (Z_TYPE_P(expr) == opline->extended_value) {
22111 				ZVAL_COPY_VALUE(result, expr);
22112 				if (IS_VAR == IS_CONST) {
22113 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
22114 				} else if (IS_VAR != IS_TMP_VAR) {
22115 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
22116 				}
22117 
22118 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22119 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22120 			}
22121 
22122 			if (opline->extended_value == IS_ARRAY) {
22123 				if (IS_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
22124 					if (Z_TYPE_P(expr) != IS_NULL) {
22125 						ZVAL_ARR(result, zend_new_array(1));
22126 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
22127 						if (IS_VAR == IS_CONST) {
22128 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
22129 						} else {
22130 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
22131 						}
22132 					} else {
22133 						ZVAL_EMPTY_ARRAY(result);
22134 					}
22135 				} else if (Z_OBJ_P(expr)->properties == NULL
22136 				 && Z_OBJ_HT_P(expr)->get_properties_for == NULL
22137 				 && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
22138 					/* Optimized version without rebuilding properties HashTable */
22139 					ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
22140 				} else {
22141 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
22142 					if (obj_ht) {
22143 						/* fast copy */
22144 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
22145 							(Z_OBJCE_P(expr)->default_properties_count ||
22146 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
22147 							 GC_IS_RECURSIVE(obj_ht))));
22148 						zend_release_properties(obj_ht);
22149 					} else {
22150 						ZVAL_EMPTY_ARRAY(result);
22151 					}
22152 				}
22153 			} else {
22154 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
22155 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
22156 				if (Z_TYPE_P(expr) == IS_ARRAY) {
22157 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
22158 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
22159 						/* TODO: try not to duplicate immutable arrays as well ??? */
22160 						ht = zend_array_dup(ht);
22161 					}
22162 					Z_OBJ_P(result)->properties = ht;
22163 				} else if (Z_TYPE_P(expr) != IS_NULL) {
22164 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
22165 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
22166 					if (IS_VAR == IS_CONST) {
22167 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
22168 					} else {
22169 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
22170 					}
22171 				}
22172 			}
22173 	}
22174 
22175 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22176 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22177 }
22178 
ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22179 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22180 {
22181 	USE_OPLINE
22182 	zval *array_ptr, *result;
22183 
22184 	SAVE_OPLINE();
22185 
22186 	array_ptr = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
22187 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
22188 		result = EX_VAR(opline->result.var);
22189 		ZVAL_COPY_VALUE(result, array_ptr);
22190 		if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
22191 			Z_ADDREF_P(array_ptr);
22192 		}
22193 		Z_FE_POS_P(result) = 0;
22194 
22195 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22196 		ZEND_VM_NEXT_OPCODE();
22197 	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
22198 		zend_object *zobj = Z_OBJ_P(array_ptr);
22199 		if (!zobj->ce->get_iterator) {
22200 			HashTable *properties = zobj->properties;
22201 			if (properties) {
22202 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
22203 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
22204 						GC_DELREF(properties);
22205 					}
22206 					properties = zobj->properties = zend_array_dup(properties);
22207 				}
22208 			} else {
22209 				properties = zobj->handlers->get_properties(zobj);
22210 			}
22211 
22212 			result = EX_VAR(opline->result.var);
22213 			ZVAL_COPY_VALUE(result, array_ptr);
22214 			if (IS_VAR != IS_TMP_VAR) {
22215 				Z_ADDREF_P(array_ptr);
22216 			}
22217 
22218 			if (zend_hash_num_elements(properties) == 0) {
22219 				Z_FE_ITER_P(result) = (uint32_t) -1;
22220 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22221 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
22222 			}
22223 
22224 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
22225 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22226 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22227 		} else {
22228 			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
22229 
22230 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22231 			if (UNEXPECTED(EG(exception))) {
22232 				HANDLE_EXCEPTION();
22233 			} else if (is_empty) {
22234 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22235 			} else {
22236 				ZEND_VM_NEXT_OPCODE();
22237 			}
22238 		}
22239 	} else {
22240 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
22241 		ZVAL_UNDEF(EX_VAR(opline->result.var));
22242 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
22243 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22244 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
22245 	}
22246 }
22247 
ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22248 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22249 {
22250 	USE_OPLINE
22251 	zval *array_ptr, *array_ref;
22252 
22253 	SAVE_OPLINE();
22254 
22255 	if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
22256 		array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22257 		if (Z_ISREF_P(array_ref)) {
22258 			array_ptr = Z_REFVAL_P(array_ref);
22259 		}
22260 	} else {
22261 		array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22262 	}
22263 
22264 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
22265 		if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
22266 			if (array_ptr == array_ref) {
22267 				ZVAL_NEW_REF(array_ref, array_ref);
22268 				array_ptr = Z_REFVAL_P(array_ref);
22269 			}
22270 			Z_ADDREF_P(array_ref);
22271 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
22272 		} else {
22273 			array_ref = EX_VAR(opline->result.var);
22274 			ZVAL_NEW_REF(array_ref, array_ptr);
22275 			array_ptr = Z_REFVAL_P(array_ref);
22276 		}
22277 		if (IS_VAR == IS_CONST) {
22278 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
22279 		} else {
22280 			SEPARATE_ARRAY(array_ptr);
22281 		}
22282 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
22283 
22284 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22285 		ZEND_VM_NEXT_OPCODE();
22286 	} else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
22287 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
22288 			HashTable *properties;
22289 			if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
22290 				if (array_ptr == array_ref) {
22291 					ZVAL_NEW_REF(array_ref, array_ref);
22292 					array_ptr = Z_REFVAL_P(array_ref);
22293 				}
22294 				Z_ADDREF_P(array_ref);
22295 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
22296 			} else {
22297 				array_ptr = EX_VAR(opline->result.var);
22298 				ZVAL_COPY_VALUE(array_ptr, array_ref);
22299 			}
22300 			if (Z_OBJ_P(array_ptr)->properties
22301 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
22302 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
22303 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
22304 				}
22305 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
22306 			}
22307 
22308 			properties = Z_OBJPROP_P(array_ptr);
22309 			if (zend_hash_num_elements(properties) == 0) {
22310 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
22311 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22312 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
22313 			}
22314 
22315 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
22316 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22317 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22318 		} else {
22319 			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
22320 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22321 			if (UNEXPECTED(EG(exception))) {
22322 				HANDLE_EXCEPTION();
22323 			} else if (is_empty) {
22324 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22325 			} else {
22326 				ZEND_VM_NEXT_OPCODE();
22327 			}
22328 		}
22329 	} else {
22330 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
22331 		ZVAL_UNDEF(EX_VAR(opline->result.var));
22332 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
22333 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22334 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
22335 	}
22336 }
22337 
ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22338 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22339 {
22340 	USE_OPLINE
22341 	zval *array;
22342 	zval *value;
22343 	uint32_t value_type;
22344 	HashTable *fe_ht;
22345 	HashPosition pos;
22346 
22347 	array = EX_VAR(opline->op1.var);
22348 	if (UNEXPECTED(Z_TYPE_P(array) != IS_ARRAY)) {
22349 		ZEND_VM_TAIL_CALL(zend_fe_fetch_object_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
22350 	}
22351 	fe_ht = Z_ARRVAL_P(array);
22352 	pos = Z_FE_POS_P(array);
22353 	if (HT_IS_PACKED(fe_ht)) {
22354 		value = fe_ht->arPacked + pos;
22355 		while (1) {
22356 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
22357 				/* reached end of iteration */
22358 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
22359 				ZEND_VM_CONTINUE();
22360 			}
22361 			value_type = Z_TYPE_INFO_P(value);
22362 			ZEND_ASSERT(value_type != IS_INDIRECT);
22363 			if (EXPECTED(value_type != IS_UNDEF)) {
22364 				break;
22365 			}
22366 			pos++;
22367 			value++;
22368 		}
22369 		Z_FE_POS_P(array) = pos + 1;
22370 		if (RETURN_VALUE_USED(opline)) {
22371 			ZVAL_LONG(EX_VAR(opline->result.var), pos);
22372 		}
22373 	} else {
22374 		Bucket *p;
22375 
22376 		p = fe_ht->arData + pos;
22377 		while (1) {
22378 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
22379 				/* reached end of iteration */
22380 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
22381 				ZEND_VM_CONTINUE();
22382 			}
22383 			pos++;
22384 			value = &p->val;
22385 			value_type = Z_TYPE_INFO_P(value);
22386 			ZEND_ASSERT(value_type != IS_INDIRECT);
22387 			if (EXPECTED(value_type != IS_UNDEF)) {
22388 				break;
22389 			}
22390 			p++;
22391 		}
22392 		Z_FE_POS_P(array) = pos;
22393 		if (RETURN_VALUE_USED(opline)) {
22394 			if (!p->key) {
22395 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
22396 			} else {
22397 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
22398 			}
22399 		}
22400 	}
22401 	if (EXPECTED(opline->op2_type == IS_CV)) {
22402 		zval *variable_ptr = EX_VAR(opline->op2.var);
22403 		SAVE_OPLINE();
22404 		zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
22405 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22406 	} else {
22407 		zval *res = EX_VAR(opline->op2.var);
22408 		zend_refcounted *gc = Z_COUNTED_P(value);
22409 
22410 		ZVAL_COPY_VALUE_EX(res, value, gc, value_type);
22411 		if (Z_TYPE_INFO_REFCOUNTED(value_type)) {
22412 			GC_ADDREF(gc);
22413 		}
22414 		ZEND_VM_NEXT_OPCODE();
22415 	}
22416 }
22417 
ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22418 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22419 {
22420 	USE_OPLINE
22421 	zval *array;
22422 	zval *value;
22423 	uint32_t value_type;
22424 	HashTable *fe_ht;
22425 	HashPosition pos;
22426 	Bucket *p;
22427 
22428 	array = EX_VAR(opline->op1.var);
22429 	SAVE_OPLINE();
22430 
22431 	ZVAL_DEREF(array);
22432 	if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) {
22433 		pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array);
22434 		fe_ht = Z_ARRVAL_P(array);
22435 		if (HT_IS_PACKED(fe_ht)) {
22436 			value = fe_ht->arPacked + pos;
22437 			while (1) {
22438 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
22439 					/* reached end of iteration */
22440 					goto fe_fetch_w_exit;
22441 				}
22442 				value_type = Z_TYPE_INFO_P(value);
22443 				ZEND_ASSERT(value_type != IS_INDIRECT);
22444 				if (EXPECTED(value_type != IS_UNDEF)) {
22445 					break;
22446 				}
22447 				pos++;
22448 				value++;
22449 			}
22450 			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1;
22451 			if (RETURN_VALUE_USED(opline)) {
22452 				ZVAL_LONG(EX_VAR(opline->result.var), pos);
22453 			}
22454 		} else {
22455 			p = fe_ht->arData + pos;
22456 			while (1) {
22457 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
22458 					/* reached end of iteration */
22459 					goto fe_fetch_w_exit;
22460 				}
22461 				pos++;
22462 				value = &p->val;
22463 				value_type = Z_TYPE_INFO_P(value);
22464 				ZEND_ASSERT(value_type != IS_INDIRECT);
22465 				if (EXPECTED(value_type != IS_UNDEF)) {
22466 					break;
22467 				}
22468 				p++;
22469 			}
22470 			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
22471 			if (RETURN_VALUE_USED(opline)) {
22472 				if (!p->key) {
22473 					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
22474 				} else {
22475 					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
22476 				}
22477 			}
22478 		}
22479 	} else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) {
22480 		zend_object_iterator *iter;
22481 
22482 		if ((iter = zend_iterator_unwrap(array)) == NULL) {
22483 			/* plain object */
22484 
22485 			fe_ht = Z_OBJPROP_P(array);
22486 			pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht);
22487 			p = fe_ht->arData + pos;
22488 			while (1) {
22489 				if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
22490 					/* reached end of iteration */
22491 					goto fe_fetch_w_exit;
22492 				}
22493 				pos++;
22494 				value = &p->val;
22495 				value_type = Z_TYPE_INFO_P(value);
22496 				if (EXPECTED(value_type != IS_UNDEF)) {
22497 					if (UNEXPECTED(value_type == IS_INDIRECT)) {
22498 						value = Z_INDIRECT_P(value);
22499 						value_type = Z_TYPE_INFO_P(value);
22500 						if (EXPECTED(value_type != IS_UNDEF)
22501 						 && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key, 0) == SUCCESS)) {
22502 							if ((value_type & Z_TYPE_MASK) != IS_REFERENCE) {
22503 								zend_property_info *prop_info =
22504 									zend_get_property_info_for_slot(Z_OBJ_P(array), value);
22505 								if (UNEXPECTED(prop_info)) {
22506 									if (UNEXPECTED(prop_info->flags & ZEND_ACC_READONLY)) {
22507 										zend_throw_error(NULL,
22508 											"Cannot acquire reference to readonly property %s::$%s",
22509 											ZSTR_VAL(prop_info->ce->name), ZSTR_VAL(p->key));
22510 										UNDEF_RESULT();
22511 										HANDLE_EXCEPTION();
22512 									}
22513 									if (ZEND_TYPE_IS_SET(prop_info->type)) {
22514 										ZVAL_NEW_REF(value, value);
22515 										ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(value), prop_info);
22516 										value_type = IS_REFERENCE_EX;
22517 									}
22518 								}
22519 							}
22520 							break;
22521 						}
22522 					} else if (EXPECTED(Z_OBJCE_P(array)->default_properties_count == 0)
22523 							|| !p->key
22524 							|| zend_check_property_access(Z_OBJ_P(array), p->key, 1) == SUCCESS) {
22525 						break;
22526 					}
22527 				}
22528 				p++;
22529 			}
22530 			EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos;
22531 			if (RETURN_VALUE_USED(opline)) {
22532 				if (UNEXPECTED(!p->key)) {
22533 					ZVAL_LONG(EX_VAR(opline->result.var), p->h);
22534 				} else if (ZSTR_VAL(p->key)[0]) {
22535 					ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
22536 				} else {
22537 					const char *class_name, *prop_name;
22538 					size_t prop_name_len;
22539 					zend_unmangle_property_name_ex(
22540 						p->key, &class_name, &prop_name, &prop_name_len);
22541 					ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len);
22542 				}
22543 			}
22544 		} else {
22545 			const zend_object_iterator_funcs *funcs = iter->funcs;
22546 			if (++iter->index > 0) {
22547 				/* This could cause an endless loop if index becomes zero again.
22548 				 * In case that ever happens we need an additional flag. */
22549 				funcs->move_forward(iter);
22550 				if (UNEXPECTED(EG(exception) != NULL)) {
22551 					UNDEF_RESULT();
22552 					HANDLE_EXCEPTION();
22553 				}
22554 				if (UNEXPECTED(funcs->valid(iter) == FAILURE)) {
22555 					/* reached end of iteration */
22556 					if (UNEXPECTED(EG(exception) != NULL)) {
22557 						UNDEF_RESULT();
22558 						HANDLE_EXCEPTION();
22559 					}
22560 					goto fe_fetch_w_exit;
22561 				}
22562 			}
22563 			value = funcs->get_current_data(iter);
22564 			if (UNEXPECTED(EG(exception) != NULL)) {
22565 				UNDEF_RESULT();
22566 				HANDLE_EXCEPTION();
22567 			}
22568 			if (!value) {
22569 				/* failure in get_current_data */
22570 				goto fe_fetch_w_exit;
22571 			}
22572 			if (RETURN_VALUE_USED(opline)) {
22573 				if (funcs->get_current_key) {
22574 					funcs->get_current_key(iter, EX_VAR(opline->result.var));
22575 					if (UNEXPECTED(EG(exception) != NULL)) {
22576 						UNDEF_RESULT();
22577 						HANDLE_EXCEPTION();
22578 					}
22579 				} else {
22580 					ZVAL_LONG(EX_VAR(opline->result.var), iter->index);
22581 				}
22582 			}
22583 			value_type = Z_TYPE_INFO_P(value);
22584 		}
22585 	} else {
22586 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array));
22587 		if (UNEXPECTED(EG(exception))) {
22588 			UNDEF_RESULT();
22589 			HANDLE_EXCEPTION();
22590 		}
22591 fe_fetch_w_exit:
22592 		ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
22593 		ZEND_VM_CONTINUE();
22594 	}
22595 
22596 	if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) {
22597 		zend_refcounted *gc = Z_COUNTED_P(value);
22598 		zval *ref;
22599 		ZVAL_NEW_EMPTY_REF(value);
22600 		ref = Z_REFVAL_P(value);
22601 		ZVAL_COPY_VALUE_EX(ref, value, gc, value_type);
22602 	}
22603 	if (EXPECTED(opline->op2_type == IS_CV)) {
22604 		zval *variable_ptr = EX_VAR(opline->op2.var);
22605 		if (EXPECTED(variable_ptr != value)) {
22606 			zend_reference *ref;
22607 
22608 			ref = Z_REF_P(value);
22609 			GC_ADDREF(ref);
22610 			i_zval_ptr_dtor(variable_ptr);
22611 			ZVAL_REF(variable_ptr, ref);
22612 		}
22613 	} else {
22614 		Z_ADDREF_P(value);
22615 		ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value));
22616 	}
22617 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22618 }
22619 
ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22620 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22621 {
22622 	USE_OPLINE
22623 	zval *value;
22624 	zend_reference *ref = NULL;
22625 	bool ret;
22626 
22627 	SAVE_OPLINE();
22628 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22629 
22630 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
22631 		if (IS_VAR == IS_VAR) {
22632 			ref = Z_REF_P(value);
22633 		}
22634 		value = Z_REFVAL_P(value);
22635 	}
22636 
22637 	ret = i_zend_is_true(value);
22638 
22639 	if (UNEXPECTED(EG(exception))) {
22640 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22641 		ZVAL_UNDEF(EX_VAR(opline->result.var));
22642 		HANDLE_EXCEPTION();
22643 	}
22644 
22645 	if (ret) {
22646 		zval *result = EX_VAR(opline->result.var);
22647 
22648 		ZVAL_COPY_VALUE(result, value);
22649 		if (IS_VAR == IS_CONST) {
22650 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
22651 		} else if (IS_VAR == IS_CV) {
22652 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
22653 		} else if (IS_VAR == IS_VAR && ref) {
22654 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22655 				efree_size(ref, sizeof(zend_reference));
22656 			} else if (Z_OPT_REFCOUNTED_P(result)) {
22657 				Z_ADDREF_P(result);
22658 			}
22659 		}
22660 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22661 	}
22662 
22663 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22664 	ZEND_VM_NEXT_OPCODE();
22665 }
22666 
ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22667 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22668 {
22669 	USE_OPLINE
22670 	zval *value;
22671 	zend_reference *ref = NULL;
22672 
22673 	SAVE_OPLINE();
22674 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22675 
22676 	if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
22677 		if (IS_VAR & IS_VAR) {
22678 			ref = Z_REF_P(value);
22679 		}
22680 		value = Z_REFVAL_P(value);
22681 	}
22682 
22683 	if (Z_TYPE_P(value) > IS_NULL) {
22684 		zval *result = EX_VAR(opline->result.var);
22685 		ZVAL_COPY_VALUE(result, value);
22686 		if (IS_VAR == IS_CONST) {
22687 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
22688 		} else if (IS_VAR == IS_CV) {
22689 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
22690 		} else if ((IS_VAR & IS_VAR) && ref) {
22691 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22692 				efree_size(ref, sizeof(zend_reference));
22693 			} else if (Z_OPT_REFCOUNTED_P(result)) {
22694 				Z_ADDREF_P(result);
22695 			}
22696 		}
22697 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22698 	}
22699 
22700 	if ((IS_VAR & IS_VAR) && ref) {
22701 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
22702 			efree_size(ref, sizeof(zend_reference));
22703 		}
22704 	}
22705 	ZEND_VM_NEXT_OPCODE();
22706 }
22707 
ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22708 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22709 {
22710 	USE_OPLINE
22711 	zval *val, *result;
22712 
22713 	val = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22714 
22715 	if (Z_TYPE_P(val) > IS_NULL) {
22716 		do {
22717 			if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
22718 				val = Z_REFVAL_P(val);
22719 				if (Z_TYPE_P(val) <= IS_NULL) {
22720 					zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22721 					break;
22722 				}
22723 			}
22724 			ZEND_VM_NEXT_OPCODE();
22725 		} while (0);
22726 	}
22727 
22728 	result = EX_VAR(opline->result.var);
22729 	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
22730 	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
22731 		ZVAL_NULL(result);
22732 		if (IS_VAR == IS_CV
22733 			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
22734 			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
22735 		) {
22736 			SAVE_OPLINE();
22737 			ZVAL_UNDEFINED_OP1();
22738 			if (UNEXPECTED(EG(exception) != NULL)) {
22739 				HANDLE_EXCEPTION();
22740 			}
22741 		}
22742 	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
22743 		ZVAL_FALSE(result);
22744 	} else {
22745 		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
22746 		ZVAL_TRUE(result);
22747 	}
22748 
22749 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
22750 }
22751 
ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22752 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22753 {
22754 	USE_OPLINE
22755 	zval *value;
22756 	zval *result = EX_VAR(opline->result.var);
22757 
22758 	value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22759 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
22760 		SAVE_OPLINE();
22761 		ZVAL_UNDEFINED_OP1();
22762 		ZVAL_NULL(result);
22763 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
22764 	}
22765 
22766 	if (IS_VAR == IS_CV) {
22767 		ZVAL_COPY_DEREF(result, value);
22768 	} else if (IS_VAR == IS_VAR) {
22769 		if (UNEXPECTED(Z_ISREF_P(value))) {
22770 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
22771 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
22772 				efree_size(Z_REF_P(value), sizeof(zend_reference));
22773 			} else if (Z_OPT_REFCOUNTED_P(result)) {
22774 				Z_ADDREF_P(result);
22775 			}
22776 		} else {
22777 			ZVAL_COPY_VALUE(result, value);
22778 		}
22779 	} else {
22780 		ZVAL_COPY_VALUE(result, value);
22781 		if (IS_VAR == IS_CONST) {
22782 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
22783 				Z_ADDREF_P(result);
22784 			}
22785 		}
22786 	}
22787 	ZEND_VM_NEXT_OPCODE();
22788 }
22789 
ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22790 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22791 {
22792 	USE_OPLINE
22793 	zval *varptr, *arg;
22794 
22795 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22796 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
22797 
22798 	if (IS_VAR == IS_CV) {
22799 		ZVAL_COPY(arg, varptr);
22800 	} else /* if (IS_VAR == IS_VAR) */ {
22801 		ZVAL_COPY_VALUE(arg, varptr);
22802 	}
22803 
22804 	ZEND_VM_NEXT_OPCODE();
22805 }
22806 
ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22807 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22808 {
22809 	USE_OPLINE
22810 	zval *op1, *op2;
22811 	bool result;
22812 
22813 	SAVE_OPLINE();
22814 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
22815 	op2 = RT_CONSTANT(opline, opline->op2);
22816 	result = fast_is_identical_function(op1, op2);
22817 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22818 
22819 	ZEND_VM_SMART_BRANCH(result, 1);
22820 }
22821 
ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22822 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22823 {
22824 	USE_OPLINE
22825 	zval *op1, *op2;
22826 	bool result;
22827 
22828 	SAVE_OPLINE();
22829 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
22830 	op2 = RT_CONSTANT(opline, opline->op2);
22831 	result = fast_is_identical_function(op1, op2);
22832 
22833 	ZEND_VM_SMART_BRANCH(result, 1);
22834 }
22835 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22836 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22837 {
22838 	USE_OPLINE
22839 	zval *op1, *op2;
22840 	bool result;
22841 
22842 	SAVE_OPLINE();
22843 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
22844 	op2 = RT_CONSTANT(opline, opline->op2);
22845 	result = fast_is_not_identical_function(op1, op2);
22846 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22847 
22848 	ZEND_VM_SMART_BRANCH(result, 1);
22849 }
22850 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22851 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22852 {
22853 	USE_OPLINE
22854 	zval *object;
22855 	zval *property;
22856 	zval *value;
22857 	zval *zptr;
22858 	void **cache_slot;
22859 	zend_property_info *prop_info;
22860 	zend_object *zobj;
22861 	zend_string *name, *tmp_name;
22862 
22863 	SAVE_OPLINE();
22864 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22865 	property = RT_CONSTANT(opline, opline->op2);
22866 
22867 	do {
22868 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
22869 
22870 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
22871 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
22872 				object = Z_REFVAL_P(object);
22873 				goto assign_op_object;
22874 			}
22875 			if (IS_VAR == IS_CV
22876 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
22877 				ZVAL_UNDEFINED_OP1();
22878 			}
22879 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
22880 			break;
22881 		}
22882 
22883 assign_op_object:
22884 		/* here we are sure we are dealing with an object */
22885 		zobj = Z_OBJ_P(object);
22886 		if (IS_CONST == IS_CONST) {
22887 			name = Z_STR_P(property);
22888 		} else {
22889 			name = zval_try_get_tmp_string(property, &tmp_name);
22890 			if (UNEXPECTED(!name)) {
22891 				UNDEF_RESULT();
22892 				break;
22893 			}
22894 		}
22895 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
22896 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
22897 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
22898 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22899 					ZVAL_NULL(EX_VAR(opline->result.var));
22900 				}
22901 			} else {
22902 				zval *orig_zptr = zptr;
22903 				zend_reference *ref;
22904 
22905 				do {
22906 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
22907 						ref = Z_REF_P(zptr);
22908 						zptr = Z_REFVAL_P(zptr);
22909 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
22910 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
22911 							break;
22912 						}
22913 					}
22914 
22915 					if (IS_CONST == IS_CONST) {
22916 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
22917 					} else {
22918 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
22919 					}
22920 					if (UNEXPECTED(prop_info)) {
22921 						/* special case for typed properties */
22922 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
22923 					} else {
22924 						zend_binary_op(zptr, zptr, value OPLINE_CC);
22925 					}
22926 				} while (0);
22927 
22928 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22929 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
22930 				}
22931 			}
22932 		} else {
22933 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
22934 		}
22935 		if (IS_CONST != IS_CONST) {
22936 			zend_tmp_string_release(tmp_name);
22937 		}
22938 	} while (0);
22939 
22940 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
22941 
22942 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
22943 	/* assign_obj has two opcodes! */
22944 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
22945 }
22946 
22947 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)22948 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22949 {
22950 	USE_OPLINE
22951 	zval *var_ptr;
22952 	zval *value, *container, *dim;
22953 	HashTable *ht;
22954 
22955 	SAVE_OPLINE();
22956 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
22957 
22958 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
22959 assign_dim_op_array:
22960 		SEPARATE_ARRAY(container);
22961 		ht = Z_ARRVAL_P(container);
22962 assign_dim_op_new_array:
22963 		dim = RT_CONSTANT(opline, opline->op2);
22964 		if (IS_CONST == IS_UNUSED) {
22965 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
22966 			if (UNEXPECTED(!var_ptr)) {
22967 				zend_cannot_add_element();
22968 				goto assign_dim_op_ret_null;
22969 			}
22970 		} else {
22971 			if (IS_CONST == IS_CONST) {
22972 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
22973 			} else {
22974 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
22975 			}
22976 			if (UNEXPECTED(!var_ptr)) {
22977 				goto assign_dim_op_ret_null;
22978 			}
22979 		}
22980 
22981 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
22982 
22983 		do {
22984 			if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
22985 				zend_reference *ref = Z_REF_P(var_ptr);
22986 				var_ptr = Z_REFVAL_P(var_ptr);
22987 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
22988 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
22989 					break;
22990 				}
22991 			}
22992 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
22993 		} while (0);
22994 
22995 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
22996 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
22997 		}
22998 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
22999 	} else {
23000 		if (EXPECTED(Z_ISREF_P(container))) {
23001 			container = Z_REFVAL_P(container);
23002 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
23003 				goto assign_dim_op_array;
23004 			}
23005 		}
23006 
23007 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
23008 			zend_object *obj = Z_OBJ_P(container);
23009 
23010 			dim = RT_CONSTANT(opline, opline->op2);
23011 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23012 				dim++;
23013 			}
23014 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
23015 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
23016 			uint8_t old_type;
23017 
23018 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
23019 				ZVAL_UNDEFINED_OP1();
23020 			}
23021 			ht = zend_new_array(8);
23022 			old_type = Z_TYPE_P(container);
23023 			ZVAL_ARR(container, ht);
23024 			if (UNEXPECTED(old_type == IS_FALSE)) {
23025 				GC_ADDREF(ht);
23026 				zend_false_to_array_deprecated();
23027 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
23028 					zend_array_destroy(ht);
23029 					goto assign_dim_op_ret_null;
23030 				}
23031 			}
23032 			goto assign_dim_op_new_array;
23033 		} else {
23034 			dim = RT_CONSTANT(opline, opline->op2);
23035 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
23036 assign_dim_op_ret_null:
23037 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
23038 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23039 				ZVAL_NULL(EX_VAR(opline->result.var));
23040 			}
23041 		}
23042 	}
23043 
23044 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23045 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23046 }
23047 
ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23048 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23049 {
23050 	USE_OPLINE
23051 	zval *var_ptr;
23052 	zval *value;
23053 
23054 	SAVE_OPLINE();
23055 	value = RT_CONSTANT(opline, opline->op2);
23056 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23057 
23058 	do {
23059 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
23060 			zend_reference *ref = Z_REF_P(var_ptr);
23061 			var_ptr = Z_REFVAL_P(var_ptr);
23062 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
23063 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
23064 				break;
23065 			}
23066 		}
23067 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
23068 	} while (0);
23069 
23070 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23071 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
23072 	}
23073 
23074 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23075 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23076 }
23077 
ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23078 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23079 {
23080 	USE_OPLINE
23081 	zval *object;
23082 	zval *property;
23083 	zval *zptr;
23084 	void **cache_slot;
23085 	zend_property_info *prop_info;
23086 	zend_object *zobj;
23087 	zend_string *name, *tmp_name;
23088 
23089 	SAVE_OPLINE();
23090 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23091 	property = RT_CONSTANT(opline, opline->op2);
23092 
23093 	do {
23094 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23095 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23096 				object = Z_REFVAL_P(object);
23097 				goto pre_incdec_object;
23098 			}
23099 			if (IS_VAR == IS_CV
23100 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
23101 				ZVAL_UNDEFINED_OP1();
23102 			}
23103 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
23104 			break;
23105 		}
23106 
23107 pre_incdec_object:
23108 		/* here we are sure we are dealing with an object */
23109 		zobj = Z_OBJ_P(object);
23110 		if (IS_CONST == IS_CONST) {
23111 			name = Z_STR_P(property);
23112 		} else {
23113 			name = zval_try_get_tmp_string(property, &tmp_name);
23114 			if (UNEXPECTED(!name)) {
23115 				UNDEF_RESULT();
23116 				break;
23117 			}
23118 		}
23119 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
23120 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
23121 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
23122 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23123 					ZVAL_NULL(EX_VAR(opline->result.var));
23124 				}
23125 			} else {
23126 				if (IS_CONST == IS_CONST) {
23127 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
23128 				} else {
23129 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
23130 				}
23131 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
23132 			}
23133 		} else {
23134 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
23135 		}
23136 		if (IS_CONST != IS_CONST) {
23137 			zend_tmp_string_release(tmp_name);
23138 		}
23139 	} while (0);
23140 
23141 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23142 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23143 }
23144 
ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23145 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23146 {
23147 	USE_OPLINE
23148 	zval *object;
23149 	zval *property;
23150 	zval *zptr;
23151 	void **cache_slot;
23152 	zend_property_info *prop_info;
23153 	zend_object *zobj;
23154 	zend_string *name, *tmp_name;
23155 
23156 	SAVE_OPLINE();
23157 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23158 	property = RT_CONSTANT(opline, opline->op2);
23159 
23160 	do {
23161 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23162 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23163 				object = Z_REFVAL_P(object);
23164 				goto post_incdec_object;
23165 			}
23166 			if (IS_VAR == IS_CV
23167 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
23168 				ZVAL_UNDEFINED_OP1();
23169 			}
23170 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
23171 			break;
23172 		}
23173 
23174 post_incdec_object:
23175 		/* here we are sure we are dealing with an object */
23176 		zobj = Z_OBJ_P(object);
23177 		if (IS_CONST == IS_CONST) {
23178 			name = Z_STR_P(property);
23179 		} else {
23180 			name = zval_try_get_tmp_string(property, &tmp_name);
23181 			if (UNEXPECTED(!name)) {
23182 				ZVAL_UNDEF(EX_VAR(opline->result.var));
23183 				break;
23184 			}
23185 		}
23186 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
23187 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
23188 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
23189 				ZVAL_NULL(EX_VAR(opline->result.var));
23190 			} else {
23191 				if (IS_CONST == IS_CONST) {
23192 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
23193 				} else {
23194 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
23195 				}
23196 
23197 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
23198 			}
23199 		} else {
23200 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
23201 		}
23202 		if (IS_CONST != IS_CONST) {
23203 			zend_tmp_string_release(tmp_name);
23204 		}
23205 	} while (0);
23206 
23207 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23208 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23209 }
23210 
ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23211 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23212 {
23213 	USE_OPLINE
23214 	zval *container;
23215 
23216 	SAVE_OPLINE();
23217 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23218 	zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
23219 
23220 	if (IS_VAR == IS_VAR) {
23221 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
23222 	}
23223 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23224 }
23225 
ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23226 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23227 {
23228 	USE_OPLINE
23229 	zval *container;
23230 
23231 	SAVE_OPLINE();
23232 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23233 	zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
23234 
23235 	if (IS_VAR == IS_VAR) {
23236 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
23237 	}
23238 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23239 }
23240 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23241 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23242 {
23243 #if 0
23244 	USE_OPLINE
23245 #endif
23246 
23247 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
23248 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
23249 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23250 		}
23251 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23252 	} else {
23253 		if (IS_CONST == IS_UNUSED) {
23254 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23255 		}
23256 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23257 	}
23258 }
23259 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23260 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23261 {
23262 	USE_OPLINE
23263 	zval *container;
23264 
23265 	SAVE_OPLINE();
23266 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23267 	zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
23268 
23269 	if (IS_VAR == IS_VAR) {
23270 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
23271 	}
23272 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23273 }
23274 
ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23275 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23276 {
23277 	USE_OPLINE
23278 	zval *property, *container, *result;
23279 
23280 	SAVE_OPLINE();
23281 
23282 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23283 	property = RT_CONSTANT(opline, opline->op2);
23284 	result = EX_VAR(opline->result.var);
23285 	zend_fetch_property_address(
23286 		result, container, IS_VAR, property, IS_CONST,
23287 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
23288 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
23289 
23290 	if (IS_VAR == IS_VAR) {
23291 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
23292 	}
23293 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23294 }
23295 
ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23296 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23297 {
23298 	USE_OPLINE
23299 	zval *property, *container, *result;
23300 
23301 	SAVE_OPLINE();
23302 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23303 	property = RT_CONSTANT(opline, opline->op2);
23304 	result = EX_VAR(opline->result.var);
23305 	zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
23306 
23307 	if (IS_VAR == IS_VAR) {
23308 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
23309 	}
23310 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23311 }
23312 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23313 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23314 {
23315 #if 0
23316 	USE_OPLINE
23317 #endif
23318 
23319 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
23320 		/* Behave like FETCH_OBJ_W */
23321 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
23322 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23323 		}
23324 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23325 	} else {
23326 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
23327 	}
23328 }
23329 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23330 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23331 {
23332 	USE_OPLINE
23333 	zval *container, *property, *result;
23334 
23335 	SAVE_OPLINE();
23336 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23337 	property = RT_CONSTANT(opline, opline->op2);
23338 	result = EX_VAR(opline->result.var);
23339 	zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0 OPLINE_CC EXECUTE_DATA_CC);
23340 
23341 	if (IS_VAR == IS_VAR) {
23342 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
23343 	}
23344 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23345 }
23346 
ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23347 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23348 {
23349 	USE_OPLINE
23350 	zval *container, *dim;
23351 
23352 	SAVE_OPLINE();
23353 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23354 	dim = RT_CONSTANT(opline, opline->op2);
23355 
23356 	if (IS_VAR == IS_VAR
23357 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
23358 		&& UNEXPECTED(!Z_ISREF_P(container))
23359 	) {
23360 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
23361 		zend_fetch_dimension_address_LIST_r(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
23362 	} else {
23363 		zend_fetch_dimension_address_W(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
23364 	}
23365 
23366 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
23367 }
23368 
ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)23369 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23370 {
23371 	USE_OPLINE
23372 	zval *object, *value, tmp;
23373 	zend_object *zobj;
23374 	zend_string *name, *tmp_name;
23375 	zend_refcounted *garbage = NULL;
23376 
23377 	SAVE_OPLINE();
23378 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23379 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
23380 
23381 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23382 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23383 			object = Z_REFVAL_P(object);
23384 			goto assign_object;
23385 		}
23386 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
23387 		value = &EG(uninitialized_zval);
23388 		goto free_and_exit_assign_obj;
23389 	}
23390 
23391 assign_object:
23392 	zobj = Z_OBJ_P(object);
23393 	if (IS_CONST == IS_CONST) {
23394 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
23395 			void **cache_slot = CACHE_ADDR(opline->extended_value);
23396 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
23397 			zval *property_val;
23398 
23399 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
23400 				property_val = OBJ_PROP(zobj, prop_offset);
23401 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
23402 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
23403 
23404 					if (UNEXPECTED(prop_info != NULL)) {
23405 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
23406 						goto free_and_exit_assign_obj;
23407 					} else {
23408 fast_assign_obj:
23409 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
23410 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23411 							ZVAL_COPY(EX_VAR(opline->result.var), value);
23412 						}
23413 						goto exit_assign_obj;
23414 					}
23415 				}
23416 			} else {
23417 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23418 				if (EXPECTED(zobj->properties != NULL)) {
23419 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23420 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23421 							GC_DELREF(zobj->properties);
23422 						}
23423 						zobj->properties = zend_array_dup(zobj->properties);
23424 					}
23425 					property_val = zend_hash_find_known_hash(zobj->properties, name);
23426 					if (property_val) {
23427 						goto fast_assign_obj;
23428 					}
23429 				}
23430 
23431 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
23432 					if (EXPECTED(zobj->properties == NULL)) {
23433 						rebuild_object_properties(zobj);
23434 					}
23435 					if (IS_CONST == IS_CONST) {
23436 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23437 							Z_ADDREF_P(value);
23438 						}
23439 					} else if (IS_CONST != IS_TMP_VAR) {
23440 						if (Z_ISREF_P(value)) {
23441 							if (IS_CONST == IS_VAR) {
23442 								zend_reference *ref = Z_REF_P(value);
23443 								if (GC_DELREF(ref) == 0) {
23444 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23445 									efree_size(ref, sizeof(zend_reference));
23446 									value = &tmp;
23447 								} else {
23448 									value = Z_REFVAL_P(value);
23449 									Z_TRY_ADDREF_P(value);
23450 								}
23451 							} else {
23452 								value = Z_REFVAL_P(value);
23453 								Z_TRY_ADDREF_P(value);
23454 							}
23455 						} else if (IS_CONST == IS_CV) {
23456 							Z_TRY_ADDREF_P(value);
23457 						}
23458 						}
23459 					zend_hash_add_new(zobj->properties, name, value);
23460 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23461 						ZVAL_COPY(EX_VAR(opline->result.var), value);
23462 					}
23463 					goto exit_assign_obj;
23464 				}
23465 			}
23466 		}
23467 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23468 	} else {
23469 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
23470 		if (UNEXPECTED(!name)) {
23471 
23472 			UNDEF_RESULT();
23473 			goto exit_assign_obj;
23474 		}
23475 	}
23476 
23477 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
23478 		ZVAL_DEREF(value);
23479 	}
23480 
23481 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
23482 
23483 	if (IS_CONST != IS_CONST) {
23484 		zend_tmp_string_release(tmp_name);
23485 	}
23486 
23487 free_and_exit_assign_obj:
23488 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
23489 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
23490 	}
23491 
23492 exit_assign_obj:
23493 	if (garbage) {
23494 		GC_DTOR_NO_REF(garbage);
23495 	}
23496 
23497 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23498 	/* assign_obj has two opcodes! */
23499 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23500 }
23501 
23502 /* 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)23503 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23504 {
23505 	USE_OPLINE
23506 	zval *object, *value, tmp;
23507 	zend_object *zobj;
23508 	zend_string *name, *tmp_name;
23509 	zend_refcounted *garbage = NULL;
23510 
23511 	SAVE_OPLINE();
23512 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23513 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
23514 
23515 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23516 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23517 			object = Z_REFVAL_P(object);
23518 			goto assign_object;
23519 		}
23520 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
23521 		value = &EG(uninitialized_zval);
23522 		goto free_and_exit_assign_obj;
23523 	}
23524 
23525 assign_object:
23526 	zobj = Z_OBJ_P(object);
23527 	if (IS_CONST == IS_CONST) {
23528 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
23529 			void **cache_slot = CACHE_ADDR(opline->extended_value);
23530 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
23531 			zval *property_val;
23532 
23533 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
23534 				property_val = OBJ_PROP(zobj, prop_offset);
23535 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
23536 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
23537 
23538 					if (UNEXPECTED(prop_info != NULL)) {
23539 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
23540 						goto free_and_exit_assign_obj;
23541 					} else {
23542 fast_assign_obj:
23543 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
23544 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23545 							ZVAL_COPY(EX_VAR(opline->result.var), value);
23546 						}
23547 						goto exit_assign_obj;
23548 					}
23549 				}
23550 			} else {
23551 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23552 				if (EXPECTED(zobj->properties != NULL)) {
23553 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23554 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23555 							GC_DELREF(zobj->properties);
23556 						}
23557 						zobj->properties = zend_array_dup(zobj->properties);
23558 					}
23559 					property_val = zend_hash_find_known_hash(zobj->properties, name);
23560 					if (property_val) {
23561 						goto fast_assign_obj;
23562 					}
23563 				}
23564 
23565 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
23566 					if (EXPECTED(zobj->properties == NULL)) {
23567 						rebuild_object_properties(zobj);
23568 					}
23569 					if (IS_TMP_VAR == IS_CONST) {
23570 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23571 							Z_ADDREF_P(value);
23572 						}
23573 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
23574 						if (Z_ISREF_P(value)) {
23575 							if (IS_TMP_VAR == IS_VAR) {
23576 								zend_reference *ref = Z_REF_P(value);
23577 								if (GC_DELREF(ref) == 0) {
23578 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23579 									efree_size(ref, sizeof(zend_reference));
23580 									value = &tmp;
23581 								} else {
23582 									value = Z_REFVAL_P(value);
23583 									Z_TRY_ADDREF_P(value);
23584 								}
23585 							} else {
23586 								value = Z_REFVAL_P(value);
23587 								Z_TRY_ADDREF_P(value);
23588 							}
23589 						} else if (IS_TMP_VAR == IS_CV) {
23590 							Z_TRY_ADDREF_P(value);
23591 						}
23592 						}
23593 					zend_hash_add_new(zobj->properties, name, value);
23594 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23595 						ZVAL_COPY(EX_VAR(opline->result.var), value);
23596 					}
23597 					goto exit_assign_obj;
23598 				}
23599 			}
23600 		}
23601 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23602 	} else {
23603 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
23604 		if (UNEXPECTED(!name)) {
23605 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23606 			UNDEF_RESULT();
23607 			goto exit_assign_obj;
23608 		}
23609 	}
23610 
23611 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
23612 		ZVAL_DEREF(value);
23613 	}
23614 
23615 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
23616 
23617 	if (IS_CONST != IS_CONST) {
23618 		zend_tmp_string_release(tmp_name);
23619 	}
23620 
23621 free_and_exit_assign_obj:
23622 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
23623 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
23624 	}
23625 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23626 exit_assign_obj:
23627 	if (garbage) {
23628 		GC_DTOR_NO_REF(garbage);
23629 	}
23630 
23631 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23632 	/* assign_obj has two opcodes! */
23633 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23634 }
23635 
23636 /* 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)23637 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23638 {
23639 	USE_OPLINE
23640 	zval *object, *value, tmp;
23641 	zend_object *zobj;
23642 	zend_string *name, *tmp_name;
23643 	zend_refcounted *garbage = NULL;
23644 
23645 	SAVE_OPLINE();
23646 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23647 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
23648 
23649 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23650 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23651 			object = Z_REFVAL_P(object);
23652 			goto assign_object;
23653 		}
23654 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
23655 		value = &EG(uninitialized_zval);
23656 		goto free_and_exit_assign_obj;
23657 	}
23658 
23659 assign_object:
23660 	zobj = Z_OBJ_P(object);
23661 	if (IS_CONST == IS_CONST) {
23662 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
23663 			void **cache_slot = CACHE_ADDR(opline->extended_value);
23664 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
23665 			zval *property_val;
23666 
23667 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
23668 				property_val = OBJ_PROP(zobj, prop_offset);
23669 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
23670 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
23671 
23672 					if (UNEXPECTED(prop_info != NULL)) {
23673 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
23674 						goto free_and_exit_assign_obj;
23675 					} else {
23676 fast_assign_obj:
23677 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
23678 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23679 							ZVAL_COPY(EX_VAR(opline->result.var), value);
23680 						}
23681 						goto exit_assign_obj;
23682 					}
23683 				}
23684 			} else {
23685 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23686 				if (EXPECTED(zobj->properties != NULL)) {
23687 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23688 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23689 							GC_DELREF(zobj->properties);
23690 						}
23691 						zobj->properties = zend_array_dup(zobj->properties);
23692 					}
23693 					property_val = zend_hash_find_known_hash(zobj->properties, name);
23694 					if (property_val) {
23695 						goto fast_assign_obj;
23696 					}
23697 				}
23698 
23699 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
23700 					if (EXPECTED(zobj->properties == NULL)) {
23701 						rebuild_object_properties(zobj);
23702 					}
23703 					if (IS_VAR == IS_CONST) {
23704 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23705 							Z_ADDREF_P(value);
23706 						}
23707 					} else if (IS_VAR != IS_TMP_VAR) {
23708 						if (Z_ISREF_P(value)) {
23709 							if (IS_VAR == IS_VAR) {
23710 								zend_reference *ref = Z_REF_P(value);
23711 								if (GC_DELREF(ref) == 0) {
23712 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23713 									efree_size(ref, sizeof(zend_reference));
23714 									value = &tmp;
23715 								} else {
23716 									value = Z_REFVAL_P(value);
23717 									Z_TRY_ADDREF_P(value);
23718 								}
23719 							} else {
23720 								value = Z_REFVAL_P(value);
23721 								Z_TRY_ADDREF_P(value);
23722 							}
23723 						} else if (IS_VAR == IS_CV) {
23724 							Z_TRY_ADDREF_P(value);
23725 						}
23726 						}
23727 					zend_hash_add_new(zobj->properties, name, value);
23728 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23729 						ZVAL_COPY(EX_VAR(opline->result.var), value);
23730 					}
23731 					goto exit_assign_obj;
23732 				}
23733 			}
23734 		}
23735 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23736 	} else {
23737 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
23738 		if (UNEXPECTED(!name)) {
23739 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23740 			UNDEF_RESULT();
23741 			goto exit_assign_obj;
23742 		}
23743 	}
23744 
23745 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
23746 		ZVAL_DEREF(value);
23747 	}
23748 
23749 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
23750 
23751 	if (IS_CONST != IS_CONST) {
23752 		zend_tmp_string_release(tmp_name);
23753 	}
23754 
23755 free_and_exit_assign_obj:
23756 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
23757 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
23758 	}
23759 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
23760 exit_assign_obj:
23761 	if (garbage) {
23762 		GC_DTOR_NO_REF(garbage);
23763 	}
23764 
23765 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23766 	/* assign_obj has two opcodes! */
23767 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23768 }
23769 
23770 /* 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)23771 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23772 {
23773 	USE_OPLINE
23774 	zval *object, *value, tmp;
23775 	zend_object *zobj;
23776 	zend_string *name, *tmp_name;
23777 	zend_refcounted *garbage = NULL;
23778 
23779 	SAVE_OPLINE();
23780 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23781 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
23782 
23783 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
23784 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
23785 			object = Z_REFVAL_P(object);
23786 			goto assign_object;
23787 		}
23788 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
23789 		value = &EG(uninitialized_zval);
23790 		goto free_and_exit_assign_obj;
23791 	}
23792 
23793 assign_object:
23794 	zobj = Z_OBJ_P(object);
23795 	if (IS_CONST == IS_CONST) {
23796 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
23797 			void **cache_slot = CACHE_ADDR(opline->extended_value);
23798 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
23799 			zval *property_val;
23800 
23801 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
23802 				property_val = OBJ_PROP(zobj, prop_offset);
23803 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
23804 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
23805 
23806 					if (UNEXPECTED(prop_info != NULL)) {
23807 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
23808 						goto free_and_exit_assign_obj;
23809 					} else {
23810 fast_assign_obj:
23811 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
23812 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23813 							ZVAL_COPY(EX_VAR(opline->result.var), value);
23814 						}
23815 						goto exit_assign_obj;
23816 					}
23817 				}
23818 			} else {
23819 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23820 				if (EXPECTED(zobj->properties != NULL)) {
23821 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
23822 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
23823 							GC_DELREF(zobj->properties);
23824 						}
23825 						zobj->properties = zend_array_dup(zobj->properties);
23826 					}
23827 					property_val = zend_hash_find_known_hash(zobj->properties, name);
23828 					if (property_val) {
23829 						goto fast_assign_obj;
23830 					}
23831 				}
23832 
23833 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
23834 					if (EXPECTED(zobj->properties == NULL)) {
23835 						rebuild_object_properties(zobj);
23836 					}
23837 					if (IS_CV == IS_CONST) {
23838 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
23839 							Z_ADDREF_P(value);
23840 						}
23841 					} else if (IS_CV != IS_TMP_VAR) {
23842 						if (Z_ISREF_P(value)) {
23843 							if (IS_CV == IS_VAR) {
23844 								zend_reference *ref = Z_REF_P(value);
23845 								if (GC_DELREF(ref) == 0) {
23846 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
23847 									efree_size(ref, sizeof(zend_reference));
23848 									value = &tmp;
23849 								} else {
23850 									value = Z_REFVAL_P(value);
23851 									Z_TRY_ADDREF_P(value);
23852 								}
23853 							} else {
23854 								value = Z_REFVAL_P(value);
23855 								Z_TRY_ADDREF_P(value);
23856 							}
23857 						} else if (IS_CV == IS_CV) {
23858 							Z_TRY_ADDREF_P(value);
23859 						}
23860 						}
23861 					zend_hash_add_new(zobj->properties, name, value);
23862 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23863 						ZVAL_COPY(EX_VAR(opline->result.var), value);
23864 					}
23865 					goto exit_assign_obj;
23866 				}
23867 			}
23868 		}
23869 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
23870 	} else {
23871 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
23872 		if (UNEXPECTED(!name)) {
23873 
23874 			UNDEF_RESULT();
23875 			goto exit_assign_obj;
23876 		}
23877 	}
23878 
23879 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
23880 		ZVAL_DEREF(value);
23881 	}
23882 
23883 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
23884 
23885 	if (IS_CONST != IS_CONST) {
23886 		zend_tmp_string_release(tmp_name);
23887 	}
23888 
23889 free_and_exit_assign_obj:
23890 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
23891 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
23892 	}
23893 
23894 exit_assign_obj:
23895 	if (garbage) {
23896 		GC_DTOR_NO_REF(garbage);
23897 	}
23898 
23899 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
23900 	/* assign_obj has two opcodes! */
23901 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
23902 }
23903 
23904 /* 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)23905 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23906 {
23907 	USE_OPLINE
23908 	zval *object_ptr, *orig_object_ptr;
23909 	zval *value;
23910 	zval *variable_ptr;
23911 	zval *dim;
23912 	zend_refcounted *garbage = NULL;
23913 
23914 	SAVE_OPLINE();
23915 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
23916 
23917 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23918 try_assign_dim_array:
23919 		SEPARATE_ARRAY(object_ptr);
23920 		if (IS_CONST == IS_UNUSED) {
23921 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
23922 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
23923 				HashTable *ht = Z_ARRVAL_P(object_ptr);
23924 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
23925 					GC_ADDREF(ht);
23926 				}
23927 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23928 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
23929 					zend_array_destroy(ht);
23930 					goto assign_dim_error;
23931 				}
23932 			}
23933 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
23934 				ZVAL_DEREF(value);
23935 			}
23936 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
23937 			if (UNEXPECTED(value == NULL)) {
23938 				zend_cannot_add_element();
23939 				goto assign_dim_error;
23940 			} else if (IS_CONST == IS_CV) {
23941 				if (Z_REFCOUNTED_P(value)) {
23942 					Z_ADDREF_P(value);
23943 				}
23944 			} else if (IS_CONST == IS_VAR) {
23945 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
23946 				if (Z_ISREF_P(free_op_data)) {
23947 					if (Z_REFCOUNTED_P(value)) {
23948 						Z_ADDREF_P(value);
23949 					}
23950 					zval_ptr_dtor_nogc(free_op_data);
23951 				}
23952 			} else if (IS_CONST == IS_CONST) {
23953 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
23954 					Z_ADDREF_P(value);
23955 				}
23956 			}
23957 		} else {
23958 			dim = RT_CONSTANT(opline, opline->op2);
23959 			if (IS_CONST == IS_CONST) {
23960 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23961 			} else {
23962 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
23963 			}
23964 			if (UNEXPECTED(variable_ptr == NULL)) {
23965 				goto assign_dim_error;
23966 			}
23967 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
23968 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
23969 		}
23970 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
23971 			ZVAL_COPY(EX_VAR(opline->result.var), value);
23972 		}
23973 		if (garbage) {
23974 			GC_DTOR_NO_REF(garbage);
23975 		}
23976 	} else {
23977 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
23978 			object_ptr = Z_REFVAL_P(object_ptr);
23979 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
23980 				goto try_assign_dim_array;
23981 			}
23982 		}
23983 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
23984 			zend_object *obj = Z_OBJ_P(object_ptr);
23985 
23986 			GC_ADDREF(obj);
23987 			dim = RT_CONSTANT(opline, opline->op2);
23988 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
23989 				dim = ZVAL_UNDEFINED_OP2();
23990 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
23991 				dim++;
23992 			}
23993 
23994 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
23995 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
23996 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
23997 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
23998 				ZVAL_DEREF(value);
23999 			}
24000 
24001 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
24002 
24003 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
24004 				zend_objects_store_del(obj);
24005 			}
24006 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
24007 			if (IS_CONST == IS_UNUSED) {
24008 				zend_use_new_element_for_string();
24009 
24010 				UNDEF_RESULT();
24011 			} else {
24012 				dim = RT_CONSTANT(opline, opline->op2);
24013 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
24014 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
24015 
24016 			}
24017 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
24018 			if (Z_ISREF_P(orig_object_ptr)
24019 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
24020 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
24021 				dim = RT_CONSTANT(opline, opline->op2);
24022 
24023 				UNDEF_RESULT();
24024 			} else {
24025 				HashTable *ht = zend_new_array(8);
24026 				uint8_t old_type = Z_TYPE_P(object_ptr);
24027 
24028 				ZVAL_ARR(object_ptr, ht);
24029 				if (UNEXPECTED(old_type == IS_FALSE)) {
24030 					GC_ADDREF(ht);
24031 					zend_false_to_array_deprecated();
24032 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
24033 						zend_array_destroy(ht);
24034 						goto assign_dim_error;
24035 					}
24036 				}
24037 				goto try_assign_dim_array;
24038 			}
24039 		} else {
24040 			zend_use_scalar_as_array();
24041 			dim = RT_CONSTANT(opline, opline->op2);
24042 assign_dim_error:
24043 
24044 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24045 				ZVAL_NULL(EX_VAR(opline->result.var));
24046 			}
24047 		}
24048 	}
24049 	if (IS_CONST != IS_UNUSED) {
24050 
24051 	}
24052 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24053 	/* assign_dim has two opcodes! */
24054 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24055 }
24056 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24057 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24058 {
24059 	USE_OPLINE
24060 	zval *object_ptr, *orig_object_ptr;
24061 	zval *value;
24062 	zval *variable_ptr;
24063 	zval *dim;
24064 	zend_refcounted *garbage = NULL;
24065 
24066 	SAVE_OPLINE();
24067 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24068 
24069 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24070 try_assign_dim_array:
24071 		SEPARATE_ARRAY(object_ptr);
24072 		if (IS_CONST == IS_UNUSED) {
24073 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
24074 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
24075 				HashTable *ht = Z_ARRVAL_P(object_ptr);
24076 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
24077 					GC_ADDREF(ht);
24078 				}
24079 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
24080 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
24081 					zend_array_destroy(ht);
24082 					goto assign_dim_error;
24083 				}
24084 			}
24085 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
24086 				ZVAL_DEREF(value);
24087 			}
24088 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
24089 			if (UNEXPECTED(value == NULL)) {
24090 				zend_cannot_add_element();
24091 				goto assign_dim_error;
24092 			} else if (IS_TMP_VAR == IS_CV) {
24093 				if (Z_REFCOUNTED_P(value)) {
24094 					Z_ADDREF_P(value);
24095 				}
24096 			} else if (IS_TMP_VAR == IS_VAR) {
24097 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
24098 				if (Z_ISREF_P(free_op_data)) {
24099 					if (Z_REFCOUNTED_P(value)) {
24100 						Z_ADDREF_P(value);
24101 					}
24102 					zval_ptr_dtor_nogc(free_op_data);
24103 				}
24104 			} else if (IS_TMP_VAR == IS_CONST) {
24105 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
24106 					Z_ADDREF_P(value);
24107 				}
24108 			}
24109 		} else {
24110 			dim = RT_CONSTANT(opline, opline->op2);
24111 			if (IS_CONST == IS_CONST) {
24112 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
24113 			} else {
24114 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
24115 			}
24116 			if (UNEXPECTED(variable_ptr == NULL)) {
24117 				goto assign_dim_error;
24118 			}
24119 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
24120 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
24121 		}
24122 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24123 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24124 		}
24125 		if (garbage) {
24126 			GC_DTOR_NO_REF(garbage);
24127 		}
24128 	} else {
24129 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
24130 			object_ptr = Z_REFVAL_P(object_ptr);
24131 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24132 				goto try_assign_dim_array;
24133 			}
24134 		}
24135 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
24136 			zend_object *obj = Z_OBJ_P(object_ptr);
24137 
24138 			GC_ADDREF(obj);
24139 			dim = RT_CONSTANT(opline, opline->op2);
24140 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
24141 				dim = ZVAL_UNDEFINED_OP2();
24142 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
24143 				dim++;
24144 			}
24145 
24146 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
24147 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
24148 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
24149 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
24150 				ZVAL_DEREF(value);
24151 			}
24152 
24153 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
24154 
24155 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24156 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
24157 				zend_objects_store_del(obj);
24158 			}
24159 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
24160 			if (IS_CONST == IS_UNUSED) {
24161 				zend_use_new_element_for_string();
24162 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24163 				UNDEF_RESULT();
24164 			} else {
24165 				dim = RT_CONSTANT(opline, opline->op2);
24166 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
24167 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
24168 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24169 			}
24170 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
24171 			if (Z_ISREF_P(orig_object_ptr)
24172 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
24173 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
24174 				dim = RT_CONSTANT(opline, opline->op2);
24175 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24176 				UNDEF_RESULT();
24177 			} else {
24178 				HashTable *ht = zend_new_array(8);
24179 				uint8_t old_type = Z_TYPE_P(object_ptr);
24180 
24181 				ZVAL_ARR(object_ptr, ht);
24182 				if (UNEXPECTED(old_type == IS_FALSE)) {
24183 					GC_ADDREF(ht);
24184 					zend_false_to_array_deprecated();
24185 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
24186 						zend_array_destroy(ht);
24187 						goto assign_dim_error;
24188 					}
24189 				}
24190 				goto try_assign_dim_array;
24191 			}
24192 		} else {
24193 			zend_use_scalar_as_array();
24194 			dim = RT_CONSTANT(opline, opline->op2);
24195 assign_dim_error:
24196 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24197 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24198 				ZVAL_NULL(EX_VAR(opline->result.var));
24199 			}
24200 		}
24201 	}
24202 	if (IS_CONST != IS_UNUSED) {
24203 
24204 	}
24205 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24206 	/* assign_dim has two opcodes! */
24207 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24208 }
24209 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24210 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24211 {
24212 	USE_OPLINE
24213 	zval *object_ptr, *orig_object_ptr;
24214 	zval *value;
24215 	zval *variable_ptr;
24216 	zval *dim;
24217 	zend_refcounted *garbage = NULL;
24218 
24219 	SAVE_OPLINE();
24220 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24221 
24222 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24223 try_assign_dim_array:
24224 		SEPARATE_ARRAY(object_ptr);
24225 		if (IS_CONST == IS_UNUSED) {
24226 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
24227 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
24228 				HashTable *ht = Z_ARRVAL_P(object_ptr);
24229 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
24230 					GC_ADDREF(ht);
24231 				}
24232 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
24233 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
24234 					zend_array_destroy(ht);
24235 					goto assign_dim_error;
24236 				}
24237 			}
24238 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
24239 				ZVAL_DEREF(value);
24240 			}
24241 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
24242 			if (UNEXPECTED(value == NULL)) {
24243 				zend_cannot_add_element();
24244 				goto assign_dim_error;
24245 			} else if (IS_VAR == IS_CV) {
24246 				if (Z_REFCOUNTED_P(value)) {
24247 					Z_ADDREF_P(value);
24248 				}
24249 			} else if (IS_VAR == IS_VAR) {
24250 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
24251 				if (Z_ISREF_P(free_op_data)) {
24252 					if (Z_REFCOUNTED_P(value)) {
24253 						Z_ADDREF_P(value);
24254 					}
24255 					zval_ptr_dtor_nogc(free_op_data);
24256 				}
24257 			} else if (IS_VAR == IS_CONST) {
24258 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
24259 					Z_ADDREF_P(value);
24260 				}
24261 			}
24262 		} else {
24263 			dim = RT_CONSTANT(opline, opline->op2);
24264 			if (IS_CONST == IS_CONST) {
24265 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
24266 			} else {
24267 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
24268 			}
24269 			if (UNEXPECTED(variable_ptr == NULL)) {
24270 				goto assign_dim_error;
24271 			}
24272 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
24273 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
24274 		}
24275 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24276 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24277 		}
24278 		if (garbage) {
24279 			GC_DTOR_NO_REF(garbage);
24280 		}
24281 	} else {
24282 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
24283 			object_ptr = Z_REFVAL_P(object_ptr);
24284 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24285 				goto try_assign_dim_array;
24286 			}
24287 		}
24288 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
24289 			zend_object *obj = Z_OBJ_P(object_ptr);
24290 
24291 			GC_ADDREF(obj);
24292 			dim = RT_CONSTANT(opline, opline->op2);
24293 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
24294 				dim = ZVAL_UNDEFINED_OP2();
24295 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
24296 				dim++;
24297 			}
24298 
24299 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
24300 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
24301 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
24302 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
24303 				ZVAL_DEREF(value);
24304 			}
24305 
24306 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
24307 
24308 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24309 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
24310 				zend_objects_store_del(obj);
24311 			}
24312 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
24313 			if (IS_CONST == IS_UNUSED) {
24314 				zend_use_new_element_for_string();
24315 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24316 				UNDEF_RESULT();
24317 			} else {
24318 				dim = RT_CONSTANT(opline, opline->op2);
24319 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
24320 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
24321 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24322 			}
24323 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
24324 			if (Z_ISREF_P(orig_object_ptr)
24325 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
24326 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
24327 				dim = RT_CONSTANT(opline, opline->op2);
24328 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24329 				UNDEF_RESULT();
24330 			} else {
24331 				HashTable *ht = zend_new_array(8);
24332 				uint8_t old_type = Z_TYPE_P(object_ptr);
24333 
24334 				ZVAL_ARR(object_ptr, ht);
24335 				if (UNEXPECTED(old_type == IS_FALSE)) {
24336 					GC_ADDREF(ht);
24337 					zend_false_to_array_deprecated();
24338 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
24339 						zend_array_destroy(ht);
24340 						goto assign_dim_error;
24341 					}
24342 				}
24343 				goto try_assign_dim_array;
24344 			}
24345 		} else {
24346 			zend_use_scalar_as_array();
24347 			dim = RT_CONSTANT(opline, opline->op2);
24348 assign_dim_error:
24349 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24350 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24351 				ZVAL_NULL(EX_VAR(opline->result.var));
24352 			}
24353 		}
24354 	}
24355 	if (IS_CONST != IS_UNUSED) {
24356 
24357 	}
24358 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24359 	/* assign_dim has two opcodes! */
24360 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24361 }
24362 
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24363 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24364 {
24365 	USE_OPLINE
24366 	zval *object_ptr, *orig_object_ptr;
24367 	zval *value;
24368 	zval *variable_ptr;
24369 	zval *dim;
24370 	zend_refcounted *garbage = NULL;
24371 
24372 	SAVE_OPLINE();
24373 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24374 
24375 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24376 try_assign_dim_array:
24377 		SEPARATE_ARRAY(object_ptr);
24378 		if (IS_CONST == IS_UNUSED) {
24379 			value = EX_VAR((opline+1)->op1.var);
24380 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
24381 				HashTable *ht = Z_ARRVAL_P(object_ptr);
24382 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
24383 					GC_ADDREF(ht);
24384 				}
24385 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
24386 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
24387 					zend_array_destroy(ht);
24388 					goto assign_dim_error;
24389 				}
24390 			}
24391 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
24392 				ZVAL_DEREF(value);
24393 			}
24394 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
24395 			if (UNEXPECTED(value == NULL)) {
24396 				zend_cannot_add_element();
24397 				goto assign_dim_error;
24398 			} else if (IS_CV == IS_CV) {
24399 				if (Z_REFCOUNTED_P(value)) {
24400 					Z_ADDREF_P(value);
24401 				}
24402 			} else if (IS_CV == IS_VAR) {
24403 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
24404 				if (Z_ISREF_P(free_op_data)) {
24405 					if (Z_REFCOUNTED_P(value)) {
24406 						Z_ADDREF_P(value);
24407 					}
24408 					zval_ptr_dtor_nogc(free_op_data);
24409 				}
24410 			} else if (IS_CV == IS_CONST) {
24411 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
24412 					Z_ADDREF_P(value);
24413 				}
24414 			}
24415 		} else {
24416 			dim = RT_CONSTANT(opline, opline->op2);
24417 			if (IS_CONST == IS_CONST) {
24418 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
24419 			} else {
24420 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
24421 			}
24422 			if (UNEXPECTED(variable_ptr == NULL)) {
24423 				goto assign_dim_error;
24424 			}
24425 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
24426 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
24427 		}
24428 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24429 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24430 		}
24431 		if (garbage) {
24432 			GC_DTOR_NO_REF(garbage);
24433 		}
24434 	} else {
24435 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
24436 			object_ptr = Z_REFVAL_P(object_ptr);
24437 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
24438 				goto try_assign_dim_array;
24439 			}
24440 		}
24441 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
24442 			zend_object *obj = Z_OBJ_P(object_ptr);
24443 
24444 			GC_ADDREF(obj);
24445 			dim = RT_CONSTANT(opline, opline->op2);
24446 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
24447 				dim = ZVAL_UNDEFINED_OP2();
24448 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
24449 				dim++;
24450 			}
24451 
24452 			value = EX_VAR((opline+1)->op1.var);
24453 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
24454 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
24455 			} else if (IS_CV & (IS_CV|IS_VAR)) {
24456 				ZVAL_DEREF(value);
24457 			}
24458 
24459 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
24460 
24461 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
24462 				zend_objects_store_del(obj);
24463 			}
24464 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
24465 			if (IS_CONST == IS_UNUSED) {
24466 				zend_use_new_element_for_string();
24467 
24468 				UNDEF_RESULT();
24469 			} else {
24470 				dim = RT_CONSTANT(opline, opline->op2);
24471 				value = EX_VAR((opline+1)->op1.var);
24472 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
24473 
24474 			}
24475 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
24476 			if (Z_ISREF_P(orig_object_ptr)
24477 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
24478 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
24479 				dim = RT_CONSTANT(opline, opline->op2);
24480 
24481 				UNDEF_RESULT();
24482 			} else {
24483 				HashTable *ht = zend_new_array(8);
24484 				uint8_t old_type = Z_TYPE_P(object_ptr);
24485 
24486 				ZVAL_ARR(object_ptr, ht);
24487 				if (UNEXPECTED(old_type == IS_FALSE)) {
24488 					GC_ADDREF(ht);
24489 					zend_false_to_array_deprecated();
24490 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
24491 						zend_array_destroy(ht);
24492 						goto assign_dim_error;
24493 					}
24494 				}
24495 				goto try_assign_dim_array;
24496 			}
24497 		} else {
24498 			zend_use_scalar_as_array();
24499 			dim = RT_CONSTANT(opline, opline->op2);
24500 assign_dim_error:
24501 
24502 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
24503 				ZVAL_NULL(EX_VAR(opline->result.var));
24504 			}
24505 		}
24506 	}
24507 	if (IS_CONST != IS_UNUSED) {
24508 
24509 	}
24510 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24511 	/* assign_dim has two opcodes! */
24512 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24513 }
24514 
ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24515 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24516 {
24517 	USE_OPLINE
24518 	zval *value;
24519 	zval *variable_ptr;
24520 
24521 	SAVE_OPLINE();
24522 	value = RT_CONSTANT(opline, opline->op2);
24523 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24524 
24525 	if (0 || UNEXPECTED(0)) {
24526 		zend_refcounted *garbage = NULL;
24527 
24528 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
24529 		if (UNEXPECTED(0)) {
24530 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24531 		}
24532 		if (garbage) {
24533 			GC_DTOR_NO_REF(garbage);
24534 		}
24535 	} else {
24536 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
24537 	}
24538 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24539 	/* zend_assign_to_variable() always takes care of op2, never free it! */
24540 
24541 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24542 }
24543 
ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24544 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24545 {
24546 	USE_OPLINE
24547 	zval *value;
24548 	zval *variable_ptr;
24549 
24550 	SAVE_OPLINE();
24551 	value = RT_CONSTANT(opline, opline->op2);
24552 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24553 
24554 	if (0 || UNEXPECTED(1)) {
24555 		zend_refcounted *garbage = NULL;
24556 
24557 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
24558 		if (UNEXPECTED(1)) {
24559 			ZVAL_COPY(EX_VAR(opline->result.var), value);
24560 		}
24561 		if (garbage) {
24562 			GC_DTOR_NO_REF(garbage);
24563 		}
24564 	} else {
24565 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
24566 	}
24567 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24568 	/* zend_assign_to_variable() always takes care of op2, never free it! */
24569 
24570 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24571 }
24572 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24573 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24574 {
24575 	USE_OPLINE
24576 	zval *property, *container, *value_ptr;
24577 
24578 	SAVE_OPLINE();
24579 
24580 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24581 	property = RT_CONSTANT(opline, opline->op2);
24582 
24583 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
24584 
24585 	if (1) {
24586 		if (IS_VAR == IS_UNUSED) {
24587 			if (IS_CONST == IS_CONST) {
24588 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24589 			} else {
24590 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24591 			}
24592 		} else {
24593 			if (IS_CONST == IS_CONST) {
24594 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24595 			} else {
24596 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24597 			}
24598 		}
24599 	} else {
24600 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24601 	}
24602 
24603 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24604 
24605 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
24606 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24607 }
24608 
24609 /* 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)24610 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24611 {
24612 	USE_OPLINE
24613 	zval *property, *container, *value_ptr;
24614 
24615 	SAVE_OPLINE();
24616 
24617 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24618 	property = RT_CONSTANT(opline, opline->op2);
24619 
24620 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
24621 
24622 	if (1) {
24623 		if (IS_VAR == IS_UNUSED) {
24624 			if (IS_CONST == IS_CONST) {
24625 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24626 			} else {
24627 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24628 			}
24629 		} else {
24630 			if (IS_CONST == IS_CONST) {
24631 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24632 			} else {
24633 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24634 			}
24635 		}
24636 	} else {
24637 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
24638 	}
24639 
24640 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24641 
24642 
24643 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
24644 }
24645 
24646 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24647 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24648 {
24649 	USE_OPLINE
24650 	zval *function_name;
24651 	zend_class_entry *ce;
24652 	uint32_t call_info;
24653 	zend_function *fbc;
24654 	zend_execute_data *call;
24655 
24656 	SAVE_OPLINE();
24657 
24658 	if (IS_VAR == IS_CONST) {
24659 		/* no function found. try a static method in class */
24660 		ce = CACHED_PTR(opline->result.num);
24661 		if (UNEXPECTED(ce == NULL)) {
24662 			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);
24663 			if (UNEXPECTED(ce == NULL)) {
24664 
24665 				HANDLE_EXCEPTION();
24666 			}
24667 			if (IS_CONST != IS_CONST) {
24668 				CACHE_PTR(opline->result.num, ce);
24669 			}
24670 		}
24671 	} else if (IS_VAR == IS_UNUSED) {
24672 		ce = zend_fetch_class(NULL, opline->op1.num);
24673 		if (UNEXPECTED(ce == NULL)) {
24674 
24675 			HANDLE_EXCEPTION();
24676 		}
24677 	} else {
24678 		ce = Z_CE_P(EX_VAR(opline->op1.var));
24679 	}
24680 
24681 	if (IS_VAR == IS_CONST &&
24682 	    IS_CONST == IS_CONST &&
24683 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
24684 		/* nothing to do */
24685 	} else if (IS_VAR != IS_CONST &&
24686 	           IS_CONST == IS_CONST &&
24687 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
24688 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
24689 	} else if (IS_CONST != IS_UNUSED) {
24690 		function_name = RT_CONSTANT(opline, opline->op2);
24691 		if (IS_CONST != IS_CONST) {
24692 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
24693 				do {
24694 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
24695 						function_name = Z_REFVAL_P(function_name);
24696 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
24697 							break;
24698 						}
24699 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
24700 						ZVAL_UNDEFINED_OP2();
24701 						if (UNEXPECTED(EG(exception) != NULL)) {
24702 							HANDLE_EXCEPTION();
24703 						}
24704 					}
24705 					zend_throw_error(NULL, "Method name must be a string");
24706 
24707 					HANDLE_EXCEPTION();
24708 				} while (0);
24709 			}
24710 		}
24711 
24712 		if (ce->get_static_method) {
24713 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
24714 		} else {
24715 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
24716 		}
24717 		if (UNEXPECTED(fbc == NULL)) {
24718 			if (EXPECTED(!EG(exception))) {
24719 				zend_undefined_method(ce, Z_STR_P(function_name));
24720 			}
24721 
24722 			HANDLE_EXCEPTION();
24723 		}
24724 		if (IS_CONST == IS_CONST &&
24725 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
24726 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
24727 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
24728 		}
24729 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
24730 			init_func_run_time_cache(&fbc->op_array);
24731 		}
24732 		if (IS_CONST != IS_CONST) {
24733 
24734 		}
24735 	} else {
24736 		if (UNEXPECTED(ce->constructor == NULL)) {
24737 			zend_throw_error(NULL, "Cannot call constructor");
24738 			HANDLE_EXCEPTION();
24739 		}
24740 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
24741 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
24742 			HANDLE_EXCEPTION();
24743 		}
24744 		fbc = ce->constructor;
24745 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
24746 			init_func_run_time_cache(&fbc->op_array);
24747 		}
24748 	}
24749 
24750 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
24751 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
24752 			ce = (zend_class_entry*)Z_OBJ(EX(This));
24753 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
24754 		} else {
24755 			zend_non_static_method_call(fbc);
24756 			HANDLE_EXCEPTION();
24757 		}
24758 	} else {
24759 		/* previous opcode is ZEND_FETCH_CLASS */
24760 		if (IS_VAR == IS_UNUSED
24761 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
24762 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
24763 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
24764 				ce = Z_OBJCE(EX(This));
24765 			} else {
24766 				ce = Z_CE(EX(This));
24767 			}
24768 		}
24769 		call_info = ZEND_CALL_NESTED_FUNCTION;
24770 	}
24771 
24772 	call = zend_vm_stack_push_call_frame(call_info,
24773 		fbc, opline->extended_value, ce);
24774 	call->prev_execute_data = EX(call);
24775 	EX(call) = call;
24776 
24777 	ZEND_VM_NEXT_OPCODE();
24778 }
24779 
ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24780 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24781 {
24782 	USE_OPLINE
24783 	zval *varptr, *arg;
24784 
24785 	if (IS_CONST == IS_CONST) {
24786 		SAVE_OPLINE();
24787 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24788 		uint32_t arg_num;
24789 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24790 		if (UNEXPECTED(!arg)) {
24791 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24792 			HANDLE_EXCEPTION();
24793 		}
24794 	} else {
24795 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24796 	}
24797 
24798 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24799 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
24800 		SAVE_OPLINE();
24801 		ZVAL_UNDEFINED_OP1();
24802 		ZVAL_NULL(arg);
24803 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24804 	}
24805 
24806 	if (IS_VAR == IS_CV) {
24807 		ZVAL_COPY_DEREF(arg, varptr);
24808 	} else /* if (IS_VAR == IS_VAR) */ {
24809 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
24810 			zend_refcounted *ref = Z_COUNTED_P(varptr);
24811 
24812 			varptr = Z_REFVAL_P(varptr);
24813 			ZVAL_COPY_VALUE(arg, varptr);
24814 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
24815 				efree_size(ref, sizeof(zend_reference));
24816 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
24817 				Z_ADDREF_P(arg);
24818 			}
24819 		} else {
24820 			ZVAL_COPY_VALUE(arg, varptr);
24821 		}
24822 	}
24823 
24824 	ZEND_VM_NEXT_OPCODE();
24825 }
24826 
ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24827 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24828 {
24829 	USE_OPLINE
24830 	zval *varptr, *arg;
24831 
24832 	if (IS_CONST == IS_CONST) {
24833 		SAVE_OPLINE();
24834 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24835 		uint32_t arg_num;
24836 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24837 		if (UNEXPECTED(!arg)) {
24838 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24839 			HANDLE_EXCEPTION();
24840 		}
24841 	} else {
24842 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24843 	}
24844 
24845 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24846 	ZVAL_COPY_VALUE(arg, varptr);
24847 
24848 	if (EXPECTED(Z_ISREF_P(varptr))) {
24849 		ZEND_VM_NEXT_OPCODE();
24850 	}
24851 
24852 	SAVE_OPLINE();
24853 	ZVAL_NEW_REF(arg, arg);
24854 	zend_error(E_NOTICE, "Only variables should be passed by reference");
24855 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24856 }
24857 
ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24858 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24859 {
24860 	USE_OPLINE
24861 	zval *varptr, *arg;
24862 	uint32_t arg_num;
24863 
24864 	if (IS_CONST == IS_CONST) {
24865 		SAVE_OPLINE();
24866 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24867 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24868 		if (UNEXPECTED(!arg)) {
24869 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24870 			HANDLE_EXCEPTION();
24871 		}
24872 	} else {
24873 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24874 		arg_num = opline->op2.num;
24875 	}
24876 
24877 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
24878 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
24879 			goto send_var;
24880 		}
24881 
24882 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24883 		ZVAL_COPY_VALUE(arg, varptr);
24884 
24885 		if (EXPECTED(Z_ISREF_P(varptr) ||
24886 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
24887 			ZEND_VM_NEXT_OPCODE();
24888 		}
24889 	} else {
24890 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
24891 			goto send_var;
24892 		}
24893 
24894 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24895 		ZVAL_COPY_VALUE(arg, varptr);
24896 
24897 		if (EXPECTED(Z_ISREF_P(varptr) ||
24898 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
24899 			ZEND_VM_NEXT_OPCODE();
24900 		}
24901 	}
24902 
24903 	SAVE_OPLINE();
24904 	ZVAL_NEW_REF(arg, arg);
24905 	zend_error(E_NOTICE, "Only variables should be passed by reference");
24906 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24907 
24908 send_var:
24909 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24910 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
24911 		zend_refcounted *ref = Z_COUNTED_P(varptr);
24912 
24913 		varptr = Z_REFVAL_P(varptr);
24914 		ZVAL_COPY_VALUE(arg, varptr);
24915 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
24916 			efree_size(ref, sizeof(zend_reference));
24917 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
24918 			Z_ADDREF_P(arg);
24919 		}
24920 	} else {
24921 		ZVAL_COPY_VALUE(arg, varptr);
24922 	}
24923 	ZEND_VM_NEXT_OPCODE();
24924 }
24925 
ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24926 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24927 {
24928 	USE_OPLINE
24929 	zval *varptr, *arg;
24930 
24931 	SAVE_OPLINE();
24932 	if (IS_CONST == IS_CONST) {
24933 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24934 		uint32_t arg_num;
24935 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24936 		if (UNEXPECTED(!arg)) {
24937 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24938 			HANDLE_EXCEPTION();
24939 		}
24940 	} else {
24941 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24942 	}
24943 
24944 	varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24945 	if (Z_ISREF_P(varptr)) {
24946 		Z_ADDREF_P(varptr);
24947 	} else {
24948 		ZVAL_MAKE_REF_EX(varptr, 2);
24949 	}
24950 	ZVAL_REF(arg, Z_REF_P(varptr));
24951 
24952 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24953 	ZEND_VM_NEXT_OPCODE();
24954 }
24955 
ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)24956 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24957 {
24958 	USE_OPLINE
24959 	zval *varptr, *arg;
24960 	uint32_t arg_num;
24961 
24962 	if (IS_CONST == IS_CONST) {
24963 		SAVE_OPLINE();
24964 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
24965 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
24966 		if (UNEXPECTED(!arg)) {
24967 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24968 			HANDLE_EXCEPTION();
24969 		}
24970 	} else {
24971 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
24972 		arg_num = opline->op2.num;
24973 	}
24974 
24975 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
24976 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
24977 			goto send_var_by_ref;
24978 		}
24979 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
24980 send_var_by_ref:
24981 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24982 		if (Z_ISREF_P(varptr)) {
24983 			Z_ADDREF_P(varptr);
24984 		} else {
24985 			ZVAL_MAKE_REF_EX(varptr, 2);
24986 		}
24987 		ZVAL_REF(arg, Z_REF_P(varptr));
24988 
24989 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
24990 		ZEND_VM_NEXT_OPCODE();
24991 	}
24992 
24993 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
24994 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
24995 		SAVE_OPLINE();
24996 		ZVAL_UNDEFINED_OP1();
24997 		ZVAL_NULL(arg);
24998 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
24999 	}
25000 
25001 	if (IS_VAR == IS_CV) {
25002 		ZVAL_COPY_DEREF(arg, varptr);
25003 	} else /* if (IS_VAR == IS_VAR) */ {
25004 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
25005 			zend_refcounted *ref = Z_COUNTED_P(varptr);
25006 
25007 			varptr = Z_REFVAL_P(varptr);
25008 			ZVAL_COPY_VALUE(arg, varptr);
25009 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
25010 				efree_size(ref, sizeof(zend_reference));
25011 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
25012 				Z_ADDREF_P(arg);
25013 			}
25014 		} else {
25015 			ZVAL_COPY_VALUE(arg, varptr);
25016 		}
25017 	}
25018 
25019 	ZEND_VM_NEXT_OPCODE();
25020 }
25021 
ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25022 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25023 {
25024 	USE_OPLINE
25025 	zval *varptr, *arg;
25026 
25027 	if (IS_CONST == IS_CONST) {
25028 		// TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
25029 		SAVE_OPLINE();
25030 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
25031 		uint32_t arg_num;
25032 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
25033 		if (UNEXPECTED(!arg)) {
25034 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25035 			HANDLE_EXCEPTION();
25036 		}
25037 	} else {
25038 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
25039 	}
25040 
25041 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
25042 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25043 		if (Z_ISREF_P(varptr)) {
25044 			Z_ADDREF_P(varptr);
25045 		} else {
25046 			ZVAL_MAKE_REF_EX(varptr, 2);
25047 		}
25048 		ZVAL_REF(arg, Z_REF_P(varptr));
25049 
25050 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25051 		ZEND_VM_NEXT_OPCODE();
25052 	}
25053 
25054 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25055 
25056 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
25057 		zend_refcounted *ref = Z_COUNTED_P(varptr);
25058 
25059 		varptr = Z_REFVAL_P(varptr);
25060 		ZVAL_COPY_VALUE(arg, varptr);
25061 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
25062 			efree_size(ref, sizeof(zend_reference));
25063 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
25064 			Z_ADDREF_P(arg);
25065 		}
25066 	} else {
25067 		ZVAL_COPY_VALUE(arg, varptr);
25068 	}
25069 
25070 	ZEND_VM_NEXT_OPCODE();
25071 }
25072 
ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25073 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25074 {
25075 	zend_class_entry *ce, *scope;
25076 	zend_class_constant *c;
25077 	zval *value, *zv, *constant_zv;
25078 	zend_string *constant_name;
25079 	USE_OPLINE
25080 
25081 	SAVE_OPLINE();
25082 
25083 	do {
25084 		if (IS_VAR == IS_CONST && IS_CONST == IS_CONST) {
25085 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
25086 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
25087 				break;
25088 			}
25089 		}
25090 		if (IS_VAR == IS_CONST) {
25091 			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
25092 				ce = CACHED_PTR(opline->extended_value);
25093 			} else {
25094 				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);
25095 				if (UNEXPECTED(ce == NULL)) {
25096 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25097 
25098 					HANDLE_EXCEPTION();
25099 				}
25100 				CACHE_PTR(opline->extended_value, ce);
25101 			}
25102 		} else if (IS_VAR == IS_UNUSED) {
25103 			ce = zend_fetch_class(NULL, opline->op1.num);
25104 			if (UNEXPECTED(ce == NULL)) {
25105 				ZVAL_UNDEF(EX_VAR(opline->result.var));
25106 
25107 				HANDLE_EXCEPTION();
25108 			}
25109 		} else {
25110 			ce = Z_CE_P(EX_VAR(opline->op1.var));
25111 		}
25112 		if (IS_VAR != IS_CONST
25113 			&& IS_CONST == IS_CONST
25114 			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
25115 			value = CACHED_PTR(opline->extended_value + sizeof(void*));
25116 			break;
25117 		}
25118 
25119 		constant_zv = RT_CONSTANT(opline, opline->op2);
25120 		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
25121 			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
25122 			ZVAL_UNDEF(EX_VAR(opline->result.var));
25123 
25124 			HANDLE_EXCEPTION();
25125 		}
25126 		constant_name = Z_STR_P(constant_zv);
25127 		/* Magic 'class' for constant OP2 is caught at compile-time */
25128 		if (IS_CONST != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
25129 			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
25130 
25131 			ZEND_VM_NEXT_OPCODE();
25132 		}
25133 		zv = IS_CONST == IS_CONST
25134 			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
25135 			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);
25136 
25137 		if (EXPECTED(zv != NULL)) {
25138 			c = Z_PTR_P(zv);
25139 			scope = EX(func)->op_array.scope;
25140 			if (!zend_verify_const_access(c, scope)) {
25141 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25142 				ZVAL_UNDEF(EX_VAR(opline->result.var));
25143 
25144 				HANDLE_EXCEPTION();
25145 			}
25146 
25147 			if (ce->ce_flags & ZEND_ACC_TRAIT) {
25148 				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25149 				ZVAL_UNDEF(EX_VAR(opline->result.var));
25150 
25151 				HANDLE_EXCEPTION();
25152 			}
25153 
25154 			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
25155 			if (UNEXPECTED(is_constant_deprecated)) {
25156 				zend_error(E_DEPRECATED, "Constant %s::%s is deprecated", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25157 
25158 				if (EG(exception)) {
25159 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25160 
25161 					HANDLE_EXCEPTION();
25162 				}
25163 			}
25164 
25165 			value = &c->value;
25166 			// Enums require loading of all class constants to build the backed enum table
25167 			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
25168 				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
25169 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25170 
25171 					HANDLE_EXCEPTION();
25172 				}
25173 			}
25174 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
25175 				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
25176 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25177 
25178 					HANDLE_EXCEPTION();
25179 				}
25180 			}
25181 			if (IS_CONST == IS_CONST && !is_constant_deprecated) {
25182 				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
25183 			}
25184 		} else {
25185 			zend_throw_error(NULL, "Undefined constant %s::%s",
25186 				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25187 			ZVAL_UNDEF(EX_VAR(opline->result.var));
25188 
25189 			HANDLE_EXCEPTION();
25190 		}
25191 	} while (0);
25192 
25193 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
25194 
25195 	ZEND_VM_NEXT_OPCODE();
25196 }
25197 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25198 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25199 {
25200 	USE_OPLINE
25201 	zval *expr_ptr, new_expr;
25202 
25203 	SAVE_OPLINE();
25204 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
25205 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
25206 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25207 		if (Z_ISREF_P(expr_ptr)) {
25208 			Z_ADDREF_P(expr_ptr);
25209 		} else {
25210 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
25211 		}
25212 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25213 	} else {
25214 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25215 		if (IS_VAR == IS_TMP_VAR) {
25216 			/* pass */
25217 		} else if (IS_VAR == IS_CONST) {
25218 			Z_TRY_ADDREF_P(expr_ptr);
25219 		} else if (IS_VAR == IS_CV) {
25220 			ZVAL_DEREF(expr_ptr);
25221 			Z_TRY_ADDREF_P(expr_ptr);
25222 		} else /* if (IS_VAR == IS_VAR) */ {
25223 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
25224 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
25225 
25226 				expr_ptr = Z_REFVAL_P(expr_ptr);
25227 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
25228 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
25229 					expr_ptr = &new_expr;
25230 					efree_size(ref, sizeof(zend_reference));
25231 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
25232 					Z_ADDREF_P(expr_ptr);
25233 				}
25234 			}
25235 		}
25236 	}
25237 
25238 	if (IS_CONST != IS_UNUSED) {
25239 		zval *offset = RT_CONSTANT(opline, opline->op2);
25240 		zend_string *str;
25241 		zend_ulong hval;
25242 
25243 add_again:
25244 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
25245 			str = Z_STR_P(offset);
25246 			if (IS_CONST != IS_CONST) {
25247 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
25248 					goto num_index;
25249 				}
25250 			}
25251 str_index:
25252 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
25253 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
25254 			hval = Z_LVAL_P(offset);
25255 num_index:
25256 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
25257 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
25258 			offset = Z_REFVAL_P(offset);
25259 			goto add_again;
25260 		} else if (Z_TYPE_P(offset) == IS_NULL) {
25261 			str = ZSTR_EMPTY_ALLOC();
25262 			goto str_index;
25263 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
25264 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
25265 			goto num_index;
25266 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
25267 			hval = 0;
25268 			goto num_index;
25269 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
25270 			hval = 1;
25271 			goto num_index;
25272 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
25273 			zend_use_resource_as_offset(offset);
25274 			hval = Z_RES_HANDLE_P(offset);
25275 			goto num_index;
25276 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
25277 			ZVAL_UNDEFINED_OP2();
25278 			str = ZSTR_EMPTY_ALLOC();
25279 			goto str_index;
25280 		} else {
25281 			zend_illegal_array_offset_access(offset);
25282 			zval_ptr_dtor_nogc(expr_ptr);
25283 		}
25284 
25285 	} else {
25286 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
25287 			zend_cannot_add_element();
25288 			zval_ptr_dtor_nogc(expr_ptr);
25289 		}
25290 	}
25291 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25292 }
25293 
ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25294 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25295 {
25296 	zval *array;
25297 	uint32_t size;
25298 	USE_OPLINE
25299 
25300 	array = EX_VAR(opline->result.var);
25301 	if (IS_VAR != IS_UNUSED) {
25302 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
25303 		ZVAL_ARR(array, zend_new_array(size));
25304 		/* Explicitly initialize array as not-packed if flag is set */
25305 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
25306 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
25307 		}
25308 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25309 	} else {
25310 		ZVAL_ARR(array, zend_new_array(0));
25311 		ZEND_VM_NEXT_OPCODE();
25312 	}
25313 }
25314 
ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25315 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25316 {
25317 	USE_OPLINE
25318 	zval *container;
25319 	zval *offset;
25320 	zend_ulong hval;
25321 	zend_string *key;
25322 
25323 	SAVE_OPLINE();
25324 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25325 	offset = RT_CONSTANT(opline, opline->op2);
25326 
25327 	do {
25328 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
25329 			HashTable *ht;
25330 
25331 unset_dim_array:
25332 			SEPARATE_ARRAY(container);
25333 			ht = Z_ARRVAL_P(container);
25334 offset_again:
25335 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
25336 				key = Z_STR_P(offset);
25337 				if (IS_CONST != IS_CONST) {
25338 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
25339 						goto num_index_dim;
25340 					}
25341 				}
25342 str_index_dim:
25343 				ZEND_ASSERT(ht != &EG(symbol_table));
25344 				zend_hash_del(ht, key);
25345 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
25346 				hval = Z_LVAL_P(offset);
25347 num_index_dim:
25348 				zend_hash_index_del(ht, hval);
25349 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
25350 				offset = Z_REFVAL_P(offset);
25351 				goto offset_again;
25352 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
25353 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
25354 				goto num_index_dim;
25355 			} else if (Z_TYPE_P(offset) == IS_NULL) {
25356 				key = ZSTR_EMPTY_ALLOC();
25357 				goto str_index_dim;
25358 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
25359 				hval = 0;
25360 				goto num_index_dim;
25361 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
25362 				hval = 1;
25363 				goto num_index_dim;
25364 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
25365 				zend_use_resource_as_offset(offset);
25366 				hval = Z_RES_HANDLE_P(offset);
25367 				goto num_index_dim;
25368 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
25369 				ZVAL_UNDEFINED_OP2();
25370 				key = ZSTR_EMPTY_ALLOC();
25371 				goto str_index_dim;
25372 			} else {
25373 				zend_illegal_array_offset_unset(offset);
25374 			}
25375 			break;
25376 		} else if (Z_ISREF_P(container)) {
25377 			container = Z_REFVAL_P(container);
25378 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
25379 				goto unset_dim_array;
25380 			}
25381 		}
25382 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
25383 			container = ZVAL_UNDEFINED_OP1();
25384 		}
25385 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
25386 			offset = ZVAL_UNDEFINED_OP2();
25387 		}
25388 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
25389 			if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
25390 				offset++;
25391 			}
25392 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
25393 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
25394 			zend_throw_error(NULL, "Cannot unset string offsets");
25395 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
25396 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
25397 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
25398 			zend_false_to_array_deprecated();
25399 		}
25400 	} while (0);
25401 
25402 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25403 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25404 }
25405 
ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25406 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25407 {
25408 	USE_OPLINE
25409 	zval *container;
25410 	zval *offset;
25411 	zend_string *name, *tmp_name;
25412 
25413 	SAVE_OPLINE();
25414 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25415 	offset = RT_CONSTANT(opline, opline->op2);
25416 
25417 	do {
25418 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
25419 			if (Z_ISREF_P(container)) {
25420 				container = Z_REFVAL_P(container);
25421 				if (Z_TYPE_P(container) != IS_OBJECT) {
25422 					if (IS_VAR == IS_CV
25423 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
25424 						ZVAL_UNDEFINED_OP1();
25425 					}
25426 					break;
25427 				}
25428 			} else {
25429 				break;
25430 			}
25431 		}
25432 		if (IS_CONST == IS_CONST) {
25433 			name = Z_STR_P(offset);
25434 		} else {
25435 			name = zval_try_get_tmp_string(offset, &tmp_name);
25436 			if (UNEXPECTED(!name)) {
25437 				break;
25438 			}
25439 		}
25440 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
25441 		if (IS_CONST != IS_CONST) {
25442 			zend_tmp_string_release(tmp_name);
25443 		}
25444 	} while (0);
25445 
25446 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25447 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25448 }
25449 
ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25450 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25451 {
25452 	USE_OPLINE
25453 
25454 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
25455 
25456 	SAVE_OPLINE();
25457 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
25458 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
25459 	}
25460 
25461 	/* Destroy the previously yielded value */
25462 	zval_ptr_dtor(&generator->value);
25463 
25464 	/* Destroy the previously yielded key */
25465 	zval_ptr_dtor(&generator->key);
25466 
25467 	/* Set the new yielded value */
25468 	if (IS_VAR != IS_UNUSED) {
25469 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
25470 			/* Constants and temporary variables aren't yieldable by reference,
25471 			 * but we still allow them with a notice. */
25472 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
25473 				zval *value;
25474 
25475 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
25476 
25477 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25478 				ZVAL_COPY_VALUE(&generator->value, value);
25479 				if (IS_VAR == IS_CONST) {
25480 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
25481 						Z_ADDREF(generator->value);
25482 					}
25483 				}
25484 			} else {
25485 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25486 
25487 				/* If a function call result is yielded and the function did
25488 				 * not return by reference we throw a notice. */
25489 				do {
25490 					if (IS_VAR == IS_VAR) {
25491 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
25492 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
25493 						 && !Z_ISREF_P(value_ptr)) {
25494 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
25495 							ZVAL_COPY(&generator->value, value_ptr);
25496 							break;
25497 						}
25498 					}
25499 					if (Z_ISREF_P(value_ptr)) {
25500 						Z_ADDREF_P(value_ptr);
25501 					} else {
25502 						ZVAL_MAKE_REF_EX(value_ptr, 2);
25503 					}
25504 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
25505 				} while (0);
25506 
25507 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25508 			}
25509 		} else {
25510 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25511 
25512 			/* Consts, temporary variables and references need copying */
25513 			if (IS_VAR == IS_CONST) {
25514 				ZVAL_COPY_VALUE(&generator->value, value);
25515 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
25516 					Z_ADDREF(generator->value);
25517 				}
25518 			} else if (IS_VAR == IS_TMP_VAR) {
25519 				ZVAL_COPY_VALUE(&generator->value, value);
25520 			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
25521 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
25522 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25523 			} else {
25524 				ZVAL_COPY_VALUE(&generator->value, value);
25525 				if (IS_VAR == IS_CV) {
25526 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
25527 				}
25528 			}
25529 		}
25530 	} else {
25531 		/* If no value was specified yield null */
25532 		ZVAL_NULL(&generator->value);
25533 	}
25534 
25535 	/* Set the new yielded key */
25536 	if (IS_CONST != IS_UNUSED) {
25537 		zval *key = RT_CONSTANT(opline, opline->op2);
25538 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
25539 			key = Z_REFVAL_P(key);
25540 		}
25541 		ZVAL_COPY(&generator->key, key);
25542 
25543 		if (Z_TYPE(generator->key) == IS_LONG
25544 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
25545 		) {
25546 			generator->largest_used_integer_key = Z_LVAL(generator->key);
25547 		}
25548 	} else {
25549 		/* If no key was specified we use auto-increment keys */
25550 		generator->largest_used_integer_key++;
25551 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
25552 	}
25553 
25554 	if (RETURN_VALUE_USED(opline)) {
25555 		/* If the return value of yield is used set the send
25556 		 * target and initialize it to NULL */
25557 		generator->send_target = EX_VAR(opline->result.var);
25558 		ZVAL_NULL(generator->send_target);
25559 	} else {
25560 		generator->send_target = NULL;
25561 	}
25562 
25563 	/* We increment to the next op, so we are at the correct position when the
25564 	 * generator is resumed. */
25565 	ZEND_VM_INC_OPCODE();
25566 
25567 	/* The GOTO VM uses a local opline variable. We need to set the opline
25568 	 * variable in execute_data so we don't resume at an old position. */
25569 	SAVE_OPLINE();
25570 
25571 	ZEND_VM_RETURN();
25572 }
25573 
ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25574 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25575 {
25576 	USE_OPLINE
25577 	zval *op1;
25578 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
25579 	zval *result;
25580 
25581 	op1 = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25582 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
25583 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_VAR == IS_CONST);
25584 		if (IS_VAR & (IS_TMP_VAR|IS_VAR)) {
25585 			zval_ptr_dtor_str(op1);
25586 		}
25587 		ZEND_VM_SMART_BRANCH(result, 0);
25588 	}
25589 
25590 	if (opline->extended_value) {
25591 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
25592 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
25593 			ZEND_VM_SMART_BRANCH(result, 0);
25594 		}
25595 		SAVE_OPLINE();
25596 		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
25597 			op1 = Z_REFVAL_P(op1);
25598 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
25599 				result = zend_hash_find(ht, Z_STR_P(op1));
25600 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25601 				ZEND_VM_SMART_BRANCH(result, 0);
25602 			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
25603 				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
25604 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25605 				ZEND_VM_SMART_BRANCH(result, 0);
25606 			}
25607 		} else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
25608 			ZVAL_UNDEFINED_OP1();
25609 		}
25610 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
25611 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
25612 			SAVE_OPLINE();
25613 			ZVAL_UNDEFINED_OP1();
25614 			if (UNEXPECTED(EG(exception) != NULL)) {
25615 				HANDLE_EXCEPTION();
25616 			}
25617 		}
25618 		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
25619 		ZEND_VM_SMART_BRANCH(result, 0);
25620 	} else {
25621 		zend_string *key;
25622 		zval key_tmp;
25623 
25624 		if ((IS_VAR & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
25625 			op1 = Z_REFVAL_P(op1);
25626 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
25627 				result = zend_hash_find(ht, Z_STR_P(op1));
25628 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25629 				ZEND_VM_SMART_BRANCH(result, 0);
25630 			}
25631 		}
25632 
25633 		SAVE_OPLINE();
25634 		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
25635 			ZVAL_STR(&key_tmp, key);
25636 			if (zend_compare(op1, &key_tmp) == 0) {
25637 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25638 				ZEND_VM_SMART_BRANCH(1, 1);
25639 			}
25640 		} ZEND_HASH_FOREACH_END();
25641 	}
25642 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25643 	ZEND_VM_SMART_BRANCH(0, 1);
25644 }
25645 
ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25646 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25647 {
25648 	zend_class_entry *ce, *scope;
25649 	zend_class_constant *c;
25650 	zval *value, *zv, *constant_zv;
25651 	zend_string *constant_name;
25652 	USE_OPLINE
25653 
25654 	SAVE_OPLINE();
25655 
25656 	do {
25657 		if (IS_VAR == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
25658 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
25659 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
25660 				break;
25661 			}
25662 		}
25663 		if (IS_VAR == IS_CONST) {
25664 			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
25665 				ce = CACHED_PTR(opline->extended_value);
25666 			} else {
25667 				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);
25668 				if (UNEXPECTED(ce == NULL)) {
25669 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25670 					FREE_OP(opline->op2_type, opline->op2.var);
25671 					HANDLE_EXCEPTION();
25672 				}
25673 				CACHE_PTR(opline->extended_value, ce);
25674 			}
25675 		} else if (IS_VAR == IS_UNUSED) {
25676 			ce = zend_fetch_class(NULL, opline->op1.num);
25677 			if (UNEXPECTED(ce == NULL)) {
25678 				ZVAL_UNDEF(EX_VAR(opline->result.var));
25679 				FREE_OP(opline->op2_type, opline->op2.var);
25680 				HANDLE_EXCEPTION();
25681 			}
25682 		} else {
25683 			ce = Z_CE_P(EX_VAR(opline->op1.var));
25684 		}
25685 		if (IS_VAR != IS_CONST
25686 			&& (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
25687 			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
25688 			value = CACHED_PTR(opline->extended_value + sizeof(void*));
25689 			break;
25690 		}
25691 
25692 		constant_zv = _get_zval_ptr_tmpvarcv(opline->op2_type, opline->op2, BP_VAR_R EXECUTE_DATA_CC);
25693 		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
25694 			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
25695 			ZVAL_UNDEF(EX_VAR(opline->result.var));
25696 			FREE_OP(opline->op2_type, opline->op2.var);
25697 			HANDLE_EXCEPTION();
25698 		}
25699 		constant_name = Z_STR_P(constant_zv);
25700 		/* Magic 'class' for constant OP2 is caught at compile-time */
25701 		if ((IS_TMP_VAR|IS_VAR|IS_CV) != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
25702 			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
25703 			FREE_OP(opline->op2_type, opline->op2.var);
25704 			ZEND_VM_NEXT_OPCODE();
25705 		}
25706 		zv = (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
25707 			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
25708 			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);
25709 
25710 		if (EXPECTED(zv != NULL)) {
25711 			c = Z_PTR_P(zv);
25712 			scope = EX(func)->op_array.scope;
25713 			if (!zend_verify_const_access(c, scope)) {
25714 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25715 				ZVAL_UNDEF(EX_VAR(opline->result.var));
25716 				FREE_OP(opline->op2_type, opline->op2.var);
25717 				HANDLE_EXCEPTION();
25718 			}
25719 
25720 			if (ce->ce_flags & ZEND_ACC_TRAIT) {
25721 				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25722 				ZVAL_UNDEF(EX_VAR(opline->result.var));
25723 				FREE_OP(opline->op2_type, opline->op2.var);
25724 				HANDLE_EXCEPTION();
25725 			}
25726 
25727 			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
25728 			if (UNEXPECTED(is_constant_deprecated)) {
25729 				zend_error(E_DEPRECATED, "Constant %s::%s is deprecated", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25730 
25731 				if (EG(exception)) {
25732 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25733 					FREE_OP(opline->op2_type, opline->op2.var);
25734 					HANDLE_EXCEPTION();
25735 				}
25736 			}
25737 
25738 			value = &c->value;
25739 			// Enums require loading of all class constants to build the backed enum table
25740 			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
25741 				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
25742 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25743 					FREE_OP(opline->op2_type, opline->op2.var);
25744 					HANDLE_EXCEPTION();
25745 				}
25746 			}
25747 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
25748 				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
25749 					ZVAL_UNDEF(EX_VAR(opline->result.var));
25750 					FREE_OP(opline->op2_type, opline->op2.var);
25751 					HANDLE_EXCEPTION();
25752 				}
25753 			}
25754 			if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && !is_constant_deprecated) {
25755 				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
25756 			}
25757 		} else {
25758 			zend_throw_error(NULL, "Undefined constant %s::%s",
25759 				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
25760 			ZVAL_UNDEF(EX_VAR(opline->result.var));
25761 			FREE_OP(opline->op2_type, opline->op2.var);
25762 			HANDLE_EXCEPTION();
25763 		}
25764 	} while (0);
25765 
25766 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
25767 
25768 	FREE_OP(opline->op2_type, opline->op2.var);
25769 	ZEND_VM_NEXT_OPCODE();
25770 }
25771 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25772 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25773 {
25774 	USE_OPLINE
25775 	zval *object;
25776 	zval *property;
25777 	zval *value;
25778 	zval *zptr;
25779 	void **cache_slot;
25780 	zend_property_info *prop_info;
25781 	zend_object *zobj;
25782 	zend_string *name, *tmp_name;
25783 
25784 	SAVE_OPLINE();
25785 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25786 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25787 
25788 	do {
25789 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
25790 
25791 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
25792 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
25793 				object = Z_REFVAL_P(object);
25794 				goto assign_op_object;
25795 			}
25796 			if (IS_VAR == IS_CV
25797 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
25798 				ZVAL_UNDEFINED_OP1();
25799 			}
25800 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
25801 			break;
25802 		}
25803 
25804 assign_op_object:
25805 		/* here we are sure we are dealing with an object */
25806 		zobj = Z_OBJ_P(object);
25807 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25808 			name = Z_STR_P(property);
25809 		} else {
25810 			name = zval_try_get_tmp_string(property, &tmp_name);
25811 			if (UNEXPECTED(!name)) {
25812 				UNDEF_RESULT();
25813 				break;
25814 			}
25815 		}
25816 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
25817 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
25818 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
25819 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25820 					ZVAL_NULL(EX_VAR(opline->result.var));
25821 				}
25822 			} else {
25823 				zval *orig_zptr = zptr;
25824 				zend_reference *ref;
25825 
25826 				do {
25827 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
25828 						ref = Z_REF_P(zptr);
25829 						zptr = Z_REFVAL_P(zptr);
25830 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
25831 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
25832 							break;
25833 						}
25834 					}
25835 
25836 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25837 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
25838 					} else {
25839 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
25840 					}
25841 					if (UNEXPECTED(prop_info)) {
25842 						/* special case for typed properties */
25843 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
25844 					} else {
25845 						zend_binary_op(zptr, zptr, value OPLINE_CC);
25846 					}
25847 				} while (0);
25848 
25849 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25850 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
25851 				}
25852 			}
25853 		} else {
25854 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
25855 		}
25856 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
25857 			zend_tmp_string_release(tmp_name);
25858 		}
25859 	} while (0);
25860 
25861 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
25862 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25863 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25864 	/* assign_obj has two opcodes! */
25865 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25866 }
25867 
25868 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25869 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25870 {
25871 	USE_OPLINE
25872 	zval *var_ptr;
25873 	zval *value, *container, *dim;
25874 	HashTable *ht;
25875 
25876 	SAVE_OPLINE();
25877 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25878 
25879 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
25880 assign_dim_op_array:
25881 		SEPARATE_ARRAY(container);
25882 		ht = Z_ARRVAL_P(container);
25883 assign_dim_op_new_array:
25884 		dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25885 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
25886 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
25887 			if (UNEXPECTED(!var_ptr)) {
25888 				zend_cannot_add_element();
25889 				goto assign_dim_op_ret_null;
25890 			}
25891 		} else {
25892 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
25893 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
25894 			} else {
25895 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
25896 			}
25897 			if (UNEXPECTED(!var_ptr)) {
25898 				goto assign_dim_op_ret_null;
25899 			}
25900 		}
25901 
25902 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
25903 
25904 		do {
25905 			if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
25906 				zend_reference *ref = Z_REF_P(var_ptr);
25907 				var_ptr = Z_REFVAL_P(var_ptr);
25908 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
25909 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
25910 					break;
25911 				}
25912 			}
25913 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
25914 		} while (0);
25915 
25916 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25917 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
25918 		}
25919 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
25920 	} else {
25921 		if (EXPECTED(Z_ISREF_P(container))) {
25922 			container = Z_REFVAL_P(container);
25923 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
25924 				goto assign_dim_op_array;
25925 			}
25926 		}
25927 
25928 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
25929 			zend_object *obj = Z_OBJ_P(container);
25930 
25931 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25932 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
25933 				dim++;
25934 			}
25935 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
25936 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
25937 			uint8_t old_type;
25938 
25939 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
25940 				ZVAL_UNDEFINED_OP1();
25941 			}
25942 			ht = zend_new_array(8);
25943 			old_type = Z_TYPE_P(container);
25944 			ZVAL_ARR(container, ht);
25945 			if (UNEXPECTED(old_type == IS_FALSE)) {
25946 				GC_ADDREF(ht);
25947 				zend_false_to_array_deprecated();
25948 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
25949 					zend_array_destroy(ht);
25950 					goto assign_dim_op_ret_null;
25951 				}
25952 			}
25953 			goto assign_dim_op_new_array;
25954 		} else {
25955 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25956 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
25957 assign_dim_op_ret_null:
25958 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
25959 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25960 				ZVAL_NULL(EX_VAR(opline->result.var));
25961 			}
25962 		}
25963 	}
25964 
25965 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25966 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25967 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
25968 }
25969 
ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)25970 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25971 {
25972 	USE_OPLINE
25973 	zval *var_ptr;
25974 	zval *value;
25975 
25976 	SAVE_OPLINE();
25977 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
25978 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
25979 
25980 	do {
25981 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
25982 			zend_reference *ref = Z_REF_P(var_ptr);
25983 			var_ptr = Z_REFVAL_P(var_ptr);
25984 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
25985 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
25986 				break;
25987 			}
25988 		}
25989 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
25990 	} while (0);
25991 
25992 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
25993 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
25994 	}
25995 
25996 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
25997 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
25998 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
25999 }
26000 
ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26001 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26002 {
26003 	USE_OPLINE
26004 	zval *object;
26005 	zval *property;
26006 	zval *zptr;
26007 	void **cache_slot;
26008 	zend_property_info *prop_info;
26009 	zend_object *zobj;
26010 	zend_string *name, *tmp_name;
26011 
26012 	SAVE_OPLINE();
26013 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26014 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26015 
26016 	do {
26017 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26018 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
26019 				object = Z_REFVAL_P(object);
26020 				goto pre_incdec_object;
26021 			}
26022 			if (IS_VAR == IS_CV
26023 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
26024 				ZVAL_UNDEFINED_OP1();
26025 			}
26026 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
26027 			break;
26028 		}
26029 
26030 pre_incdec_object:
26031 		/* here we are sure we are dealing with an object */
26032 		zobj = Z_OBJ_P(object);
26033 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26034 			name = Z_STR_P(property);
26035 		} else {
26036 			name = zval_try_get_tmp_string(property, &tmp_name);
26037 			if (UNEXPECTED(!name)) {
26038 				UNDEF_RESULT();
26039 				break;
26040 			}
26041 		}
26042 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
26043 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
26044 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
26045 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26046 					ZVAL_NULL(EX_VAR(opline->result.var));
26047 				}
26048 			} else {
26049 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26050 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
26051 				} else {
26052 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
26053 				}
26054 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
26055 			}
26056 		} else {
26057 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
26058 		}
26059 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26060 			zend_tmp_string_release(tmp_name);
26061 		}
26062 	} while (0);
26063 
26064 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26065 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26066 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26067 }
26068 
ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26069 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26070 {
26071 	USE_OPLINE
26072 	zval *object;
26073 	zval *property;
26074 	zval *zptr;
26075 	void **cache_slot;
26076 	zend_property_info *prop_info;
26077 	zend_object *zobj;
26078 	zend_string *name, *tmp_name;
26079 
26080 	SAVE_OPLINE();
26081 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26082 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26083 
26084 	do {
26085 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26086 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
26087 				object = Z_REFVAL_P(object);
26088 				goto post_incdec_object;
26089 			}
26090 			if (IS_VAR == IS_CV
26091 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
26092 				ZVAL_UNDEFINED_OP1();
26093 			}
26094 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
26095 			break;
26096 		}
26097 
26098 post_incdec_object:
26099 		/* here we are sure we are dealing with an object */
26100 		zobj = Z_OBJ_P(object);
26101 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26102 			name = Z_STR_P(property);
26103 		} else {
26104 			name = zval_try_get_tmp_string(property, &tmp_name);
26105 			if (UNEXPECTED(!name)) {
26106 				ZVAL_UNDEF(EX_VAR(opline->result.var));
26107 				break;
26108 			}
26109 		}
26110 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
26111 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
26112 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
26113 				ZVAL_NULL(EX_VAR(opline->result.var));
26114 			} else {
26115 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26116 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
26117 				} else {
26118 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
26119 				}
26120 
26121 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
26122 			}
26123 		} else {
26124 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
26125 		}
26126 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26127 			zend_tmp_string_release(tmp_name);
26128 		}
26129 	} while (0);
26130 
26131 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26132 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26133 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26134 }
26135 
ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26136 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26137 {
26138 	USE_OPLINE
26139 	zval *container;
26140 
26141 	SAVE_OPLINE();
26142 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26143 	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);
26144 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26145 	if (IS_VAR == IS_VAR) {
26146 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
26147 	}
26148 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26149 }
26150 
ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26151 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26152 {
26153 	USE_OPLINE
26154 	zval *container;
26155 
26156 	SAVE_OPLINE();
26157 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26158 	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);
26159 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26160 	if (IS_VAR == IS_VAR) {
26161 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
26162 	}
26163 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26164 }
26165 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26166 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26167 {
26168 #if 0
26169 	USE_OPLINE
26170 #endif
26171 
26172 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
26173 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
26174 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26175 		}
26176 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26177 	} else {
26178 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26179 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26180 		}
26181 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26182 	}
26183 }
26184 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26185 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26186 {
26187 	USE_OPLINE
26188 	zval *container;
26189 
26190 	SAVE_OPLINE();
26191 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26192 	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);
26193 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26194 	if (IS_VAR == IS_VAR) {
26195 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
26196 	}
26197 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26198 }
26199 
ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26200 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26201 {
26202 	USE_OPLINE
26203 	zval *property, *container, *result;
26204 
26205 	SAVE_OPLINE();
26206 
26207 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26208 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26209 	result = EX_VAR(opline->result.var);
26210 	zend_fetch_property_address(
26211 		result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR),
26212 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
26213 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
26214 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26215 	if (IS_VAR == IS_VAR) {
26216 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
26217 	}
26218 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26219 }
26220 
ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26221 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26222 {
26223 	USE_OPLINE
26224 	zval *property, *container, *result;
26225 
26226 	SAVE_OPLINE();
26227 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26228 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26229 	result = EX_VAR(opline->result.var);
26230 	zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
26231 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26232 	if (IS_VAR == IS_VAR) {
26233 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
26234 	}
26235 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26236 }
26237 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26238 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26239 {
26240 #if 0
26241 	USE_OPLINE
26242 #endif
26243 
26244 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
26245 		/* Behave like FETCH_OBJ_W */
26246 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
26247 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26248 		}
26249 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26250 	} else {
26251 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
26252 	}
26253 }
26254 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26255 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26256 {
26257 	USE_OPLINE
26258 	zval *container, *property, *result;
26259 
26260 	SAVE_OPLINE();
26261 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26262 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26263 	result = EX_VAR(opline->result.var);
26264 	zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0 OPLINE_CC EXECUTE_DATA_CC);
26265 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26266 	if (IS_VAR == IS_VAR) {
26267 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
26268 	}
26269 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26270 }
26271 
ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26272 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26273 {
26274 	USE_OPLINE
26275 	zval *container, *dim;
26276 
26277 	SAVE_OPLINE();
26278 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26279 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26280 
26281 	if (IS_VAR == IS_VAR
26282 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
26283 		&& UNEXPECTED(!Z_ISREF_P(container))
26284 	) {
26285 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
26286 		zend_fetch_dimension_address_LIST_r(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
26287 	} else {
26288 		zend_fetch_dimension_address_W(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
26289 	}
26290 
26291 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26292 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
26293 }
26294 
ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26295 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26296 {
26297 	USE_OPLINE
26298 	zval *object, *value, tmp;
26299 	zend_object *zobj;
26300 	zend_string *name, *tmp_name;
26301 	zend_refcounted *garbage = NULL;
26302 
26303 	SAVE_OPLINE();
26304 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26305 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
26306 
26307 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26308 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
26309 			object = Z_REFVAL_P(object);
26310 			goto assign_object;
26311 		}
26312 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
26313 		value = &EG(uninitialized_zval);
26314 		goto free_and_exit_assign_obj;
26315 	}
26316 
26317 assign_object:
26318 	zobj = Z_OBJ_P(object);
26319 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26320 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
26321 			void **cache_slot = CACHE_ADDR(opline->extended_value);
26322 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
26323 			zval *property_val;
26324 
26325 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
26326 				property_val = OBJ_PROP(zobj, prop_offset);
26327 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
26328 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
26329 
26330 					if (UNEXPECTED(prop_info != NULL)) {
26331 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
26332 						goto free_and_exit_assign_obj;
26333 					} else {
26334 fast_assign_obj:
26335 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
26336 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26337 							ZVAL_COPY(EX_VAR(opline->result.var), value);
26338 						}
26339 						goto exit_assign_obj;
26340 					}
26341 				}
26342 			} else {
26343 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26344 				if (EXPECTED(zobj->properties != NULL)) {
26345 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
26346 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
26347 							GC_DELREF(zobj->properties);
26348 						}
26349 						zobj->properties = zend_array_dup(zobj->properties);
26350 					}
26351 					property_val = zend_hash_find_known_hash(zobj->properties, name);
26352 					if (property_val) {
26353 						goto fast_assign_obj;
26354 					}
26355 				}
26356 
26357 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
26358 					if (EXPECTED(zobj->properties == NULL)) {
26359 						rebuild_object_properties(zobj);
26360 					}
26361 					if (IS_CONST == IS_CONST) {
26362 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
26363 							Z_ADDREF_P(value);
26364 						}
26365 					} else if (IS_CONST != IS_TMP_VAR) {
26366 						if (Z_ISREF_P(value)) {
26367 							if (IS_CONST == IS_VAR) {
26368 								zend_reference *ref = Z_REF_P(value);
26369 								if (GC_DELREF(ref) == 0) {
26370 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
26371 									efree_size(ref, sizeof(zend_reference));
26372 									value = &tmp;
26373 								} else {
26374 									value = Z_REFVAL_P(value);
26375 									Z_TRY_ADDREF_P(value);
26376 								}
26377 							} else {
26378 								value = Z_REFVAL_P(value);
26379 								Z_TRY_ADDREF_P(value);
26380 							}
26381 						} else if (IS_CONST == IS_CV) {
26382 							Z_TRY_ADDREF_P(value);
26383 						}
26384 						}
26385 					zend_hash_add_new(zobj->properties, name, value);
26386 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26387 						ZVAL_COPY(EX_VAR(opline->result.var), value);
26388 					}
26389 					goto exit_assign_obj;
26390 				}
26391 			}
26392 		}
26393 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26394 	} else {
26395 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
26396 		if (UNEXPECTED(!name)) {
26397 
26398 			UNDEF_RESULT();
26399 			goto exit_assign_obj;
26400 		}
26401 	}
26402 
26403 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
26404 		ZVAL_DEREF(value);
26405 	}
26406 
26407 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
26408 
26409 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26410 		zend_tmp_string_release(tmp_name);
26411 	}
26412 
26413 free_and_exit_assign_obj:
26414 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
26415 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
26416 	}
26417 
26418 exit_assign_obj:
26419 	if (garbage) {
26420 		GC_DTOR_NO_REF(garbage);
26421 	}
26422 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26423 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26424 	/* assign_obj has two opcodes! */
26425 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26426 }
26427 
26428 /* 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)26429 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26430 {
26431 	USE_OPLINE
26432 	zval *object, *value, tmp;
26433 	zend_object *zobj;
26434 	zend_string *name, *tmp_name;
26435 	zend_refcounted *garbage = NULL;
26436 
26437 	SAVE_OPLINE();
26438 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26439 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
26440 
26441 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26442 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
26443 			object = Z_REFVAL_P(object);
26444 			goto assign_object;
26445 		}
26446 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
26447 		value = &EG(uninitialized_zval);
26448 		goto free_and_exit_assign_obj;
26449 	}
26450 
26451 assign_object:
26452 	zobj = Z_OBJ_P(object);
26453 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26454 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
26455 			void **cache_slot = CACHE_ADDR(opline->extended_value);
26456 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
26457 			zval *property_val;
26458 
26459 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
26460 				property_val = OBJ_PROP(zobj, prop_offset);
26461 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
26462 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
26463 
26464 					if (UNEXPECTED(prop_info != NULL)) {
26465 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
26466 						goto free_and_exit_assign_obj;
26467 					} else {
26468 fast_assign_obj:
26469 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
26470 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26471 							ZVAL_COPY(EX_VAR(opline->result.var), value);
26472 						}
26473 						goto exit_assign_obj;
26474 					}
26475 				}
26476 			} else {
26477 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26478 				if (EXPECTED(zobj->properties != NULL)) {
26479 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
26480 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
26481 							GC_DELREF(zobj->properties);
26482 						}
26483 						zobj->properties = zend_array_dup(zobj->properties);
26484 					}
26485 					property_val = zend_hash_find_known_hash(zobj->properties, name);
26486 					if (property_val) {
26487 						goto fast_assign_obj;
26488 					}
26489 				}
26490 
26491 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
26492 					if (EXPECTED(zobj->properties == NULL)) {
26493 						rebuild_object_properties(zobj);
26494 					}
26495 					if (IS_TMP_VAR == IS_CONST) {
26496 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
26497 							Z_ADDREF_P(value);
26498 						}
26499 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
26500 						if (Z_ISREF_P(value)) {
26501 							if (IS_TMP_VAR == IS_VAR) {
26502 								zend_reference *ref = Z_REF_P(value);
26503 								if (GC_DELREF(ref) == 0) {
26504 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
26505 									efree_size(ref, sizeof(zend_reference));
26506 									value = &tmp;
26507 								} else {
26508 									value = Z_REFVAL_P(value);
26509 									Z_TRY_ADDREF_P(value);
26510 								}
26511 							} else {
26512 								value = Z_REFVAL_P(value);
26513 								Z_TRY_ADDREF_P(value);
26514 							}
26515 						} else if (IS_TMP_VAR == IS_CV) {
26516 							Z_TRY_ADDREF_P(value);
26517 						}
26518 						}
26519 					zend_hash_add_new(zobj->properties, name, value);
26520 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26521 						ZVAL_COPY(EX_VAR(opline->result.var), value);
26522 					}
26523 					goto exit_assign_obj;
26524 				}
26525 			}
26526 		}
26527 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26528 	} else {
26529 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
26530 		if (UNEXPECTED(!name)) {
26531 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26532 			UNDEF_RESULT();
26533 			goto exit_assign_obj;
26534 		}
26535 	}
26536 
26537 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
26538 		ZVAL_DEREF(value);
26539 	}
26540 
26541 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
26542 
26543 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26544 		zend_tmp_string_release(tmp_name);
26545 	}
26546 
26547 free_and_exit_assign_obj:
26548 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
26549 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
26550 	}
26551 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26552 exit_assign_obj:
26553 	if (garbage) {
26554 		GC_DTOR_NO_REF(garbage);
26555 	}
26556 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26557 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26558 	/* assign_obj has two opcodes! */
26559 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26560 }
26561 
26562 /* 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)26563 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26564 {
26565 	USE_OPLINE
26566 	zval *object, *value, tmp;
26567 	zend_object *zobj;
26568 	zend_string *name, *tmp_name;
26569 	zend_refcounted *garbage = NULL;
26570 
26571 	SAVE_OPLINE();
26572 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26573 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
26574 
26575 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26576 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
26577 			object = Z_REFVAL_P(object);
26578 			goto assign_object;
26579 		}
26580 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
26581 		value = &EG(uninitialized_zval);
26582 		goto free_and_exit_assign_obj;
26583 	}
26584 
26585 assign_object:
26586 	zobj = Z_OBJ_P(object);
26587 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26588 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
26589 			void **cache_slot = CACHE_ADDR(opline->extended_value);
26590 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
26591 			zval *property_val;
26592 
26593 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
26594 				property_val = OBJ_PROP(zobj, prop_offset);
26595 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
26596 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
26597 
26598 					if (UNEXPECTED(prop_info != NULL)) {
26599 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
26600 						goto free_and_exit_assign_obj;
26601 					} else {
26602 fast_assign_obj:
26603 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
26604 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26605 							ZVAL_COPY(EX_VAR(opline->result.var), value);
26606 						}
26607 						goto exit_assign_obj;
26608 					}
26609 				}
26610 			} else {
26611 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26612 				if (EXPECTED(zobj->properties != NULL)) {
26613 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
26614 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
26615 							GC_DELREF(zobj->properties);
26616 						}
26617 						zobj->properties = zend_array_dup(zobj->properties);
26618 					}
26619 					property_val = zend_hash_find_known_hash(zobj->properties, name);
26620 					if (property_val) {
26621 						goto fast_assign_obj;
26622 					}
26623 				}
26624 
26625 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
26626 					if (EXPECTED(zobj->properties == NULL)) {
26627 						rebuild_object_properties(zobj);
26628 					}
26629 					if (IS_VAR == IS_CONST) {
26630 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
26631 							Z_ADDREF_P(value);
26632 						}
26633 					} else if (IS_VAR != IS_TMP_VAR) {
26634 						if (Z_ISREF_P(value)) {
26635 							if (IS_VAR == IS_VAR) {
26636 								zend_reference *ref = Z_REF_P(value);
26637 								if (GC_DELREF(ref) == 0) {
26638 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
26639 									efree_size(ref, sizeof(zend_reference));
26640 									value = &tmp;
26641 								} else {
26642 									value = Z_REFVAL_P(value);
26643 									Z_TRY_ADDREF_P(value);
26644 								}
26645 							} else {
26646 								value = Z_REFVAL_P(value);
26647 								Z_TRY_ADDREF_P(value);
26648 							}
26649 						} else if (IS_VAR == IS_CV) {
26650 							Z_TRY_ADDREF_P(value);
26651 						}
26652 						}
26653 					zend_hash_add_new(zobj->properties, name, value);
26654 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26655 						ZVAL_COPY(EX_VAR(opline->result.var), value);
26656 					}
26657 					goto exit_assign_obj;
26658 				}
26659 			}
26660 		}
26661 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26662 	} else {
26663 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
26664 		if (UNEXPECTED(!name)) {
26665 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26666 			UNDEF_RESULT();
26667 			goto exit_assign_obj;
26668 		}
26669 	}
26670 
26671 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
26672 		ZVAL_DEREF(value);
26673 	}
26674 
26675 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
26676 
26677 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26678 		zend_tmp_string_release(tmp_name);
26679 	}
26680 
26681 free_and_exit_assign_obj:
26682 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
26683 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
26684 	}
26685 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
26686 exit_assign_obj:
26687 	if (garbage) {
26688 		GC_DTOR_NO_REF(garbage);
26689 	}
26690 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26691 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26692 	/* assign_obj has two opcodes! */
26693 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26694 }
26695 
26696 /* 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)26697 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26698 {
26699 	USE_OPLINE
26700 	zval *object, *value, tmp;
26701 	zend_object *zobj;
26702 	zend_string *name, *tmp_name;
26703 	zend_refcounted *garbage = NULL;
26704 
26705 	SAVE_OPLINE();
26706 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26707 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
26708 
26709 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
26710 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
26711 			object = Z_REFVAL_P(object);
26712 			goto assign_object;
26713 		}
26714 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
26715 		value = &EG(uninitialized_zval);
26716 		goto free_and_exit_assign_obj;
26717 	}
26718 
26719 assign_object:
26720 	zobj = Z_OBJ_P(object);
26721 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26722 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
26723 			void **cache_slot = CACHE_ADDR(opline->extended_value);
26724 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
26725 			zval *property_val;
26726 
26727 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
26728 				property_val = OBJ_PROP(zobj, prop_offset);
26729 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
26730 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
26731 
26732 					if (UNEXPECTED(prop_info != NULL)) {
26733 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
26734 						goto free_and_exit_assign_obj;
26735 					} else {
26736 fast_assign_obj:
26737 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
26738 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26739 							ZVAL_COPY(EX_VAR(opline->result.var), value);
26740 						}
26741 						goto exit_assign_obj;
26742 					}
26743 				}
26744 			} else {
26745 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26746 				if (EXPECTED(zobj->properties != NULL)) {
26747 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
26748 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
26749 							GC_DELREF(zobj->properties);
26750 						}
26751 						zobj->properties = zend_array_dup(zobj->properties);
26752 					}
26753 					property_val = zend_hash_find_known_hash(zobj->properties, name);
26754 					if (property_val) {
26755 						goto fast_assign_obj;
26756 					}
26757 				}
26758 
26759 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
26760 					if (EXPECTED(zobj->properties == NULL)) {
26761 						rebuild_object_properties(zobj);
26762 					}
26763 					if (IS_CV == IS_CONST) {
26764 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
26765 							Z_ADDREF_P(value);
26766 						}
26767 					} else if (IS_CV != IS_TMP_VAR) {
26768 						if (Z_ISREF_P(value)) {
26769 							if (IS_CV == IS_VAR) {
26770 								zend_reference *ref = Z_REF_P(value);
26771 								if (GC_DELREF(ref) == 0) {
26772 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
26773 									efree_size(ref, sizeof(zend_reference));
26774 									value = &tmp;
26775 								} else {
26776 									value = Z_REFVAL_P(value);
26777 									Z_TRY_ADDREF_P(value);
26778 								}
26779 							} else {
26780 								value = Z_REFVAL_P(value);
26781 								Z_TRY_ADDREF_P(value);
26782 							}
26783 						} else if (IS_CV == IS_CV) {
26784 							Z_TRY_ADDREF_P(value);
26785 						}
26786 						}
26787 					zend_hash_add_new(zobj->properties, name, value);
26788 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26789 						ZVAL_COPY(EX_VAR(opline->result.var), value);
26790 					}
26791 					goto exit_assign_obj;
26792 				}
26793 			}
26794 		}
26795 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
26796 	} else {
26797 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
26798 		if (UNEXPECTED(!name)) {
26799 
26800 			UNDEF_RESULT();
26801 			goto exit_assign_obj;
26802 		}
26803 	}
26804 
26805 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
26806 		ZVAL_DEREF(value);
26807 	}
26808 
26809 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
26810 
26811 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
26812 		zend_tmp_string_release(tmp_name);
26813 	}
26814 
26815 free_and_exit_assign_obj:
26816 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
26817 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
26818 	}
26819 
26820 exit_assign_obj:
26821 	if (garbage) {
26822 		GC_DTOR_NO_REF(garbage);
26823 	}
26824 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26825 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26826 	/* assign_obj has two opcodes! */
26827 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26828 }
26829 
26830 /* 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)26831 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26832 {
26833 	USE_OPLINE
26834 	zval *object_ptr, *orig_object_ptr;
26835 	zval *value;
26836 	zval *variable_ptr;
26837 	zval *dim;
26838 	zend_refcounted *garbage = NULL;
26839 
26840 	SAVE_OPLINE();
26841 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26842 
26843 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26844 try_assign_dim_array:
26845 		SEPARATE_ARRAY(object_ptr);
26846 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26847 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
26848 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
26849 				HashTable *ht = Z_ARRVAL_P(object_ptr);
26850 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
26851 					GC_ADDREF(ht);
26852 				}
26853 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26854 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
26855 					zend_array_destroy(ht);
26856 					goto assign_dim_error;
26857 				}
26858 			}
26859 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
26860 				ZVAL_DEREF(value);
26861 			}
26862 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
26863 			if (UNEXPECTED(value == NULL)) {
26864 				zend_cannot_add_element();
26865 				goto assign_dim_error;
26866 			} else if (IS_CONST == IS_CV) {
26867 				if (Z_REFCOUNTED_P(value)) {
26868 					Z_ADDREF_P(value);
26869 				}
26870 			} else if (IS_CONST == IS_VAR) {
26871 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
26872 				if (Z_ISREF_P(free_op_data)) {
26873 					if (Z_REFCOUNTED_P(value)) {
26874 						Z_ADDREF_P(value);
26875 					}
26876 					zval_ptr_dtor_nogc(free_op_data);
26877 				}
26878 			} else if (IS_CONST == IS_CONST) {
26879 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
26880 					Z_ADDREF_P(value);
26881 				}
26882 			}
26883 		} else {
26884 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26885 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
26886 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26887 			} else {
26888 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
26889 			}
26890 			if (UNEXPECTED(variable_ptr == NULL)) {
26891 				goto assign_dim_error;
26892 			}
26893 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
26894 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
26895 		}
26896 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26897 			ZVAL_COPY(EX_VAR(opline->result.var), value);
26898 		}
26899 		if (garbage) {
26900 			GC_DTOR_NO_REF(garbage);
26901 		}
26902 	} else {
26903 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
26904 			object_ptr = Z_REFVAL_P(object_ptr);
26905 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26906 				goto try_assign_dim_array;
26907 			}
26908 		}
26909 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
26910 			zend_object *obj = Z_OBJ_P(object_ptr);
26911 
26912 			GC_ADDREF(obj);
26913 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26914 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
26915 				dim = ZVAL_UNDEFINED_OP2();
26916 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
26917 				dim++;
26918 			}
26919 
26920 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
26921 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
26922 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
26923 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
26924 				ZVAL_DEREF(value);
26925 			}
26926 
26927 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
26928 
26929 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
26930 				zend_objects_store_del(obj);
26931 			}
26932 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
26933 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26934 				zend_use_new_element_for_string();
26935 
26936 				UNDEF_RESULT();
26937 			} else {
26938 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26939 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
26940 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
26941 
26942 			}
26943 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
26944 			if (Z_ISREF_P(orig_object_ptr)
26945 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
26946 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
26947 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26948 
26949 				UNDEF_RESULT();
26950 			} else {
26951 				HashTable *ht = zend_new_array(8);
26952 				uint8_t old_type = Z_TYPE_P(object_ptr);
26953 
26954 				ZVAL_ARR(object_ptr, ht);
26955 				if (UNEXPECTED(old_type == IS_FALSE)) {
26956 					GC_ADDREF(ht);
26957 					zend_false_to_array_deprecated();
26958 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
26959 						zend_array_destroy(ht);
26960 						goto assign_dim_error;
26961 					}
26962 				}
26963 				goto try_assign_dim_array;
26964 			}
26965 		} else {
26966 			zend_use_scalar_as_array();
26967 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
26968 assign_dim_error:
26969 
26970 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
26971 				ZVAL_NULL(EX_VAR(opline->result.var));
26972 			}
26973 		}
26974 	}
26975 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
26976 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
26977 	}
26978 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
26979 	/* assign_dim has two opcodes! */
26980 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
26981 }
26982 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)26983 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26984 {
26985 	USE_OPLINE
26986 	zval *object_ptr, *orig_object_ptr;
26987 	zval *value;
26988 	zval *variable_ptr;
26989 	zval *dim;
26990 	zend_refcounted *garbage = NULL;
26991 
26992 	SAVE_OPLINE();
26993 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
26994 
26995 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
26996 try_assign_dim_array:
26997 		SEPARATE_ARRAY(object_ptr);
26998 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
26999 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27000 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
27001 				HashTable *ht = Z_ARRVAL_P(object_ptr);
27002 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
27003 					GC_ADDREF(ht);
27004 				}
27005 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27006 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
27007 					zend_array_destroy(ht);
27008 					goto assign_dim_error;
27009 				}
27010 			}
27011 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
27012 				ZVAL_DEREF(value);
27013 			}
27014 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27015 			if (UNEXPECTED(value == NULL)) {
27016 				zend_cannot_add_element();
27017 				goto assign_dim_error;
27018 			} else if (IS_TMP_VAR == IS_CV) {
27019 				if (Z_REFCOUNTED_P(value)) {
27020 					Z_ADDREF_P(value);
27021 				}
27022 			} else if (IS_TMP_VAR == IS_VAR) {
27023 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
27024 				if (Z_ISREF_P(free_op_data)) {
27025 					if (Z_REFCOUNTED_P(value)) {
27026 						Z_ADDREF_P(value);
27027 					}
27028 					zval_ptr_dtor_nogc(free_op_data);
27029 				}
27030 			} else if (IS_TMP_VAR == IS_CONST) {
27031 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27032 					Z_ADDREF_P(value);
27033 				}
27034 			}
27035 		} else {
27036 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27037 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27038 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27039 			} else {
27040 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27041 			}
27042 			if (UNEXPECTED(variable_ptr == NULL)) {
27043 				goto assign_dim_error;
27044 			}
27045 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27046 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
27047 		}
27048 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27049 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27050 		}
27051 		if (garbage) {
27052 			GC_DTOR_NO_REF(garbage);
27053 		}
27054 	} else {
27055 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27056 			object_ptr = Z_REFVAL_P(object_ptr);
27057 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27058 				goto try_assign_dim_array;
27059 			}
27060 		}
27061 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27062 			zend_object *obj = Z_OBJ_P(object_ptr);
27063 
27064 			GC_ADDREF(obj);
27065 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27066 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27067 				dim = ZVAL_UNDEFINED_OP2();
27068 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27069 				dim++;
27070 			}
27071 
27072 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27073 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
27074 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27075 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
27076 				ZVAL_DEREF(value);
27077 			}
27078 
27079 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
27080 
27081 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27082 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27083 				zend_objects_store_del(obj);
27084 			}
27085 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27086 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27087 				zend_use_new_element_for_string();
27088 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27089 				UNDEF_RESULT();
27090 			} else {
27091 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27092 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
27093 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27094 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27095 			}
27096 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27097 			if (Z_ISREF_P(orig_object_ptr)
27098 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27099 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27100 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27101 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27102 				UNDEF_RESULT();
27103 			} else {
27104 				HashTable *ht = zend_new_array(8);
27105 				uint8_t old_type = Z_TYPE_P(object_ptr);
27106 
27107 				ZVAL_ARR(object_ptr, ht);
27108 				if (UNEXPECTED(old_type == IS_FALSE)) {
27109 					GC_ADDREF(ht);
27110 					zend_false_to_array_deprecated();
27111 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
27112 						zend_array_destroy(ht);
27113 						goto assign_dim_error;
27114 					}
27115 				}
27116 				goto try_assign_dim_array;
27117 			}
27118 		} else {
27119 			zend_use_scalar_as_array();
27120 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27121 assign_dim_error:
27122 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27123 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27124 				ZVAL_NULL(EX_VAR(opline->result.var));
27125 			}
27126 		}
27127 	}
27128 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27129 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27130 	}
27131 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27132 	/* assign_dim has two opcodes! */
27133 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27134 }
27135 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27136 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27137 {
27138 	USE_OPLINE
27139 	zval *object_ptr, *orig_object_ptr;
27140 	zval *value;
27141 	zval *variable_ptr;
27142 	zval *dim;
27143 	zend_refcounted *garbage = NULL;
27144 
27145 	SAVE_OPLINE();
27146 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27147 
27148 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27149 try_assign_dim_array:
27150 		SEPARATE_ARRAY(object_ptr);
27151 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27152 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27153 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
27154 				HashTable *ht = Z_ARRVAL_P(object_ptr);
27155 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
27156 					GC_ADDREF(ht);
27157 				}
27158 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27159 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
27160 					zend_array_destroy(ht);
27161 					goto assign_dim_error;
27162 				}
27163 			}
27164 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
27165 				ZVAL_DEREF(value);
27166 			}
27167 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27168 			if (UNEXPECTED(value == NULL)) {
27169 				zend_cannot_add_element();
27170 				goto assign_dim_error;
27171 			} else if (IS_VAR == IS_CV) {
27172 				if (Z_REFCOUNTED_P(value)) {
27173 					Z_ADDREF_P(value);
27174 				}
27175 			} else if (IS_VAR == IS_VAR) {
27176 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
27177 				if (Z_ISREF_P(free_op_data)) {
27178 					if (Z_REFCOUNTED_P(value)) {
27179 						Z_ADDREF_P(value);
27180 					}
27181 					zval_ptr_dtor_nogc(free_op_data);
27182 				}
27183 			} else if (IS_VAR == IS_CONST) {
27184 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27185 					Z_ADDREF_P(value);
27186 				}
27187 			}
27188 		} else {
27189 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27190 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27191 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27192 			} else {
27193 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27194 			}
27195 			if (UNEXPECTED(variable_ptr == NULL)) {
27196 				goto assign_dim_error;
27197 			}
27198 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27199 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
27200 		}
27201 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27202 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27203 		}
27204 		if (garbage) {
27205 			GC_DTOR_NO_REF(garbage);
27206 		}
27207 	} else {
27208 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27209 			object_ptr = Z_REFVAL_P(object_ptr);
27210 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27211 				goto try_assign_dim_array;
27212 			}
27213 		}
27214 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27215 			zend_object *obj = Z_OBJ_P(object_ptr);
27216 
27217 			GC_ADDREF(obj);
27218 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27219 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27220 				dim = ZVAL_UNDEFINED_OP2();
27221 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27222 				dim++;
27223 			}
27224 
27225 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27226 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
27227 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27228 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
27229 				ZVAL_DEREF(value);
27230 			}
27231 
27232 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
27233 
27234 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27235 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27236 				zend_objects_store_del(obj);
27237 			}
27238 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27239 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27240 				zend_use_new_element_for_string();
27241 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27242 				UNDEF_RESULT();
27243 			} else {
27244 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27245 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27246 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27247 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27248 			}
27249 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27250 			if (Z_ISREF_P(orig_object_ptr)
27251 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27252 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27253 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27254 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27255 				UNDEF_RESULT();
27256 			} else {
27257 				HashTable *ht = zend_new_array(8);
27258 				uint8_t old_type = Z_TYPE_P(object_ptr);
27259 
27260 				ZVAL_ARR(object_ptr, ht);
27261 				if (UNEXPECTED(old_type == IS_FALSE)) {
27262 					GC_ADDREF(ht);
27263 					zend_false_to_array_deprecated();
27264 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
27265 						zend_array_destroy(ht);
27266 						goto assign_dim_error;
27267 					}
27268 				}
27269 				goto try_assign_dim_array;
27270 			}
27271 		} else {
27272 			zend_use_scalar_as_array();
27273 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27274 assign_dim_error:
27275 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27276 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27277 				ZVAL_NULL(EX_VAR(opline->result.var));
27278 			}
27279 		}
27280 	}
27281 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27282 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27283 	}
27284 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27285 	/* assign_dim has two opcodes! */
27286 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27287 }
27288 
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27289 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27290 {
27291 	USE_OPLINE
27292 	zval *object_ptr, *orig_object_ptr;
27293 	zval *value;
27294 	zval *variable_ptr;
27295 	zval *dim;
27296 	zend_refcounted *garbage = NULL;
27297 
27298 	SAVE_OPLINE();
27299 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27300 
27301 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27302 try_assign_dim_array:
27303 		SEPARATE_ARRAY(object_ptr);
27304 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27305 			value = EX_VAR((opline+1)->op1.var);
27306 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
27307 				HashTable *ht = Z_ARRVAL_P(object_ptr);
27308 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
27309 					GC_ADDREF(ht);
27310 				}
27311 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27312 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
27313 					zend_array_destroy(ht);
27314 					goto assign_dim_error;
27315 				}
27316 			}
27317 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
27318 				ZVAL_DEREF(value);
27319 			}
27320 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
27321 			if (UNEXPECTED(value == NULL)) {
27322 				zend_cannot_add_element();
27323 				goto assign_dim_error;
27324 			} else if (IS_CV == IS_CV) {
27325 				if (Z_REFCOUNTED_P(value)) {
27326 					Z_ADDREF_P(value);
27327 				}
27328 			} else if (IS_CV == IS_VAR) {
27329 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
27330 				if (Z_ISREF_P(free_op_data)) {
27331 					if (Z_REFCOUNTED_P(value)) {
27332 						Z_ADDREF_P(value);
27333 					}
27334 					zval_ptr_dtor_nogc(free_op_data);
27335 				}
27336 			} else if (IS_CV == IS_CONST) {
27337 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
27338 					Z_ADDREF_P(value);
27339 				}
27340 			}
27341 		} else {
27342 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27343 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27344 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27345 			} else {
27346 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
27347 			}
27348 			if (UNEXPECTED(variable_ptr == NULL)) {
27349 				goto assign_dim_error;
27350 			}
27351 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
27352 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
27353 		}
27354 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27355 			ZVAL_COPY(EX_VAR(opline->result.var), value);
27356 		}
27357 		if (garbage) {
27358 			GC_DTOR_NO_REF(garbage);
27359 		}
27360 	} else {
27361 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
27362 			object_ptr = Z_REFVAL_P(object_ptr);
27363 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
27364 				goto try_assign_dim_array;
27365 			}
27366 		}
27367 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
27368 			zend_object *obj = Z_OBJ_P(object_ptr);
27369 
27370 			GC_ADDREF(obj);
27371 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27372 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27373 				dim = ZVAL_UNDEFINED_OP2();
27374 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
27375 				dim++;
27376 			}
27377 
27378 			value = EX_VAR((opline+1)->op1.var);
27379 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
27380 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
27381 			} else if (IS_CV & (IS_CV|IS_VAR)) {
27382 				ZVAL_DEREF(value);
27383 			}
27384 
27385 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
27386 
27387 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27388 				zend_objects_store_del(obj);
27389 			}
27390 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
27391 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
27392 				zend_use_new_element_for_string();
27393 
27394 				UNDEF_RESULT();
27395 			} else {
27396 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27397 				value = EX_VAR((opline+1)->op1.var);
27398 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
27399 
27400 			}
27401 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
27402 			if (Z_ISREF_P(orig_object_ptr)
27403 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
27404 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
27405 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27406 
27407 				UNDEF_RESULT();
27408 			} else {
27409 				HashTable *ht = zend_new_array(8);
27410 				uint8_t old_type = Z_TYPE_P(object_ptr);
27411 
27412 				ZVAL_ARR(object_ptr, ht);
27413 				if (UNEXPECTED(old_type == IS_FALSE)) {
27414 					GC_ADDREF(ht);
27415 					zend_false_to_array_deprecated();
27416 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
27417 						zend_array_destroy(ht);
27418 						goto assign_dim_error;
27419 					}
27420 				}
27421 				goto try_assign_dim_array;
27422 			}
27423 		} else {
27424 			zend_use_scalar_as_array();
27425 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27426 assign_dim_error:
27427 
27428 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
27429 				ZVAL_NULL(EX_VAR(opline->result.var));
27430 			}
27431 		}
27432 	}
27433 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27434 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27435 	}
27436 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27437 	/* assign_dim has two opcodes! */
27438 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27439 }
27440 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27441 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27442 {
27443 	USE_OPLINE
27444 	zval *property, *container, *value_ptr;
27445 
27446 	SAVE_OPLINE();
27447 
27448 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27449 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27450 
27451 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
27452 
27453 	if (1) {
27454 		if (IS_VAR == IS_UNUSED) {
27455 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27456 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27457 			} else {
27458 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27459 			}
27460 		} else {
27461 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27462 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27463 			} else {
27464 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27465 			}
27466 		}
27467 	} else {
27468 		zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
27469 	}
27470 
27471 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27472 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27473 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
27474 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27475 }
27476 
27477 /* 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)27478 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27479 {
27480 	USE_OPLINE
27481 	zval *property, *container, *value_ptr;
27482 
27483 	SAVE_OPLINE();
27484 
27485 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27486 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27487 
27488 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
27489 
27490 	if (1) {
27491 		if (IS_VAR == IS_UNUSED) {
27492 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27493 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27494 			} else {
27495 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27496 			}
27497 		} else {
27498 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27499 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27500 			} else {
27501 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
27502 			}
27503 		}
27504 	} else {
27505 		zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
27506 	}
27507 
27508 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27509 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27510 
27511 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
27512 }
27513 
27514 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27515 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27516 {
27517 	USE_OPLINE
27518 	zval *function_name;
27519 	zend_class_entry *ce;
27520 	uint32_t call_info;
27521 	zend_function *fbc;
27522 	zend_execute_data *call;
27523 
27524 	SAVE_OPLINE();
27525 
27526 	if (IS_VAR == IS_CONST) {
27527 		/* no function found. try a static method in class */
27528 		ce = CACHED_PTR(opline->result.num);
27529 		if (UNEXPECTED(ce == NULL)) {
27530 			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);
27531 			if (UNEXPECTED(ce == NULL)) {
27532 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27533 				HANDLE_EXCEPTION();
27534 			}
27535 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27536 				CACHE_PTR(opline->result.num, ce);
27537 			}
27538 		}
27539 	} else if (IS_VAR == IS_UNUSED) {
27540 		ce = zend_fetch_class(NULL, opline->op1.num);
27541 		if (UNEXPECTED(ce == NULL)) {
27542 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27543 			HANDLE_EXCEPTION();
27544 		}
27545 	} else {
27546 		ce = Z_CE_P(EX_VAR(opline->op1.var));
27547 	}
27548 
27549 	if (IS_VAR == IS_CONST &&
27550 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
27551 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
27552 		/* nothing to do */
27553 	} else if (IS_VAR != IS_CONST &&
27554 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
27555 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
27556 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
27557 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27558 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27559 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27560 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
27561 				do {
27562 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
27563 						function_name = Z_REFVAL_P(function_name);
27564 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
27565 							break;
27566 						}
27567 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
27568 						ZVAL_UNDEFINED_OP2();
27569 						if (UNEXPECTED(EG(exception) != NULL)) {
27570 							HANDLE_EXCEPTION();
27571 						}
27572 					}
27573 					zend_throw_error(NULL, "Method name must be a string");
27574 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27575 					HANDLE_EXCEPTION();
27576 				} while (0);
27577 			}
27578 		}
27579 
27580 		if (ce->get_static_method) {
27581 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
27582 		} else {
27583 			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));
27584 		}
27585 		if (UNEXPECTED(fbc == NULL)) {
27586 			if (EXPECTED(!EG(exception))) {
27587 				zend_undefined_method(ce, Z_STR_P(function_name));
27588 			}
27589 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27590 			HANDLE_EXCEPTION();
27591 		}
27592 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
27593 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
27594 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
27595 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
27596 		}
27597 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
27598 			init_func_run_time_cache(&fbc->op_array);
27599 		}
27600 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27601 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27602 		}
27603 	} else {
27604 		if (UNEXPECTED(ce->constructor == NULL)) {
27605 			zend_throw_error(NULL, "Cannot call constructor");
27606 			HANDLE_EXCEPTION();
27607 		}
27608 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
27609 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
27610 			HANDLE_EXCEPTION();
27611 		}
27612 		fbc = ce->constructor;
27613 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
27614 			init_func_run_time_cache(&fbc->op_array);
27615 		}
27616 	}
27617 
27618 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
27619 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
27620 			ce = (zend_class_entry*)Z_OBJ(EX(This));
27621 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
27622 		} else {
27623 			zend_non_static_method_call(fbc);
27624 			HANDLE_EXCEPTION();
27625 		}
27626 	} else {
27627 		/* previous opcode is ZEND_FETCH_CLASS */
27628 		if (IS_VAR == IS_UNUSED
27629 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
27630 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
27631 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
27632 				ce = Z_OBJCE(EX(This));
27633 			} else {
27634 				ce = Z_CE(EX(This));
27635 			}
27636 		}
27637 		call_info = ZEND_CALL_NESTED_FUNCTION;
27638 	}
27639 
27640 	call = zend_vm_stack_push_call_frame(call_info,
27641 		fbc, opline->extended_value, ce);
27642 	call->prev_execute_data = EX(call);
27643 	EX(call) = call;
27644 
27645 	ZEND_VM_NEXT_OPCODE();
27646 }
27647 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27648 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27649 {
27650 	USE_OPLINE
27651 	zval *expr_ptr, new_expr;
27652 
27653 	SAVE_OPLINE();
27654 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
27655 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
27656 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27657 		if (Z_ISREF_P(expr_ptr)) {
27658 			Z_ADDREF_P(expr_ptr);
27659 		} else {
27660 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
27661 		}
27662 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27663 	} else {
27664 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27665 		if (IS_VAR == IS_TMP_VAR) {
27666 			/* pass */
27667 		} else if (IS_VAR == IS_CONST) {
27668 			Z_TRY_ADDREF_P(expr_ptr);
27669 		} else if (IS_VAR == IS_CV) {
27670 			ZVAL_DEREF(expr_ptr);
27671 			Z_TRY_ADDREF_P(expr_ptr);
27672 		} else /* if (IS_VAR == IS_VAR) */ {
27673 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
27674 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
27675 
27676 				expr_ptr = Z_REFVAL_P(expr_ptr);
27677 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
27678 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
27679 					expr_ptr = &new_expr;
27680 					efree_size(ref, sizeof(zend_reference));
27681 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
27682 					Z_ADDREF_P(expr_ptr);
27683 				}
27684 			}
27685 		}
27686 	}
27687 
27688 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27689 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27690 		zend_string *str;
27691 		zend_ulong hval;
27692 
27693 add_again:
27694 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
27695 			str = Z_STR_P(offset);
27696 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27697 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
27698 					goto num_index;
27699 				}
27700 			}
27701 str_index:
27702 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
27703 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
27704 			hval = Z_LVAL_P(offset);
27705 num_index:
27706 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
27707 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
27708 			offset = Z_REFVAL_P(offset);
27709 			goto add_again;
27710 		} else if (Z_TYPE_P(offset) == IS_NULL) {
27711 			str = ZSTR_EMPTY_ALLOC();
27712 			goto str_index;
27713 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
27714 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
27715 			goto num_index;
27716 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
27717 			hval = 0;
27718 			goto num_index;
27719 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
27720 			hval = 1;
27721 			goto num_index;
27722 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
27723 			zend_use_resource_as_offset(offset);
27724 			hval = Z_RES_HANDLE_P(offset);
27725 			goto num_index;
27726 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
27727 			ZVAL_UNDEFINED_OP2();
27728 			str = ZSTR_EMPTY_ALLOC();
27729 			goto str_index;
27730 		} else {
27731 			zend_illegal_array_offset_access(offset);
27732 			zval_ptr_dtor_nogc(expr_ptr);
27733 		}
27734 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27735 	} else {
27736 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
27737 			zend_cannot_add_element();
27738 			zval_ptr_dtor_nogc(expr_ptr);
27739 		}
27740 	}
27741 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27742 }
27743 
ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27744 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27745 {
27746 	zval *array;
27747 	uint32_t size;
27748 	USE_OPLINE
27749 
27750 	array = EX_VAR(opline->result.var);
27751 	if (IS_VAR != IS_UNUSED) {
27752 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
27753 		ZVAL_ARR(array, zend_new_array(size));
27754 		/* Explicitly initialize array as not-packed if flag is set */
27755 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
27756 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
27757 		}
27758 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27759 	} else {
27760 		ZVAL_ARR(array, zend_new_array(0));
27761 		ZEND_VM_NEXT_OPCODE();
27762 	}
27763 }
27764 
ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27765 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27766 {
27767 	USE_OPLINE
27768 	zval *container;
27769 	zval *offset;
27770 	zend_ulong hval;
27771 	zend_string *key;
27772 
27773 	SAVE_OPLINE();
27774 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27775 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27776 
27777 	do {
27778 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
27779 			HashTable *ht;
27780 
27781 unset_dim_array:
27782 			SEPARATE_ARRAY(container);
27783 			ht = Z_ARRVAL_P(container);
27784 offset_again:
27785 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
27786 				key = Z_STR_P(offset);
27787 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27788 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
27789 						goto num_index_dim;
27790 					}
27791 				}
27792 str_index_dim:
27793 				ZEND_ASSERT(ht != &EG(symbol_table));
27794 				zend_hash_del(ht, key);
27795 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
27796 				hval = Z_LVAL_P(offset);
27797 num_index_dim:
27798 				zend_hash_index_del(ht, hval);
27799 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
27800 				offset = Z_REFVAL_P(offset);
27801 				goto offset_again;
27802 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
27803 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
27804 				goto num_index_dim;
27805 			} else if (Z_TYPE_P(offset) == IS_NULL) {
27806 				key = ZSTR_EMPTY_ALLOC();
27807 				goto str_index_dim;
27808 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
27809 				hval = 0;
27810 				goto num_index_dim;
27811 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
27812 				hval = 1;
27813 				goto num_index_dim;
27814 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
27815 				zend_use_resource_as_offset(offset);
27816 				hval = Z_RES_HANDLE_P(offset);
27817 				goto num_index_dim;
27818 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
27819 				ZVAL_UNDEFINED_OP2();
27820 				key = ZSTR_EMPTY_ALLOC();
27821 				goto str_index_dim;
27822 			} else {
27823 				zend_illegal_array_offset_unset(offset);
27824 			}
27825 			break;
27826 		} else if (Z_ISREF_P(container)) {
27827 			container = Z_REFVAL_P(container);
27828 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
27829 				goto unset_dim_array;
27830 			}
27831 		}
27832 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
27833 			container = ZVAL_UNDEFINED_OP1();
27834 		}
27835 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
27836 			offset = ZVAL_UNDEFINED_OP2();
27837 		}
27838 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
27839 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
27840 				offset++;
27841 			}
27842 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
27843 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
27844 			zend_throw_error(NULL, "Cannot unset string offsets");
27845 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
27846 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
27847 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
27848 			zend_false_to_array_deprecated();
27849 		}
27850 	} while (0);
27851 
27852 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27853 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27854 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27855 }
27856 
ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27857 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27858 {
27859 	USE_OPLINE
27860 	zval *container;
27861 	zval *offset;
27862 	zend_string *name, *tmp_name;
27863 
27864 	SAVE_OPLINE();
27865 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27866 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27867 
27868 	do {
27869 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
27870 			if (Z_ISREF_P(container)) {
27871 				container = Z_REFVAL_P(container);
27872 				if (Z_TYPE_P(container) != IS_OBJECT) {
27873 					if (IS_VAR == IS_CV
27874 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
27875 						ZVAL_UNDEFINED_OP1();
27876 					}
27877 					break;
27878 				}
27879 			} else {
27880 				break;
27881 			}
27882 		}
27883 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
27884 			name = Z_STR_P(offset);
27885 		} else {
27886 			name = zval_try_get_tmp_string(offset, &tmp_name);
27887 			if (UNEXPECTED(!name)) {
27888 				break;
27889 			}
27890 		}
27891 		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));
27892 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
27893 			zend_tmp_string_release(tmp_name);
27894 		}
27895 	} while (0);
27896 
27897 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27898 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27899 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
27900 }
27901 
ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)27902 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
27903 {
27904 	USE_OPLINE
27905 
27906 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
27907 
27908 	SAVE_OPLINE();
27909 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
27910 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
27911 	}
27912 
27913 	/* Destroy the previously yielded value */
27914 	zval_ptr_dtor(&generator->value);
27915 
27916 	/* Destroy the previously yielded key */
27917 	zval_ptr_dtor(&generator->key);
27918 
27919 	/* Set the new yielded value */
27920 	if (IS_VAR != IS_UNUSED) {
27921 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
27922 			/* Constants and temporary variables aren't yieldable by reference,
27923 			 * but we still allow them with a notice. */
27924 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
27925 				zval *value;
27926 
27927 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
27928 
27929 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27930 				ZVAL_COPY_VALUE(&generator->value, value);
27931 				if (IS_VAR == IS_CONST) {
27932 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
27933 						Z_ADDREF(generator->value);
27934 					}
27935 				}
27936 			} else {
27937 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27938 
27939 				/* If a function call result is yielded and the function did
27940 				 * not return by reference we throw a notice. */
27941 				do {
27942 					if (IS_VAR == IS_VAR) {
27943 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
27944 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
27945 						 && !Z_ISREF_P(value_ptr)) {
27946 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
27947 							ZVAL_COPY(&generator->value, value_ptr);
27948 							break;
27949 						}
27950 					}
27951 					if (Z_ISREF_P(value_ptr)) {
27952 						Z_ADDREF_P(value_ptr);
27953 					} else {
27954 						ZVAL_MAKE_REF_EX(value_ptr, 2);
27955 					}
27956 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
27957 				} while (0);
27958 
27959 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27960 			}
27961 		} else {
27962 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
27963 
27964 			/* Consts, temporary variables and references need copying */
27965 			if (IS_VAR == IS_CONST) {
27966 				ZVAL_COPY_VALUE(&generator->value, value);
27967 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
27968 					Z_ADDREF(generator->value);
27969 				}
27970 			} else if (IS_VAR == IS_TMP_VAR) {
27971 				ZVAL_COPY_VALUE(&generator->value, value);
27972 			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
27973 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
27974 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
27975 			} else {
27976 				ZVAL_COPY_VALUE(&generator->value, value);
27977 				if (IS_VAR == IS_CV) {
27978 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
27979 				}
27980 			}
27981 		}
27982 	} else {
27983 		/* If no value was specified yield null */
27984 		ZVAL_NULL(&generator->value);
27985 	}
27986 
27987 	/* Set the new yielded key */
27988 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
27989 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
27990 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
27991 			key = Z_REFVAL_P(key);
27992 		}
27993 		ZVAL_COPY(&generator->key, key);
27994 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
27995 
27996 		if (Z_TYPE(generator->key) == IS_LONG
27997 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
27998 		) {
27999 			generator->largest_used_integer_key = Z_LVAL(generator->key);
28000 		}
28001 	} else {
28002 		/* If no key was specified we use auto-increment keys */
28003 		generator->largest_used_integer_key++;
28004 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
28005 	}
28006 
28007 	if (RETURN_VALUE_USED(opline)) {
28008 		/* If the return value of yield is used set the send
28009 		 * target and initialize it to NULL */
28010 		generator->send_target = EX_VAR(opline->result.var);
28011 		ZVAL_NULL(generator->send_target);
28012 	} else {
28013 		generator->send_target = NULL;
28014 	}
28015 
28016 	/* We increment to the next op, so we are at the correct position when the
28017 	 * generator is resumed. */
28018 	ZEND_VM_INC_OPCODE();
28019 
28020 	/* The GOTO VM uses a local opline variable. We need to set the opline
28021 	 * variable in execute_data so we don't resume at an old position. */
28022 	SAVE_OPLINE();
28023 
28024 	ZEND_VM_RETURN();
28025 }
28026 
ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28027 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28028 {
28029 	USE_OPLINE
28030 	zval *op1, *op2;
28031 	bool result;
28032 
28033 	SAVE_OPLINE();
28034 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
28035 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
28036 	result = fast_is_identical_function(op1, op2);
28037 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28038 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28039 	ZEND_VM_SMART_BRANCH(result, 1);
28040 }
28041 
ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28042 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28043 {
28044 	USE_OPLINE
28045 	zval *op1, *op2;
28046 	bool result;
28047 
28048 	SAVE_OPLINE();
28049 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
28050 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
28051 	result = fast_is_identical_function(op1, op2);
28052 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28053 	ZEND_VM_SMART_BRANCH(result, 1);
28054 }
28055 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28056 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28057 {
28058 	USE_OPLINE
28059 	zval *op1, *op2;
28060 	bool result;
28061 
28062 	SAVE_OPLINE();
28063 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
28064 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
28065 	result = fast_is_not_identical_function(op1, op2);
28066 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28067 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28068 	ZEND_VM_SMART_BRANCH(result, 1);
28069 }
28070 
ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28071 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28072 {
28073 	USE_OPLINE
28074 	zval *value;
28075 	zval *variable_ptr;
28076 
28077 	SAVE_OPLINE();
28078 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
28079 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28080 
28081 	if (0 || UNEXPECTED(0)) {
28082 		zend_refcounted *garbage = NULL;
28083 
28084 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
28085 		if (UNEXPECTED(0)) {
28086 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28087 		}
28088 		if (garbage) {
28089 			GC_DTOR_NO_REF(garbage);
28090 		}
28091 	} else {
28092 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
28093 	}
28094 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28095 	/* zend_assign_to_variable() always takes care of op2, never free it! */
28096 
28097 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28098 }
28099 
ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28100 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28101 {
28102 	USE_OPLINE
28103 	zval *value;
28104 	zval *variable_ptr;
28105 
28106 	SAVE_OPLINE();
28107 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
28108 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28109 
28110 	if (0 || UNEXPECTED(1)) {
28111 		zend_refcounted *garbage = NULL;
28112 
28113 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
28114 		if (UNEXPECTED(1)) {
28115 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28116 		}
28117 		if (garbage) {
28118 			GC_DTOR_NO_REF(garbage);
28119 		}
28120 	} else {
28121 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
28122 	}
28123 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28124 	/* zend_assign_to_variable() always takes care of op2, never free it! */
28125 
28126 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28127 }
28128 
ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28129 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28130 {
28131 	USE_OPLINE
28132 	zval *op1, *op2;
28133 	bool result;
28134 
28135 	SAVE_OPLINE();
28136 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
28137 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
28138 	result = fast_is_identical_function(op1, op2);
28139 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28140 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28141 	ZEND_VM_SMART_BRANCH(result, 1);
28142 }
28143 
ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28144 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28145 {
28146 	USE_OPLINE
28147 	zval *op1, *op2;
28148 	bool result;
28149 
28150 	SAVE_OPLINE();
28151 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
28152 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
28153 	result = fast_is_identical_function(op1, op2);
28154 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28155 	ZEND_VM_SMART_BRANCH(result, 1);
28156 }
28157 
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28158 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28159 {
28160 	USE_OPLINE
28161 	zval *op1, *op2;
28162 	bool result;
28163 
28164 	SAVE_OPLINE();
28165 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
28166 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
28167 	result = fast_is_not_identical_function(op1, op2);
28168 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28169 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28170 	ZEND_VM_SMART_BRANCH(result, 1);
28171 }
28172 
ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28173 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28174 {
28175 	USE_OPLINE
28176 	zval *value;
28177 	zval *variable_ptr;
28178 
28179 	SAVE_OPLINE();
28180 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
28181 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28182 
28183 	if (0 || UNEXPECTED(0)) {
28184 		zend_refcounted *garbage = NULL;
28185 
28186 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
28187 		if (UNEXPECTED(0)) {
28188 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28189 		}
28190 		if (garbage) {
28191 			GC_DTOR_NO_REF(garbage);
28192 		}
28193 	} else {
28194 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
28195 	}
28196 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28197 	/* zend_assign_to_variable() always takes care of op2, never free it! */
28198 
28199 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28200 }
28201 
ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28202 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28203 {
28204 	USE_OPLINE
28205 	zval *value;
28206 	zval *variable_ptr;
28207 
28208 	SAVE_OPLINE();
28209 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
28210 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28211 
28212 	if (0 || UNEXPECTED(1)) {
28213 		zend_refcounted *garbage = NULL;
28214 
28215 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
28216 		if (UNEXPECTED(1)) {
28217 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28218 		}
28219 		if (garbage) {
28220 			GC_DTOR_NO_REF(garbage);
28221 		}
28222 	} else {
28223 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
28224 	}
28225 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28226 	/* zend_assign_to_variable() always takes care of op2, never free it! */
28227 
28228 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28229 }
28230 
ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28231 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28232 {
28233 	USE_OPLINE
28234 	zval *variable_ptr;
28235 	zval *value_ptr;
28236 	zend_refcounted *garbage = NULL;
28237 
28238 	SAVE_OPLINE();
28239 	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
28240 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28241 
28242 	if (IS_VAR == IS_VAR &&
28243 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
28244 
28245 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
28246 		variable_ptr = &EG(uninitialized_zval);
28247 	} else if (IS_VAR == IS_VAR &&
28248 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
28249 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
28250 
28251 		variable_ptr = zend_wrong_assign_to_variable_reference(
28252 			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
28253 	} else {
28254 		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
28255 	}
28256 
28257 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28258 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
28259 	}
28260 
28261 	if (garbage) {
28262 		GC_DTOR(garbage);
28263 	}
28264 
28265 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
28266 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28267 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28268 }
28269 
ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28270 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28271 {
28272 	USE_OPLINE
28273 	zval *var_ptr;
28274 	zval *value, *container, *dim;
28275 	HashTable *ht;
28276 
28277 	SAVE_OPLINE();
28278 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28279 
28280 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
28281 assign_dim_op_array:
28282 		SEPARATE_ARRAY(container);
28283 		ht = Z_ARRVAL_P(container);
28284 assign_dim_op_new_array:
28285 		dim = NULL;
28286 		if (IS_UNUSED == IS_UNUSED) {
28287 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
28288 			if (UNEXPECTED(!var_ptr)) {
28289 				zend_cannot_add_element();
28290 				goto assign_dim_op_ret_null;
28291 			}
28292 		} else {
28293 			if (IS_UNUSED == IS_CONST) {
28294 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
28295 			} else {
28296 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
28297 			}
28298 			if (UNEXPECTED(!var_ptr)) {
28299 				goto assign_dim_op_ret_null;
28300 			}
28301 		}
28302 
28303 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
28304 
28305 		do {
28306 			if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
28307 				zend_reference *ref = Z_REF_P(var_ptr);
28308 				var_ptr = Z_REFVAL_P(var_ptr);
28309 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
28310 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
28311 					break;
28312 				}
28313 			}
28314 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
28315 		} while (0);
28316 
28317 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28318 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
28319 		}
28320 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
28321 	} else {
28322 		if (EXPECTED(Z_ISREF_P(container))) {
28323 			container = Z_REFVAL_P(container);
28324 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
28325 				goto assign_dim_op_array;
28326 			}
28327 		}
28328 
28329 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
28330 			zend_object *obj = Z_OBJ_P(container);
28331 
28332 			dim = NULL;
28333 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
28334 				dim++;
28335 			}
28336 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
28337 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
28338 			uint8_t old_type;
28339 
28340 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
28341 				ZVAL_UNDEFINED_OP1();
28342 			}
28343 			ht = zend_new_array(8);
28344 			old_type = Z_TYPE_P(container);
28345 			ZVAL_ARR(container, ht);
28346 			if (UNEXPECTED(old_type == IS_FALSE)) {
28347 				GC_ADDREF(ht);
28348 				zend_false_to_array_deprecated();
28349 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
28350 					zend_array_destroy(ht);
28351 					goto assign_dim_op_ret_null;
28352 				}
28353 			}
28354 			goto assign_dim_op_new_array;
28355 		} else {
28356 			dim = NULL;
28357 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
28358 assign_dim_op_ret_null:
28359 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
28360 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28361 				ZVAL_NULL(EX_VAR(opline->result.var));
28362 			}
28363 		}
28364 	}
28365 
28366 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28367 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28368 }
28369 
ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28370 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28371 {
28372 	USE_OPLINE
28373 	zval *container;
28374 
28375 	SAVE_OPLINE();
28376 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28377 	zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
28378 
28379 	if (IS_VAR == IS_VAR) {
28380 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
28381 	}
28382 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28383 }
28384 
ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28385 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28386 {
28387 	USE_OPLINE
28388 	zval *container;
28389 
28390 	SAVE_OPLINE();
28391 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28392 	zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
28393 
28394 	if (IS_VAR == IS_VAR) {
28395 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
28396 	}
28397 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
28398 }
28399 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28400 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28401 {
28402 #if 0
28403 	USE_OPLINE
28404 #endif
28405 
28406 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
28407 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
28408 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28409 		}
28410 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28411 	} else {
28412 		if (IS_UNUSED == IS_UNUSED) {
28413 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28414 		}
28415 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
28416 	}
28417 }
28418 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28419 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28420 {
28421 	USE_OPLINE
28422 	zval *object_ptr, *orig_object_ptr;
28423 	zval *value;
28424 	zval *variable_ptr;
28425 	zval *dim;
28426 	zend_refcounted *garbage = NULL;
28427 
28428 	SAVE_OPLINE();
28429 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28430 
28431 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28432 try_assign_dim_array:
28433 		SEPARATE_ARRAY(object_ptr);
28434 		if (IS_UNUSED == IS_UNUSED) {
28435 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
28436 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
28437 				HashTable *ht = Z_ARRVAL_P(object_ptr);
28438 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
28439 					GC_ADDREF(ht);
28440 				}
28441 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28442 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
28443 					zend_array_destroy(ht);
28444 					goto assign_dim_error;
28445 				}
28446 			}
28447 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
28448 				ZVAL_DEREF(value);
28449 			}
28450 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
28451 			if (UNEXPECTED(value == NULL)) {
28452 				zend_cannot_add_element();
28453 				goto assign_dim_error;
28454 			} else if (IS_CONST == IS_CV) {
28455 				if (Z_REFCOUNTED_P(value)) {
28456 					Z_ADDREF_P(value);
28457 				}
28458 			} else if (IS_CONST == IS_VAR) {
28459 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
28460 				if (Z_ISREF_P(free_op_data)) {
28461 					if (Z_REFCOUNTED_P(value)) {
28462 						Z_ADDREF_P(value);
28463 					}
28464 					zval_ptr_dtor_nogc(free_op_data);
28465 				}
28466 			} else if (IS_CONST == IS_CONST) {
28467 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
28468 					Z_ADDREF_P(value);
28469 				}
28470 			}
28471 		} else {
28472 			dim = NULL;
28473 			if (IS_UNUSED == IS_CONST) {
28474 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28475 			} else {
28476 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28477 			}
28478 			if (UNEXPECTED(variable_ptr == NULL)) {
28479 				goto assign_dim_error;
28480 			}
28481 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
28482 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
28483 		}
28484 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28485 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28486 		}
28487 		if (garbage) {
28488 			GC_DTOR_NO_REF(garbage);
28489 		}
28490 	} else {
28491 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
28492 			object_ptr = Z_REFVAL_P(object_ptr);
28493 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28494 				goto try_assign_dim_array;
28495 			}
28496 		}
28497 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
28498 			zend_object *obj = Z_OBJ_P(object_ptr);
28499 
28500 			GC_ADDREF(obj);
28501 			dim = NULL;
28502 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
28503 				dim = ZVAL_UNDEFINED_OP2();
28504 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
28505 				dim++;
28506 			}
28507 
28508 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
28509 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
28510 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28511 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
28512 				ZVAL_DEREF(value);
28513 			}
28514 
28515 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
28516 
28517 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
28518 				zend_objects_store_del(obj);
28519 			}
28520 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
28521 			if (IS_UNUSED == IS_UNUSED) {
28522 				zend_use_new_element_for_string();
28523 
28524 				UNDEF_RESULT();
28525 			} else {
28526 				dim = NULL;
28527 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
28528 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
28529 
28530 			}
28531 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
28532 			if (Z_ISREF_P(orig_object_ptr)
28533 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
28534 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
28535 				dim = NULL;
28536 
28537 				UNDEF_RESULT();
28538 			} else {
28539 				HashTable *ht = zend_new_array(8);
28540 				uint8_t old_type = Z_TYPE_P(object_ptr);
28541 
28542 				ZVAL_ARR(object_ptr, ht);
28543 				if (UNEXPECTED(old_type == IS_FALSE)) {
28544 					GC_ADDREF(ht);
28545 					zend_false_to_array_deprecated();
28546 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
28547 						zend_array_destroy(ht);
28548 						goto assign_dim_error;
28549 					}
28550 				}
28551 				goto try_assign_dim_array;
28552 			}
28553 		} else {
28554 			zend_use_scalar_as_array();
28555 			dim = NULL;
28556 assign_dim_error:
28557 
28558 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28559 				ZVAL_NULL(EX_VAR(opline->result.var));
28560 			}
28561 		}
28562 	}
28563 	if (IS_UNUSED != IS_UNUSED) {
28564 
28565 	}
28566 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28567 	/* assign_dim has two opcodes! */
28568 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28569 }
28570 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28571 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28572 {
28573 	USE_OPLINE
28574 	zval *object_ptr, *orig_object_ptr;
28575 	zval *value;
28576 	zval *variable_ptr;
28577 	zval *dim;
28578 	zend_refcounted *garbage = NULL;
28579 
28580 	SAVE_OPLINE();
28581 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28582 
28583 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28584 try_assign_dim_array:
28585 		SEPARATE_ARRAY(object_ptr);
28586 		if (IS_UNUSED == IS_UNUSED) {
28587 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
28588 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
28589 				HashTable *ht = Z_ARRVAL_P(object_ptr);
28590 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
28591 					GC_ADDREF(ht);
28592 				}
28593 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28594 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
28595 					zend_array_destroy(ht);
28596 					goto assign_dim_error;
28597 				}
28598 			}
28599 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
28600 				ZVAL_DEREF(value);
28601 			}
28602 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
28603 			if (UNEXPECTED(value == NULL)) {
28604 				zend_cannot_add_element();
28605 				goto assign_dim_error;
28606 			} else if (IS_TMP_VAR == IS_CV) {
28607 				if (Z_REFCOUNTED_P(value)) {
28608 					Z_ADDREF_P(value);
28609 				}
28610 			} else if (IS_TMP_VAR == IS_VAR) {
28611 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
28612 				if (Z_ISREF_P(free_op_data)) {
28613 					if (Z_REFCOUNTED_P(value)) {
28614 						Z_ADDREF_P(value);
28615 					}
28616 					zval_ptr_dtor_nogc(free_op_data);
28617 				}
28618 			} else if (IS_TMP_VAR == IS_CONST) {
28619 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
28620 					Z_ADDREF_P(value);
28621 				}
28622 			}
28623 		} else {
28624 			dim = NULL;
28625 			if (IS_UNUSED == IS_CONST) {
28626 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28627 			} else {
28628 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28629 			}
28630 			if (UNEXPECTED(variable_ptr == NULL)) {
28631 				goto assign_dim_error;
28632 			}
28633 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
28634 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
28635 		}
28636 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28637 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28638 		}
28639 		if (garbage) {
28640 			GC_DTOR_NO_REF(garbage);
28641 		}
28642 	} else {
28643 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
28644 			object_ptr = Z_REFVAL_P(object_ptr);
28645 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28646 				goto try_assign_dim_array;
28647 			}
28648 		}
28649 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
28650 			zend_object *obj = Z_OBJ_P(object_ptr);
28651 
28652 			GC_ADDREF(obj);
28653 			dim = NULL;
28654 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
28655 				dim = ZVAL_UNDEFINED_OP2();
28656 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
28657 				dim++;
28658 			}
28659 
28660 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
28661 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
28662 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28663 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
28664 				ZVAL_DEREF(value);
28665 			}
28666 
28667 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
28668 
28669 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28670 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
28671 				zend_objects_store_del(obj);
28672 			}
28673 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
28674 			if (IS_UNUSED == IS_UNUSED) {
28675 				zend_use_new_element_for_string();
28676 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28677 				UNDEF_RESULT();
28678 			} else {
28679 				dim = NULL;
28680 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
28681 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
28682 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28683 			}
28684 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
28685 			if (Z_ISREF_P(orig_object_ptr)
28686 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
28687 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
28688 				dim = NULL;
28689 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28690 				UNDEF_RESULT();
28691 			} else {
28692 				HashTable *ht = zend_new_array(8);
28693 				uint8_t old_type = Z_TYPE_P(object_ptr);
28694 
28695 				ZVAL_ARR(object_ptr, ht);
28696 				if (UNEXPECTED(old_type == IS_FALSE)) {
28697 					GC_ADDREF(ht);
28698 					zend_false_to_array_deprecated();
28699 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
28700 						zend_array_destroy(ht);
28701 						goto assign_dim_error;
28702 					}
28703 				}
28704 				goto try_assign_dim_array;
28705 			}
28706 		} else {
28707 			zend_use_scalar_as_array();
28708 			dim = NULL;
28709 assign_dim_error:
28710 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28711 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28712 				ZVAL_NULL(EX_VAR(opline->result.var));
28713 			}
28714 		}
28715 	}
28716 	if (IS_UNUSED != IS_UNUSED) {
28717 
28718 	}
28719 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28720 	/* assign_dim has two opcodes! */
28721 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28722 }
28723 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28724 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28725 {
28726 	USE_OPLINE
28727 	zval *object_ptr, *orig_object_ptr;
28728 	zval *value;
28729 	zval *variable_ptr;
28730 	zval *dim;
28731 	zend_refcounted *garbage = NULL;
28732 
28733 	SAVE_OPLINE();
28734 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28735 
28736 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28737 try_assign_dim_array:
28738 		SEPARATE_ARRAY(object_ptr);
28739 		if (IS_UNUSED == IS_UNUSED) {
28740 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
28741 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
28742 				HashTable *ht = Z_ARRVAL_P(object_ptr);
28743 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
28744 					GC_ADDREF(ht);
28745 				}
28746 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28747 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
28748 					zend_array_destroy(ht);
28749 					goto assign_dim_error;
28750 				}
28751 			}
28752 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
28753 				ZVAL_DEREF(value);
28754 			}
28755 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
28756 			if (UNEXPECTED(value == NULL)) {
28757 				zend_cannot_add_element();
28758 				goto assign_dim_error;
28759 			} else if (IS_VAR == IS_CV) {
28760 				if (Z_REFCOUNTED_P(value)) {
28761 					Z_ADDREF_P(value);
28762 				}
28763 			} else if (IS_VAR == IS_VAR) {
28764 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
28765 				if (Z_ISREF_P(free_op_data)) {
28766 					if (Z_REFCOUNTED_P(value)) {
28767 						Z_ADDREF_P(value);
28768 					}
28769 					zval_ptr_dtor_nogc(free_op_data);
28770 				}
28771 			} else if (IS_VAR == IS_CONST) {
28772 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
28773 					Z_ADDREF_P(value);
28774 				}
28775 			}
28776 		} else {
28777 			dim = NULL;
28778 			if (IS_UNUSED == IS_CONST) {
28779 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28780 			} else {
28781 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28782 			}
28783 			if (UNEXPECTED(variable_ptr == NULL)) {
28784 				goto assign_dim_error;
28785 			}
28786 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
28787 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
28788 		}
28789 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28790 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28791 		}
28792 		if (garbage) {
28793 			GC_DTOR_NO_REF(garbage);
28794 		}
28795 	} else {
28796 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
28797 			object_ptr = Z_REFVAL_P(object_ptr);
28798 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28799 				goto try_assign_dim_array;
28800 			}
28801 		}
28802 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
28803 			zend_object *obj = Z_OBJ_P(object_ptr);
28804 
28805 			GC_ADDREF(obj);
28806 			dim = NULL;
28807 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
28808 				dim = ZVAL_UNDEFINED_OP2();
28809 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
28810 				dim++;
28811 			}
28812 
28813 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
28814 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
28815 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28816 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
28817 				ZVAL_DEREF(value);
28818 			}
28819 
28820 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
28821 
28822 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28823 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
28824 				zend_objects_store_del(obj);
28825 			}
28826 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
28827 			if (IS_UNUSED == IS_UNUSED) {
28828 				zend_use_new_element_for_string();
28829 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28830 				UNDEF_RESULT();
28831 			} else {
28832 				dim = NULL;
28833 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
28834 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
28835 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28836 			}
28837 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
28838 			if (Z_ISREF_P(orig_object_ptr)
28839 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
28840 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
28841 				dim = NULL;
28842 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28843 				UNDEF_RESULT();
28844 			} else {
28845 				HashTable *ht = zend_new_array(8);
28846 				uint8_t old_type = Z_TYPE_P(object_ptr);
28847 
28848 				ZVAL_ARR(object_ptr, ht);
28849 				if (UNEXPECTED(old_type == IS_FALSE)) {
28850 					GC_ADDREF(ht);
28851 					zend_false_to_array_deprecated();
28852 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
28853 						zend_array_destroy(ht);
28854 						goto assign_dim_error;
28855 					}
28856 				}
28857 				goto try_assign_dim_array;
28858 			}
28859 		} else {
28860 			zend_use_scalar_as_array();
28861 			dim = NULL;
28862 assign_dim_error:
28863 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
28864 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28865 				ZVAL_NULL(EX_VAR(opline->result.var));
28866 			}
28867 		}
28868 	}
28869 	if (IS_UNUSED != IS_UNUSED) {
28870 
28871 	}
28872 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
28873 	/* assign_dim has two opcodes! */
28874 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
28875 }
28876 
ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)28877 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
28878 {
28879 	USE_OPLINE
28880 	zval *object_ptr, *orig_object_ptr;
28881 	zval *value;
28882 	zval *variable_ptr;
28883 	zval *dim;
28884 	zend_refcounted *garbage = NULL;
28885 
28886 	SAVE_OPLINE();
28887 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
28888 
28889 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28890 try_assign_dim_array:
28891 		SEPARATE_ARRAY(object_ptr);
28892 		if (IS_UNUSED == IS_UNUSED) {
28893 			value = EX_VAR((opline+1)->op1.var);
28894 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
28895 				HashTable *ht = Z_ARRVAL_P(object_ptr);
28896 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
28897 					GC_ADDREF(ht);
28898 				}
28899 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28900 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
28901 					zend_array_destroy(ht);
28902 					goto assign_dim_error;
28903 				}
28904 			}
28905 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
28906 				ZVAL_DEREF(value);
28907 			}
28908 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
28909 			if (UNEXPECTED(value == NULL)) {
28910 				zend_cannot_add_element();
28911 				goto assign_dim_error;
28912 			} else if (IS_CV == IS_CV) {
28913 				if (Z_REFCOUNTED_P(value)) {
28914 					Z_ADDREF_P(value);
28915 				}
28916 			} else if (IS_CV == IS_VAR) {
28917 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
28918 				if (Z_ISREF_P(free_op_data)) {
28919 					if (Z_REFCOUNTED_P(value)) {
28920 						Z_ADDREF_P(value);
28921 					}
28922 					zval_ptr_dtor_nogc(free_op_data);
28923 				}
28924 			} else if (IS_CV == IS_CONST) {
28925 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
28926 					Z_ADDREF_P(value);
28927 				}
28928 			}
28929 		} else {
28930 			dim = NULL;
28931 			if (IS_UNUSED == IS_CONST) {
28932 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28933 			} else {
28934 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
28935 			}
28936 			if (UNEXPECTED(variable_ptr == NULL)) {
28937 				goto assign_dim_error;
28938 			}
28939 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
28940 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
28941 		}
28942 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
28943 			ZVAL_COPY(EX_VAR(opline->result.var), value);
28944 		}
28945 		if (garbage) {
28946 			GC_DTOR_NO_REF(garbage);
28947 		}
28948 	} else {
28949 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
28950 			object_ptr = Z_REFVAL_P(object_ptr);
28951 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
28952 				goto try_assign_dim_array;
28953 			}
28954 		}
28955 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
28956 			zend_object *obj = Z_OBJ_P(object_ptr);
28957 
28958 			GC_ADDREF(obj);
28959 			dim = NULL;
28960 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
28961 				dim = ZVAL_UNDEFINED_OP2();
28962 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
28963 				dim++;
28964 			}
28965 
28966 			value = EX_VAR((opline+1)->op1.var);
28967 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
28968 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
28969 			} else if (IS_CV & (IS_CV|IS_VAR)) {
28970 				ZVAL_DEREF(value);
28971 			}
28972 
28973 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
28974 
28975 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
28976 				zend_objects_store_del(obj);
28977 			}
28978 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
28979 			if (IS_UNUSED == IS_UNUSED) {
28980 				zend_use_new_element_for_string();
28981 
28982 				UNDEF_RESULT();
28983 			} else {
28984 				dim = NULL;
28985 				value = EX_VAR((opline+1)->op1.var);
28986 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
28987 
28988 			}
28989 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
28990 			if (Z_ISREF_P(orig_object_ptr)
28991 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
28992 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
28993 				dim = NULL;
28994 
28995 				UNDEF_RESULT();
28996 			} else {
28997 				HashTable *ht = zend_new_array(8);
28998 				uint8_t old_type = Z_TYPE_P(object_ptr);
28999 
29000 				ZVAL_ARR(object_ptr, ht);
29001 				if (UNEXPECTED(old_type == IS_FALSE)) {
29002 					GC_ADDREF(ht);
29003 					zend_false_to_array_deprecated();
29004 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
29005 						zend_array_destroy(ht);
29006 						goto assign_dim_error;
29007 					}
29008 				}
29009 				goto try_assign_dim_array;
29010 			}
29011 		} else {
29012 			zend_use_scalar_as_array();
29013 			dim = NULL;
29014 assign_dim_error:
29015 
29016 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
29017 				ZVAL_NULL(EX_VAR(opline->result.var));
29018 			}
29019 		}
29020 	}
29021 	if (IS_UNUSED != IS_UNUSED) {
29022 
29023 	}
29024 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29025 	/* assign_dim has two opcodes! */
29026 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
29027 }
29028 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29029 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29030 {
29031 	USE_OPLINE
29032 	zval *function_name;
29033 	zend_class_entry *ce;
29034 	uint32_t call_info;
29035 	zend_function *fbc;
29036 	zend_execute_data *call;
29037 
29038 	SAVE_OPLINE();
29039 
29040 	if (IS_VAR == IS_CONST) {
29041 		/* no function found. try a static method in class */
29042 		ce = CACHED_PTR(opline->result.num);
29043 		if (UNEXPECTED(ce == NULL)) {
29044 			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);
29045 			if (UNEXPECTED(ce == NULL)) {
29046 
29047 				HANDLE_EXCEPTION();
29048 			}
29049 			if (IS_UNUSED != IS_CONST) {
29050 				CACHE_PTR(opline->result.num, ce);
29051 			}
29052 		}
29053 	} else if (IS_VAR == IS_UNUSED) {
29054 		ce = zend_fetch_class(NULL, opline->op1.num);
29055 		if (UNEXPECTED(ce == NULL)) {
29056 
29057 			HANDLE_EXCEPTION();
29058 		}
29059 	} else {
29060 		ce = Z_CE_P(EX_VAR(opline->op1.var));
29061 	}
29062 
29063 	if (IS_VAR == IS_CONST &&
29064 	    IS_UNUSED == IS_CONST &&
29065 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
29066 		/* nothing to do */
29067 	} else if (IS_VAR != IS_CONST &&
29068 	           IS_UNUSED == IS_CONST &&
29069 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
29070 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
29071 	} else if (IS_UNUSED != IS_UNUSED) {
29072 		function_name = NULL;
29073 		if (IS_UNUSED != IS_CONST) {
29074 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
29075 				do {
29076 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
29077 						function_name = Z_REFVAL_P(function_name);
29078 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
29079 							break;
29080 						}
29081 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
29082 						ZVAL_UNDEFINED_OP2();
29083 						if (UNEXPECTED(EG(exception) != NULL)) {
29084 							HANDLE_EXCEPTION();
29085 						}
29086 					}
29087 					zend_throw_error(NULL, "Method name must be a string");
29088 
29089 					HANDLE_EXCEPTION();
29090 				} while (0);
29091 			}
29092 		}
29093 
29094 		if (ce->get_static_method) {
29095 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
29096 		} else {
29097 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
29098 		}
29099 		if (UNEXPECTED(fbc == NULL)) {
29100 			if (EXPECTED(!EG(exception))) {
29101 				zend_undefined_method(ce, Z_STR_P(function_name));
29102 			}
29103 
29104 			HANDLE_EXCEPTION();
29105 		}
29106 		if (IS_UNUSED == IS_CONST &&
29107 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
29108 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
29109 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
29110 		}
29111 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
29112 			init_func_run_time_cache(&fbc->op_array);
29113 		}
29114 		if (IS_UNUSED != IS_CONST) {
29115 
29116 		}
29117 	} else {
29118 		if (UNEXPECTED(ce->constructor == NULL)) {
29119 			zend_throw_error(NULL, "Cannot call constructor");
29120 			HANDLE_EXCEPTION();
29121 		}
29122 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
29123 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
29124 			HANDLE_EXCEPTION();
29125 		}
29126 		fbc = ce->constructor;
29127 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
29128 			init_func_run_time_cache(&fbc->op_array);
29129 		}
29130 	}
29131 
29132 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
29133 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
29134 			ce = (zend_class_entry*)Z_OBJ(EX(This));
29135 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
29136 		} else {
29137 			zend_non_static_method_call(fbc);
29138 			HANDLE_EXCEPTION();
29139 		}
29140 	} else {
29141 		/* previous opcode is ZEND_FETCH_CLASS */
29142 		if (IS_VAR == IS_UNUSED
29143 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
29144 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
29145 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
29146 				ce = Z_OBJCE(EX(This));
29147 			} else {
29148 				ce = Z_CE(EX(This));
29149 			}
29150 		}
29151 		call_info = ZEND_CALL_NESTED_FUNCTION;
29152 	}
29153 
29154 	call = zend_vm_stack_push_call_frame(call_info,
29155 		fbc, opline->extended_value, ce);
29156 	call->prev_execute_data = EX(call);
29157 	EX(call) = call;
29158 
29159 	ZEND_VM_NEXT_OPCODE();
29160 }
29161 
ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29162 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29163 {
29164 	if (IS_VAR == IS_UNUSED) {
29165 		SAVE_OPLINE();
29166 		zend_verify_missing_return_type(EX(func));
29167 		HANDLE_EXCEPTION();
29168 	} else {
29169 /* prevents "undefined variable opline" errors */
29170 #if 0 || (IS_VAR != IS_UNUSED)
29171 		USE_OPLINE
29172 		zval *retval_ref, *retval_ptr;
29173 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
29174 		retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29175 
29176 		if (IS_VAR == IS_CONST) {
29177 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
29178 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
29179 		} else if (IS_VAR == IS_VAR) {
29180 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
29181 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
29182 			}
29183 			ZVAL_DEREF(retval_ptr);
29184 		} else if (IS_VAR == IS_CV) {
29185 			ZVAL_DEREF(retval_ptr);
29186 		}
29187 
29188 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
29189 			ZEND_VM_NEXT_OPCODE();
29190 		}
29191 
29192 		if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
29193 			SAVE_OPLINE();
29194 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
29195 			if (UNEXPECTED(EG(exception))) {
29196 				HANDLE_EXCEPTION();
29197 			}
29198 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
29199 				ZEND_VM_NEXT_OPCODE();
29200 			}
29201 		}
29202 
29203 		zend_reference *ref = NULL;
29204 		void *cache_slot = CACHE_ADDR(opline->op2.num);
29205 		if (UNEXPECTED(retval_ref != retval_ptr)) {
29206 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
29207 				ref = Z_REF_P(retval_ref);
29208 			} else {
29209 				/* A cast might happen - unwrap the reference if this is a by-value return */
29210 				if (Z_REFCOUNT_P(retval_ref) == 1) {
29211 					ZVAL_UNREF(retval_ref);
29212 				} else {
29213 					Z_DELREF_P(retval_ref);
29214 					ZVAL_COPY(retval_ref, retval_ptr);
29215 				}
29216 				retval_ptr = retval_ref;
29217 			}
29218 		}
29219 
29220 		SAVE_OPLINE();
29221 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
29222 			zend_verify_return_error(EX(func), retval_ptr);
29223 			HANDLE_EXCEPTION();
29224 		}
29225 		ZEND_VM_NEXT_OPCODE();
29226 #endif
29227 	}
29228 }
29229 
ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29230 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29231 {
29232 	USE_OPLINE
29233 	zval *varptr, *arg;
29234 
29235 	if (IS_UNUSED == IS_CONST) {
29236 		SAVE_OPLINE();
29237 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29238 		uint32_t arg_num;
29239 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29240 		if (UNEXPECTED(!arg)) {
29241 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29242 			HANDLE_EXCEPTION();
29243 		}
29244 	} else {
29245 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29246 	}
29247 
29248 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29249 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
29250 		SAVE_OPLINE();
29251 		ZVAL_UNDEFINED_OP1();
29252 		ZVAL_NULL(arg);
29253 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29254 	}
29255 
29256 	if (IS_VAR == IS_CV) {
29257 		ZVAL_COPY_DEREF(arg, varptr);
29258 	} else /* if (IS_VAR == IS_VAR) */ {
29259 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
29260 			zend_refcounted *ref = Z_COUNTED_P(varptr);
29261 
29262 			varptr = Z_REFVAL_P(varptr);
29263 			ZVAL_COPY_VALUE(arg, varptr);
29264 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
29265 				efree_size(ref, sizeof(zend_reference));
29266 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
29267 				Z_ADDREF_P(arg);
29268 			}
29269 		} else {
29270 			ZVAL_COPY_VALUE(arg, varptr);
29271 		}
29272 	}
29273 
29274 	ZEND_VM_NEXT_OPCODE();
29275 }
29276 
ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29277 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29278 {
29279 	USE_OPLINE
29280 	zval *varptr, *arg;
29281 
29282 	if (IS_UNUSED == IS_CONST) {
29283 		SAVE_OPLINE();
29284 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29285 		uint32_t arg_num;
29286 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29287 		if (UNEXPECTED(!arg)) {
29288 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29289 			HANDLE_EXCEPTION();
29290 		}
29291 	} else {
29292 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29293 	}
29294 
29295 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29296 	ZVAL_COPY_VALUE(arg, varptr);
29297 
29298 	if (EXPECTED(Z_ISREF_P(varptr))) {
29299 		ZEND_VM_NEXT_OPCODE();
29300 	}
29301 
29302 	SAVE_OPLINE();
29303 	ZVAL_NEW_REF(arg, arg);
29304 	zend_error(E_NOTICE, "Only variables should be passed by reference");
29305 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29306 }
29307 
ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29308 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29309 {
29310 	USE_OPLINE
29311 	zval *varptr, *arg;
29312 	uint32_t arg_num;
29313 
29314 	if (IS_UNUSED == IS_CONST) {
29315 		SAVE_OPLINE();
29316 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29317 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29318 		if (UNEXPECTED(!arg)) {
29319 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29320 			HANDLE_EXCEPTION();
29321 		}
29322 	} else {
29323 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29324 		arg_num = opline->op2.num;
29325 	}
29326 
29327 	if (EXPECTED(0)) {
29328 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29329 			goto send_var;
29330 		}
29331 
29332 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29333 		ZVAL_COPY_VALUE(arg, varptr);
29334 
29335 		if (EXPECTED(Z_ISREF_P(varptr) ||
29336 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
29337 			ZEND_VM_NEXT_OPCODE();
29338 		}
29339 	} else {
29340 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29341 			goto send_var;
29342 		}
29343 
29344 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29345 		ZVAL_COPY_VALUE(arg, varptr);
29346 
29347 		if (EXPECTED(Z_ISREF_P(varptr) ||
29348 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
29349 			ZEND_VM_NEXT_OPCODE();
29350 		}
29351 	}
29352 
29353 	SAVE_OPLINE();
29354 	ZVAL_NEW_REF(arg, arg);
29355 	zend_error(E_NOTICE, "Only variables should be passed by reference");
29356 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29357 
29358 send_var:
29359 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29360 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
29361 		zend_refcounted *ref = Z_COUNTED_P(varptr);
29362 
29363 		varptr = Z_REFVAL_P(varptr);
29364 		ZVAL_COPY_VALUE(arg, varptr);
29365 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
29366 			efree_size(ref, sizeof(zend_reference));
29367 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
29368 			Z_ADDREF_P(arg);
29369 		}
29370 	} else {
29371 		ZVAL_COPY_VALUE(arg, varptr);
29372 	}
29373 	ZEND_VM_NEXT_OPCODE();
29374 }
29375 
ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29376 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)
29377 {
29378 	USE_OPLINE
29379 	zval *varptr, *arg;
29380 	uint32_t arg_num;
29381 
29382 	if (IS_UNUSED == IS_CONST) {
29383 		SAVE_OPLINE();
29384 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29385 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29386 		if (UNEXPECTED(!arg)) {
29387 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29388 			HANDLE_EXCEPTION();
29389 		}
29390 	} else {
29391 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29392 		arg_num = opline->op2.num;
29393 	}
29394 
29395 	if (EXPECTED(1)) {
29396 		if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29397 			goto send_var;
29398 		}
29399 
29400 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29401 		ZVAL_COPY_VALUE(arg, varptr);
29402 
29403 		if (EXPECTED(Z_ISREF_P(varptr) ||
29404 		    QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
29405 			ZEND_VM_NEXT_OPCODE();
29406 		}
29407 	} else {
29408 		if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29409 			goto send_var;
29410 		}
29411 
29412 		varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29413 		ZVAL_COPY_VALUE(arg, varptr);
29414 
29415 		if (EXPECTED(Z_ISREF_P(varptr) ||
29416 		    ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) {
29417 			ZEND_VM_NEXT_OPCODE();
29418 		}
29419 	}
29420 
29421 	SAVE_OPLINE();
29422 	ZVAL_NEW_REF(arg, arg);
29423 	zend_error(E_NOTICE, "Only variables should be passed by reference");
29424 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29425 
29426 send_var:
29427 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29428 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
29429 		zend_refcounted *ref = Z_COUNTED_P(varptr);
29430 
29431 		varptr = Z_REFVAL_P(varptr);
29432 		ZVAL_COPY_VALUE(arg, varptr);
29433 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
29434 			efree_size(ref, sizeof(zend_reference));
29435 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
29436 			Z_ADDREF_P(arg);
29437 		}
29438 	} else {
29439 		ZVAL_COPY_VALUE(arg, varptr);
29440 	}
29441 	ZEND_VM_NEXT_OPCODE();
29442 }
29443 
ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29444 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29445 {
29446 	USE_OPLINE
29447 	zval *varptr, *arg;
29448 
29449 	SAVE_OPLINE();
29450 	if (IS_UNUSED == IS_CONST) {
29451 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29452 		uint32_t arg_num;
29453 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29454 		if (UNEXPECTED(!arg)) {
29455 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29456 			HANDLE_EXCEPTION();
29457 		}
29458 	} else {
29459 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29460 	}
29461 
29462 	varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29463 	if (Z_ISREF_P(varptr)) {
29464 		Z_ADDREF_P(varptr);
29465 	} else {
29466 		ZVAL_MAKE_REF_EX(varptr, 2);
29467 	}
29468 	ZVAL_REF(arg, Z_REF_P(varptr));
29469 
29470 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29471 	ZEND_VM_NEXT_OPCODE();
29472 }
29473 
ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29474 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29475 {
29476 	USE_OPLINE
29477 	zval *varptr, *arg;
29478 	uint32_t arg_num;
29479 
29480 	if (IS_UNUSED == IS_CONST) {
29481 		SAVE_OPLINE();
29482 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29483 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29484 		if (UNEXPECTED(!arg)) {
29485 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29486 			HANDLE_EXCEPTION();
29487 		}
29488 	} else {
29489 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29490 		arg_num = opline->op2.num;
29491 	}
29492 
29493 	if (EXPECTED(0)) {
29494 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29495 			goto send_var_by_ref;
29496 		}
29497 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29498 send_var_by_ref:
29499 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29500 		if (Z_ISREF_P(varptr)) {
29501 			Z_ADDREF_P(varptr);
29502 		} else {
29503 			ZVAL_MAKE_REF_EX(varptr, 2);
29504 		}
29505 		ZVAL_REF(arg, Z_REF_P(varptr));
29506 
29507 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29508 		ZEND_VM_NEXT_OPCODE();
29509 	}
29510 
29511 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29512 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
29513 		SAVE_OPLINE();
29514 		ZVAL_UNDEFINED_OP1();
29515 		ZVAL_NULL(arg);
29516 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29517 	}
29518 
29519 	if (IS_VAR == IS_CV) {
29520 		ZVAL_COPY_DEREF(arg, varptr);
29521 	} else /* if (IS_VAR == IS_VAR) */ {
29522 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
29523 			zend_refcounted *ref = Z_COUNTED_P(varptr);
29524 
29525 			varptr = Z_REFVAL_P(varptr);
29526 			ZVAL_COPY_VALUE(arg, varptr);
29527 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
29528 				efree_size(ref, sizeof(zend_reference));
29529 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
29530 				Z_ADDREF_P(arg);
29531 			}
29532 		} else {
29533 			ZVAL_COPY_VALUE(arg, varptr);
29534 		}
29535 	}
29536 
29537 	ZEND_VM_NEXT_OPCODE();
29538 }
29539 
ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29540 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29541 {
29542 	USE_OPLINE
29543 	zval *varptr, *arg;
29544 	uint32_t arg_num;
29545 
29546 	if (IS_UNUSED == IS_CONST) {
29547 		SAVE_OPLINE();
29548 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29549 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29550 		if (UNEXPECTED(!arg)) {
29551 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29552 			HANDLE_EXCEPTION();
29553 		}
29554 	} else {
29555 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29556 		arg_num = opline->op2.num;
29557 	}
29558 
29559 	if (EXPECTED(1)) {
29560 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29561 			goto send_var_by_ref;
29562 		}
29563 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
29564 send_var_by_ref:
29565 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29566 		if (Z_ISREF_P(varptr)) {
29567 			Z_ADDREF_P(varptr);
29568 		} else {
29569 			ZVAL_MAKE_REF_EX(varptr, 2);
29570 		}
29571 		ZVAL_REF(arg, Z_REF_P(varptr));
29572 
29573 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29574 		ZEND_VM_NEXT_OPCODE();
29575 	}
29576 
29577 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29578 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
29579 		SAVE_OPLINE();
29580 		ZVAL_UNDEFINED_OP1();
29581 		ZVAL_NULL(arg);
29582 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29583 	}
29584 
29585 	if (IS_VAR == IS_CV) {
29586 		ZVAL_COPY_DEREF(arg, varptr);
29587 	} else /* if (IS_VAR == IS_VAR) */ {
29588 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
29589 			zend_refcounted *ref = Z_COUNTED_P(varptr);
29590 
29591 			varptr = Z_REFVAL_P(varptr);
29592 			ZVAL_COPY_VALUE(arg, varptr);
29593 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
29594 				efree_size(ref, sizeof(zend_reference));
29595 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
29596 				Z_ADDREF_P(arg);
29597 			}
29598 		} else {
29599 			ZVAL_COPY_VALUE(arg, varptr);
29600 		}
29601 	}
29602 
29603 	ZEND_VM_NEXT_OPCODE();
29604 }
29605 
ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29606 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29607 {
29608 	USE_OPLINE
29609 	zval *varptr, *arg;
29610 
29611 	if (IS_UNUSED == IS_CONST) {
29612 		// TODO: Would it make sense to share the cache slot with CHECK_FUNC_ARG?
29613 		SAVE_OPLINE();
29614 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
29615 		uint32_t arg_num;
29616 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
29617 		if (UNEXPECTED(!arg)) {
29618 			zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29619 			HANDLE_EXCEPTION();
29620 		}
29621 	} else {
29622 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
29623 	}
29624 
29625 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
29626 		varptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29627 		if (Z_ISREF_P(varptr)) {
29628 			Z_ADDREF_P(varptr);
29629 		} else {
29630 			ZVAL_MAKE_REF_EX(varptr, 2);
29631 		}
29632 		ZVAL_REF(arg, Z_REF_P(varptr));
29633 
29634 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29635 		ZEND_VM_NEXT_OPCODE();
29636 	}
29637 
29638 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29639 
29640 	if (UNEXPECTED(Z_ISREF_P(varptr))) {
29641 		zend_refcounted *ref = Z_COUNTED_P(varptr);
29642 
29643 		varptr = Z_REFVAL_P(varptr);
29644 		ZVAL_COPY_VALUE(arg, varptr);
29645 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
29646 			efree_size(ref, sizeof(zend_reference));
29647 		} else if (Z_OPT_REFCOUNTED_P(arg)) {
29648 			Z_ADDREF_P(arg);
29649 		}
29650 	} else {
29651 		ZVAL_COPY_VALUE(arg, varptr);
29652 	}
29653 
29654 	ZEND_VM_NEXT_OPCODE();
29655 }
29656 
ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29657 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29658 {
29659 	USE_OPLINE
29660 	zval *result;
29661 	zend_function *constructor;
29662 	zend_class_entry *ce;
29663 	zend_execute_data *call;
29664 
29665 	SAVE_OPLINE();
29666 	if (IS_VAR == IS_CONST) {
29667 		ce = CACHED_PTR(opline->op2.num);
29668 		if (UNEXPECTED(ce == NULL)) {
29669 			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);
29670 			if (UNEXPECTED(ce == NULL)) {
29671 				ZVAL_UNDEF(EX_VAR(opline->result.var));
29672 				HANDLE_EXCEPTION();
29673 			}
29674 			CACHE_PTR(opline->op2.num, ce);
29675 		}
29676 	} else if (IS_VAR == IS_UNUSED) {
29677 		ce = zend_fetch_class(NULL, opline->op1.num);
29678 		if (UNEXPECTED(ce == NULL)) {
29679 			ZVAL_UNDEF(EX_VAR(opline->result.var));
29680 			HANDLE_EXCEPTION();
29681 		}
29682 	} else {
29683 		ce = Z_CE_P(EX_VAR(opline->op1.var));
29684 	}
29685 
29686 	result = EX_VAR(opline->result.var);
29687 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
29688 		ZVAL_UNDEF(result);
29689 		HANDLE_EXCEPTION();
29690 	}
29691 
29692 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
29693 	if (constructor == NULL) {
29694 		if (UNEXPECTED(EG(exception))) {
29695 			HANDLE_EXCEPTION();
29696 		}
29697 
29698 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
29699 		 * opcode is DO_FCALL in case EXT instructions are used. */
29700 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
29701 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
29702 		}
29703 
29704 		/* Perform a dummy function call */
29705 		call = zend_vm_stack_push_call_frame(
29706 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
29707 			opline->extended_value, NULL);
29708 	} else {
29709 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
29710 			init_func_run_time_cache(&constructor->op_array);
29711 		}
29712 		/* We are not handling overloaded classes right now */
29713 		call = zend_vm_stack_push_call_frame(
29714 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
29715 			constructor,
29716 			opline->extended_value,
29717 			Z_OBJ_P(result));
29718 		Z_ADDREF_P(result);
29719 	}
29720 
29721 	call->prev_execute_data = EX(call);
29722 	EX(call) = call;
29723 	ZEND_VM_NEXT_OPCODE();
29724 }
29725 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29726 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29727 {
29728 	USE_OPLINE
29729 	zval *expr_ptr, new_expr;
29730 
29731 	SAVE_OPLINE();
29732 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
29733 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
29734 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29735 		if (Z_ISREF_P(expr_ptr)) {
29736 			Z_ADDREF_P(expr_ptr);
29737 		} else {
29738 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
29739 		}
29740 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29741 	} else {
29742 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29743 		if (IS_VAR == IS_TMP_VAR) {
29744 			/* pass */
29745 		} else if (IS_VAR == IS_CONST) {
29746 			Z_TRY_ADDREF_P(expr_ptr);
29747 		} else if (IS_VAR == IS_CV) {
29748 			ZVAL_DEREF(expr_ptr);
29749 			Z_TRY_ADDREF_P(expr_ptr);
29750 		} else /* if (IS_VAR == IS_VAR) */ {
29751 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
29752 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
29753 
29754 				expr_ptr = Z_REFVAL_P(expr_ptr);
29755 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
29756 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
29757 					expr_ptr = &new_expr;
29758 					efree_size(ref, sizeof(zend_reference));
29759 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
29760 					Z_ADDREF_P(expr_ptr);
29761 				}
29762 			}
29763 		}
29764 	}
29765 
29766 	if (IS_UNUSED != IS_UNUSED) {
29767 		zval *offset = NULL;
29768 		zend_string *str;
29769 		zend_ulong hval;
29770 
29771 add_again:
29772 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
29773 			str = Z_STR_P(offset);
29774 			if (IS_UNUSED != IS_CONST) {
29775 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
29776 					goto num_index;
29777 				}
29778 			}
29779 str_index:
29780 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
29781 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
29782 			hval = Z_LVAL_P(offset);
29783 num_index:
29784 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
29785 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
29786 			offset = Z_REFVAL_P(offset);
29787 			goto add_again;
29788 		} else if (Z_TYPE_P(offset) == IS_NULL) {
29789 			str = ZSTR_EMPTY_ALLOC();
29790 			goto str_index;
29791 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
29792 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
29793 			goto num_index;
29794 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
29795 			hval = 0;
29796 			goto num_index;
29797 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
29798 			hval = 1;
29799 			goto num_index;
29800 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
29801 			zend_use_resource_as_offset(offset);
29802 			hval = Z_RES_HANDLE_P(offset);
29803 			goto num_index;
29804 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
29805 			ZVAL_UNDEFINED_OP2();
29806 			str = ZSTR_EMPTY_ALLOC();
29807 			goto str_index;
29808 		} else {
29809 			zend_illegal_array_offset_access(offset);
29810 			zval_ptr_dtor_nogc(expr_ptr);
29811 		}
29812 
29813 	} else {
29814 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
29815 			zend_cannot_add_element();
29816 			zval_ptr_dtor_nogc(expr_ptr);
29817 		}
29818 	}
29819 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
29820 }
29821 
ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29822 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29823 {
29824 	zval *array;
29825 	uint32_t size;
29826 	USE_OPLINE
29827 
29828 	array = EX_VAR(opline->result.var);
29829 	if (IS_VAR != IS_UNUSED) {
29830 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
29831 		ZVAL_ARR(array, zend_new_array(size));
29832 		/* Explicitly initialize array as not-packed if flag is set */
29833 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
29834 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
29835 		}
29836 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29837 	} else {
29838 		ZVAL_ARR(array, zend_new_array(0));
29839 		ZEND_VM_NEXT_OPCODE();
29840 	}
29841 }
29842 
ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29843 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29844 {
29845 	USE_OPLINE
29846 	zval *var_ptr;
29847 
29848 	var_ptr = EX_VAR(opline->op1.var);
29849 	if (UNEXPECTED(Z_ISREF_P(var_ptr))) {
29850 		if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) {
29851 			ZVAL_UNREF(var_ptr);
29852 		}
29853 	}
29854 
29855 	ZEND_VM_NEXT_OPCODE();
29856 }
29857 
ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29858 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29859 {
29860 	USE_OPLINE
29861 
29862 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
29863 
29864 	SAVE_OPLINE();
29865 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
29866 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
29867 	}
29868 
29869 	/* Destroy the previously yielded value */
29870 	zval_ptr_dtor(&generator->value);
29871 
29872 	/* Destroy the previously yielded key */
29873 	zval_ptr_dtor(&generator->key);
29874 
29875 	/* Set the new yielded value */
29876 	if (IS_VAR != IS_UNUSED) {
29877 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
29878 			/* Constants and temporary variables aren't yieldable by reference,
29879 			 * but we still allow them with a notice. */
29880 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
29881 				zval *value;
29882 
29883 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
29884 
29885 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29886 				ZVAL_COPY_VALUE(&generator->value, value);
29887 				if (IS_VAR == IS_CONST) {
29888 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
29889 						Z_ADDREF(generator->value);
29890 					}
29891 				}
29892 			} else {
29893 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29894 
29895 				/* If a function call result is yielded and the function did
29896 				 * not return by reference we throw a notice. */
29897 				do {
29898 					if (IS_VAR == IS_VAR) {
29899 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
29900 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
29901 						 && !Z_ISREF_P(value_ptr)) {
29902 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
29903 							ZVAL_COPY(&generator->value, value_ptr);
29904 							break;
29905 						}
29906 					}
29907 					if (Z_ISREF_P(value_ptr)) {
29908 						Z_ADDREF_P(value_ptr);
29909 					} else {
29910 						ZVAL_MAKE_REF_EX(value_ptr, 2);
29911 					}
29912 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
29913 				} while (0);
29914 
29915 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29916 			}
29917 		} else {
29918 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
29919 
29920 			/* Consts, temporary variables and references need copying */
29921 			if (IS_VAR == IS_CONST) {
29922 				ZVAL_COPY_VALUE(&generator->value, value);
29923 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
29924 					Z_ADDREF(generator->value);
29925 				}
29926 			} else if (IS_VAR == IS_TMP_VAR) {
29927 				ZVAL_COPY_VALUE(&generator->value, value);
29928 			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
29929 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
29930 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
29931 			} else {
29932 				ZVAL_COPY_VALUE(&generator->value, value);
29933 				if (IS_VAR == IS_CV) {
29934 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
29935 				}
29936 			}
29937 		}
29938 	} else {
29939 		/* If no value was specified yield null */
29940 		ZVAL_NULL(&generator->value);
29941 	}
29942 
29943 	/* Set the new yielded key */
29944 	if (IS_UNUSED != IS_UNUSED) {
29945 		zval *key = NULL;
29946 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
29947 			key = Z_REFVAL_P(key);
29948 		}
29949 		ZVAL_COPY(&generator->key, key);
29950 
29951 		if (Z_TYPE(generator->key) == IS_LONG
29952 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
29953 		) {
29954 			generator->largest_used_integer_key = Z_LVAL(generator->key);
29955 		}
29956 	} else {
29957 		/* If no key was specified we use auto-increment keys */
29958 		generator->largest_used_integer_key++;
29959 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
29960 	}
29961 
29962 	if (RETURN_VALUE_USED(opline)) {
29963 		/* If the return value of yield is used set the send
29964 		 * target and initialize it to NULL */
29965 		generator->send_target = EX_VAR(opline->result.var);
29966 		ZVAL_NULL(generator->send_target);
29967 	} else {
29968 		generator->send_target = NULL;
29969 	}
29970 
29971 	/* We increment to the next op, so we are at the correct position when the
29972 	 * generator is resumed. */
29973 	ZEND_VM_INC_OPCODE();
29974 
29975 	/* The GOTO VM uses a local opline variable. We need to set the opline
29976 	 * variable in execute_data so we don't resume at an old position. */
29977 	SAVE_OPLINE();
29978 
29979 	ZEND_VM_RETURN();
29980 }
29981 
ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)29982 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
29983 {
29984 	USE_OPLINE
29985 	zval *op1 = EX_VAR(opline->op1.var);
29986 
29987 	if (IS_VAR == IS_CV) {
29988 		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
29989 			ZVAL_NEW_EMPTY_REF(op1);
29990 			Z_SET_REFCOUNT_P(op1, 2);
29991 			ZVAL_NULL(Z_REFVAL_P(op1));
29992 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
29993 		} else {
29994 			if (Z_ISREF_P(op1)) {
29995 				Z_ADDREF_P(op1);
29996 			} else {
29997 				ZVAL_MAKE_REF_EX(op1, 2);
29998 			}
29999 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
30000 		}
30001 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
30002 		op1 = Z_INDIRECT_P(op1);
30003 		if (EXPECTED(!Z_ISREF_P(op1))) {
30004 			ZVAL_MAKE_REF_EX(op1, 2);
30005 		} else {
30006 			GC_ADDREF(Z_REF_P(op1));
30007 		}
30008 		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
30009 	} else {
30010 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
30011 	}
30012 	ZEND_VM_NEXT_OPCODE();
30013 }
30014 
ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30015 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30016 {
30017 	USE_OPLINE
30018 	zval *op1;
30019 	zend_string *type;
30020 
30021 	SAVE_OPLINE();
30022 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
30023 	type = zend_zval_get_legacy_type(op1);
30024 	if (EXPECTED(type)) {
30025 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
30026 	} else {
30027 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
30028 	}
30029 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30030 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30031 }
30032 
ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30033 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30034 {
30035 	USE_OPLINE
30036 	zval *varptr, *arg;
30037 	uint32_t arg_num = opline->op2.num;
30038 
30039 	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
30040 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30041 	}
30042 
30043 	varptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30044 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
30045 
30046 	if (IS_VAR == IS_CV) {
30047 		ZVAL_COPY(arg, varptr);
30048 	} else /* if (IS_VAR == IS_VAR) */ {
30049 		ZVAL_COPY_VALUE(arg, varptr);
30050 	}
30051 
30052 	ZEND_VM_NEXT_OPCODE();
30053 }
30054 
ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30055 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30056 {
30057 	USE_OPLINE
30058 	zval *op1, *op2;
30059 	bool result;
30060 
30061 	SAVE_OPLINE();
30062 	op1 = _get_zval_ptr_var_deref(opline->op1.var EXECUTE_DATA_CC);
30063 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30064 	result = fast_is_identical_function(op1, op2);
30065 
30066 	ZEND_VM_SMART_BRANCH(result, 1);
30067 }
30068 
ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30069 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30070 {
30071 	USE_OPLINE
30072 	zval *object;
30073 	zval *property;
30074 	zval *value;
30075 	zval *zptr;
30076 	void **cache_slot;
30077 	zend_property_info *prop_info;
30078 	zend_object *zobj;
30079 	zend_string *name, *tmp_name;
30080 
30081 	SAVE_OPLINE();
30082 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30083 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30084 
30085 	do {
30086 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
30087 
30088 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30089 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30090 				object = Z_REFVAL_P(object);
30091 				goto assign_op_object;
30092 			}
30093 			if (IS_VAR == IS_CV
30094 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
30095 				ZVAL_UNDEFINED_OP1();
30096 			}
30097 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
30098 			break;
30099 		}
30100 
30101 assign_op_object:
30102 		/* here we are sure we are dealing with an object */
30103 		zobj = Z_OBJ_P(object);
30104 		if (IS_CV == IS_CONST) {
30105 			name = Z_STR_P(property);
30106 		} else {
30107 			name = zval_try_get_tmp_string(property, &tmp_name);
30108 			if (UNEXPECTED(!name)) {
30109 				UNDEF_RESULT();
30110 				break;
30111 			}
30112 		}
30113 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
30114 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
30115 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
30116 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30117 					ZVAL_NULL(EX_VAR(opline->result.var));
30118 				}
30119 			} else {
30120 				zval *orig_zptr = zptr;
30121 				zend_reference *ref;
30122 
30123 				do {
30124 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
30125 						ref = Z_REF_P(zptr);
30126 						zptr = Z_REFVAL_P(zptr);
30127 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
30128 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
30129 							break;
30130 						}
30131 					}
30132 
30133 					if (IS_CV == IS_CONST) {
30134 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
30135 					} else {
30136 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
30137 					}
30138 					if (UNEXPECTED(prop_info)) {
30139 						/* special case for typed properties */
30140 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
30141 					} else {
30142 						zend_binary_op(zptr, zptr, value OPLINE_CC);
30143 					}
30144 				} while (0);
30145 
30146 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30147 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
30148 				}
30149 			}
30150 		} else {
30151 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
30152 		}
30153 		if (IS_CV != IS_CONST) {
30154 			zend_tmp_string_release(tmp_name);
30155 		}
30156 	} while (0);
30157 
30158 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
30159 
30160 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30161 	/* assign_obj has two opcodes! */
30162 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30163 }
30164 
30165 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30166 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30167 {
30168 	USE_OPLINE
30169 	zval *var_ptr;
30170 	zval *value, *container, *dim;
30171 	HashTable *ht;
30172 
30173 	SAVE_OPLINE();
30174 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30175 
30176 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
30177 assign_dim_op_array:
30178 		SEPARATE_ARRAY(container);
30179 		ht = Z_ARRVAL_P(container);
30180 assign_dim_op_new_array:
30181 		dim = EX_VAR(opline->op2.var);
30182 		if (IS_CV == IS_UNUSED) {
30183 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
30184 			if (UNEXPECTED(!var_ptr)) {
30185 				zend_cannot_add_element();
30186 				goto assign_dim_op_ret_null;
30187 			}
30188 		} else {
30189 			if (IS_CV == IS_CONST) {
30190 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
30191 			} else {
30192 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
30193 			}
30194 			if (UNEXPECTED(!var_ptr)) {
30195 				goto assign_dim_op_ret_null;
30196 			}
30197 		}
30198 
30199 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
30200 
30201 		do {
30202 			if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
30203 				zend_reference *ref = Z_REF_P(var_ptr);
30204 				var_ptr = Z_REFVAL_P(var_ptr);
30205 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
30206 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
30207 					break;
30208 				}
30209 			}
30210 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
30211 		} while (0);
30212 
30213 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30214 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
30215 		}
30216 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
30217 	} else {
30218 		if (EXPECTED(Z_ISREF_P(container))) {
30219 			container = Z_REFVAL_P(container);
30220 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
30221 				goto assign_dim_op_array;
30222 			}
30223 		}
30224 
30225 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
30226 			zend_object *obj = Z_OBJ_P(container);
30227 
30228 			dim = EX_VAR(opline->op2.var);
30229 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
30230 				dim++;
30231 			}
30232 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
30233 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
30234 			uint8_t old_type;
30235 
30236 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
30237 				ZVAL_UNDEFINED_OP1();
30238 			}
30239 			ht = zend_new_array(8);
30240 			old_type = Z_TYPE_P(container);
30241 			ZVAL_ARR(container, ht);
30242 			if (UNEXPECTED(old_type == IS_FALSE)) {
30243 				GC_ADDREF(ht);
30244 				zend_false_to_array_deprecated();
30245 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
30246 					zend_array_destroy(ht);
30247 					goto assign_dim_op_ret_null;
30248 				}
30249 			}
30250 			goto assign_dim_op_new_array;
30251 		} else {
30252 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30253 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
30254 assign_dim_op_ret_null:
30255 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
30256 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30257 				ZVAL_NULL(EX_VAR(opline->result.var));
30258 			}
30259 		}
30260 	}
30261 
30262 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30263 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30264 }
30265 
ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30266 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30267 {
30268 	USE_OPLINE
30269 	zval *var_ptr;
30270 	zval *value;
30271 
30272 	SAVE_OPLINE();
30273 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30274 	var_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30275 
30276 	do {
30277 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
30278 			zend_reference *ref = Z_REF_P(var_ptr);
30279 			var_ptr = Z_REFVAL_P(var_ptr);
30280 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
30281 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
30282 				break;
30283 			}
30284 		}
30285 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
30286 	} while (0);
30287 
30288 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30289 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
30290 	}
30291 
30292 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30293 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30294 }
30295 
ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30296 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30297 {
30298 	USE_OPLINE
30299 	zval *object;
30300 	zval *property;
30301 	zval *zptr;
30302 	void **cache_slot;
30303 	zend_property_info *prop_info;
30304 	zend_object *zobj;
30305 	zend_string *name, *tmp_name;
30306 
30307 	SAVE_OPLINE();
30308 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30309 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30310 
30311 	do {
30312 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30313 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30314 				object = Z_REFVAL_P(object);
30315 				goto pre_incdec_object;
30316 			}
30317 			if (IS_VAR == IS_CV
30318 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
30319 				ZVAL_UNDEFINED_OP1();
30320 			}
30321 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
30322 			break;
30323 		}
30324 
30325 pre_incdec_object:
30326 		/* here we are sure we are dealing with an object */
30327 		zobj = Z_OBJ_P(object);
30328 		if (IS_CV == IS_CONST) {
30329 			name = Z_STR_P(property);
30330 		} else {
30331 			name = zval_try_get_tmp_string(property, &tmp_name);
30332 			if (UNEXPECTED(!name)) {
30333 				UNDEF_RESULT();
30334 				break;
30335 			}
30336 		}
30337 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
30338 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
30339 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
30340 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30341 					ZVAL_NULL(EX_VAR(opline->result.var));
30342 				}
30343 			} else {
30344 				if (IS_CV == IS_CONST) {
30345 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
30346 				} else {
30347 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
30348 				}
30349 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
30350 			}
30351 		} else {
30352 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
30353 		}
30354 		if (IS_CV != IS_CONST) {
30355 			zend_tmp_string_release(tmp_name);
30356 		}
30357 	} while (0);
30358 
30359 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30360 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30361 }
30362 
ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30363 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30364 {
30365 	USE_OPLINE
30366 	zval *object;
30367 	zval *property;
30368 	zval *zptr;
30369 	void **cache_slot;
30370 	zend_property_info *prop_info;
30371 	zend_object *zobj;
30372 	zend_string *name, *tmp_name;
30373 
30374 	SAVE_OPLINE();
30375 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30376 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30377 
30378 	do {
30379 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30380 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30381 				object = Z_REFVAL_P(object);
30382 				goto post_incdec_object;
30383 			}
30384 			if (IS_VAR == IS_CV
30385 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
30386 				ZVAL_UNDEFINED_OP1();
30387 			}
30388 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
30389 			break;
30390 		}
30391 
30392 post_incdec_object:
30393 		/* here we are sure we are dealing with an object */
30394 		zobj = Z_OBJ_P(object);
30395 		if (IS_CV == IS_CONST) {
30396 			name = Z_STR_P(property);
30397 		} else {
30398 			name = zval_try_get_tmp_string(property, &tmp_name);
30399 			if (UNEXPECTED(!name)) {
30400 				ZVAL_UNDEF(EX_VAR(opline->result.var));
30401 				break;
30402 			}
30403 		}
30404 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
30405 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
30406 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
30407 				ZVAL_NULL(EX_VAR(opline->result.var));
30408 			} else {
30409 				if (IS_CV == IS_CONST) {
30410 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
30411 				} else {
30412 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
30413 				}
30414 
30415 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
30416 			}
30417 		} else {
30418 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
30419 		}
30420 		if (IS_CV != IS_CONST) {
30421 			zend_tmp_string_release(tmp_name);
30422 		}
30423 	} while (0);
30424 
30425 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30426 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30427 }
30428 
ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30429 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30430 {
30431 	USE_OPLINE
30432 	zval *container;
30433 
30434 	SAVE_OPLINE();
30435 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30436 	zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
30437 
30438 	if (IS_VAR == IS_VAR) {
30439 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
30440 	}
30441 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30442 }
30443 
ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30444 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30445 {
30446 	USE_OPLINE
30447 	zval *container;
30448 
30449 	SAVE_OPLINE();
30450 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30451 	zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
30452 
30453 	if (IS_VAR == IS_VAR) {
30454 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
30455 	}
30456 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30457 }
30458 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30459 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30460 {
30461 #if 0
30462 	USE_OPLINE
30463 #endif
30464 
30465 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
30466 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
30467 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30468 		}
30469 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30470 	} else {
30471 		if (IS_CV == IS_UNUSED) {
30472 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30473 		}
30474 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30475 	}
30476 }
30477 
ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30478 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30479 {
30480 	USE_OPLINE
30481 	zval *container;
30482 
30483 	SAVE_OPLINE();
30484 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30485 	zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
30486 
30487 	if (IS_VAR == IS_VAR) {
30488 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
30489 	}
30490 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30491 }
30492 
ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30493 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30494 {
30495 	USE_OPLINE
30496 	zval *property, *container, *result;
30497 
30498 	SAVE_OPLINE();
30499 
30500 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30501 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30502 	result = EX_VAR(opline->result.var);
30503 	zend_fetch_property_address(
30504 		result, container, IS_VAR, property, IS_CV,
30505 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
30506 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
30507 
30508 	if (IS_VAR == IS_VAR) {
30509 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
30510 	}
30511 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30512 }
30513 
ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30514 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30515 {
30516 	USE_OPLINE
30517 	zval *property, *container, *result;
30518 
30519 	SAVE_OPLINE();
30520 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30521 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30522 	result = EX_VAR(opline->result.var);
30523 	zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
30524 
30525 	if (IS_VAR == IS_VAR) {
30526 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
30527 	}
30528 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30529 }
30530 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30531 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30532 {
30533 #if 0
30534 	USE_OPLINE
30535 #endif
30536 
30537 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
30538 		/* Behave like FETCH_OBJ_W */
30539 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
30540 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30541 		}
30542 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30543 	} else {
30544 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
30545 	}
30546 }
30547 
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30548 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30549 {
30550 	USE_OPLINE
30551 	zval *container, *property, *result;
30552 
30553 	SAVE_OPLINE();
30554 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30555 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
30556 	result = EX_VAR(opline->result.var);
30557 	zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0 OPLINE_CC EXECUTE_DATA_CC);
30558 
30559 	if (IS_VAR == IS_VAR) {
30560 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
30561 	}
30562 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30563 }
30564 
ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30565 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30566 {
30567 	USE_OPLINE
30568 	zval *container, *dim;
30569 
30570 	SAVE_OPLINE();
30571 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30572 	dim = EX_VAR(opline->op2.var);
30573 
30574 	if (IS_VAR == IS_VAR
30575 		&& Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT
30576 		&& UNEXPECTED(!Z_ISREF_P(container))
30577 	) {
30578 		zend_error(E_NOTICE, "Attempting to set reference to non referenceable value");
30579 		zend_fetch_dimension_address_LIST_r(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
30580 	} else {
30581 		zend_fetch_dimension_address_W(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
30582 	}
30583 
30584 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
30585 }
30586 
ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)30587 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30588 {
30589 	USE_OPLINE
30590 	zval *object, *value, tmp;
30591 	zend_object *zobj;
30592 	zend_string *name, *tmp_name;
30593 	zend_refcounted *garbage = NULL;
30594 
30595 	SAVE_OPLINE();
30596 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30597 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
30598 
30599 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30600 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30601 			object = Z_REFVAL_P(object);
30602 			goto assign_object;
30603 		}
30604 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
30605 		value = &EG(uninitialized_zval);
30606 		goto free_and_exit_assign_obj;
30607 	}
30608 
30609 assign_object:
30610 	zobj = Z_OBJ_P(object);
30611 	if (IS_CV == IS_CONST) {
30612 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
30613 			void **cache_slot = CACHE_ADDR(opline->extended_value);
30614 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
30615 			zval *property_val;
30616 
30617 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
30618 				property_val = OBJ_PROP(zobj, prop_offset);
30619 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
30620 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
30621 
30622 					if (UNEXPECTED(prop_info != NULL)) {
30623 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
30624 						goto free_and_exit_assign_obj;
30625 					} else {
30626 fast_assign_obj:
30627 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
30628 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30629 							ZVAL_COPY(EX_VAR(opline->result.var), value);
30630 						}
30631 						goto exit_assign_obj;
30632 					}
30633 				}
30634 			} else {
30635 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
30636 				if (EXPECTED(zobj->properties != NULL)) {
30637 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
30638 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
30639 							GC_DELREF(zobj->properties);
30640 						}
30641 						zobj->properties = zend_array_dup(zobj->properties);
30642 					}
30643 					property_val = zend_hash_find_known_hash(zobj->properties, name);
30644 					if (property_val) {
30645 						goto fast_assign_obj;
30646 					}
30647 				}
30648 
30649 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
30650 					if (EXPECTED(zobj->properties == NULL)) {
30651 						rebuild_object_properties(zobj);
30652 					}
30653 					if (IS_CONST == IS_CONST) {
30654 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
30655 							Z_ADDREF_P(value);
30656 						}
30657 					} else if (IS_CONST != IS_TMP_VAR) {
30658 						if (Z_ISREF_P(value)) {
30659 							if (IS_CONST == IS_VAR) {
30660 								zend_reference *ref = Z_REF_P(value);
30661 								if (GC_DELREF(ref) == 0) {
30662 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
30663 									efree_size(ref, sizeof(zend_reference));
30664 									value = &tmp;
30665 								} else {
30666 									value = Z_REFVAL_P(value);
30667 									Z_TRY_ADDREF_P(value);
30668 								}
30669 							} else {
30670 								value = Z_REFVAL_P(value);
30671 								Z_TRY_ADDREF_P(value);
30672 							}
30673 						} else if (IS_CONST == IS_CV) {
30674 							Z_TRY_ADDREF_P(value);
30675 						}
30676 						}
30677 					zend_hash_add_new(zobj->properties, name, value);
30678 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30679 						ZVAL_COPY(EX_VAR(opline->result.var), value);
30680 					}
30681 					goto exit_assign_obj;
30682 				}
30683 			}
30684 		}
30685 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
30686 	} else {
30687 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
30688 		if (UNEXPECTED(!name)) {
30689 
30690 			UNDEF_RESULT();
30691 			goto exit_assign_obj;
30692 		}
30693 	}
30694 
30695 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
30696 		ZVAL_DEREF(value);
30697 	}
30698 
30699 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
30700 
30701 	if (IS_CV != IS_CONST) {
30702 		zend_tmp_string_release(tmp_name);
30703 	}
30704 
30705 free_and_exit_assign_obj:
30706 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
30707 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
30708 	}
30709 
30710 exit_assign_obj:
30711 	if (garbage) {
30712 		GC_DTOR_NO_REF(garbage);
30713 	}
30714 
30715 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30716 	/* assign_obj has two opcodes! */
30717 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30718 }
30719 
30720 /* 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)30721 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30722 {
30723 	USE_OPLINE
30724 	zval *object, *value, tmp;
30725 	zend_object *zobj;
30726 	zend_string *name, *tmp_name;
30727 	zend_refcounted *garbage = NULL;
30728 
30729 	SAVE_OPLINE();
30730 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30731 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
30732 
30733 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30734 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30735 			object = Z_REFVAL_P(object);
30736 			goto assign_object;
30737 		}
30738 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
30739 		value = &EG(uninitialized_zval);
30740 		goto free_and_exit_assign_obj;
30741 	}
30742 
30743 assign_object:
30744 	zobj = Z_OBJ_P(object);
30745 	if (IS_CV == IS_CONST) {
30746 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
30747 			void **cache_slot = CACHE_ADDR(opline->extended_value);
30748 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
30749 			zval *property_val;
30750 
30751 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
30752 				property_val = OBJ_PROP(zobj, prop_offset);
30753 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
30754 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
30755 
30756 					if (UNEXPECTED(prop_info != NULL)) {
30757 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
30758 						goto free_and_exit_assign_obj;
30759 					} else {
30760 fast_assign_obj:
30761 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
30762 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30763 							ZVAL_COPY(EX_VAR(opline->result.var), value);
30764 						}
30765 						goto exit_assign_obj;
30766 					}
30767 				}
30768 			} else {
30769 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
30770 				if (EXPECTED(zobj->properties != NULL)) {
30771 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
30772 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
30773 							GC_DELREF(zobj->properties);
30774 						}
30775 						zobj->properties = zend_array_dup(zobj->properties);
30776 					}
30777 					property_val = zend_hash_find_known_hash(zobj->properties, name);
30778 					if (property_val) {
30779 						goto fast_assign_obj;
30780 					}
30781 				}
30782 
30783 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
30784 					if (EXPECTED(zobj->properties == NULL)) {
30785 						rebuild_object_properties(zobj);
30786 					}
30787 					if (IS_TMP_VAR == IS_CONST) {
30788 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
30789 							Z_ADDREF_P(value);
30790 						}
30791 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
30792 						if (Z_ISREF_P(value)) {
30793 							if (IS_TMP_VAR == IS_VAR) {
30794 								zend_reference *ref = Z_REF_P(value);
30795 								if (GC_DELREF(ref) == 0) {
30796 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
30797 									efree_size(ref, sizeof(zend_reference));
30798 									value = &tmp;
30799 								} else {
30800 									value = Z_REFVAL_P(value);
30801 									Z_TRY_ADDREF_P(value);
30802 								}
30803 							} else {
30804 								value = Z_REFVAL_P(value);
30805 								Z_TRY_ADDREF_P(value);
30806 							}
30807 						} else if (IS_TMP_VAR == IS_CV) {
30808 							Z_TRY_ADDREF_P(value);
30809 						}
30810 						}
30811 					zend_hash_add_new(zobj->properties, name, value);
30812 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30813 						ZVAL_COPY(EX_VAR(opline->result.var), value);
30814 					}
30815 					goto exit_assign_obj;
30816 				}
30817 			}
30818 		}
30819 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
30820 	} else {
30821 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
30822 		if (UNEXPECTED(!name)) {
30823 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30824 			UNDEF_RESULT();
30825 			goto exit_assign_obj;
30826 		}
30827 	}
30828 
30829 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
30830 		ZVAL_DEREF(value);
30831 	}
30832 
30833 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
30834 
30835 	if (IS_CV != IS_CONST) {
30836 		zend_tmp_string_release(tmp_name);
30837 	}
30838 
30839 free_and_exit_assign_obj:
30840 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
30841 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
30842 	}
30843 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30844 exit_assign_obj:
30845 	if (garbage) {
30846 		GC_DTOR_NO_REF(garbage);
30847 	}
30848 
30849 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30850 	/* assign_obj has two opcodes! */
30851 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30852 }
30853 
30854 /* 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)30855 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30856 {
30857 	USE_OPLINE
30858 	zval *object, *value, tmp;
30859 	zend_object *zobj;
30860 	zend_string *name, *tmp_name;
30861 	zend_refcounted *garbage = NULL;
30862 
30863 	SAVE_OPLINE();
30864 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30865 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
30866 
30867 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
30868 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
30869 			object = Z_REFVAL_P(object);
30870 			goto assign_object;
30871 		}
30872 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
30873 		value = &EG(uninitialized_zval);
30874 		goto free_and_exit_assign_obj;
30875 	}
30876 
30877 assign_object:
30878 	zobj = Z_OBJ_P(object);
30879 	if (IS_CV == IS_CONST) {
30880 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
30881 			void **cache_slot = CACHE_ADDR(opline->extended_value);
30882 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
30883 			zval *property_val;
30884 
30885 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
30886 				property_val = OBJ_PROP(zobj, prop_offset);
30887 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
30888 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
30889 
30890 					if (UNEXPECTED(prop_info != NULL)) {
30891 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
30892 						goto free_and_exit_assign_obj;
30893 					} else {
30894 fast_assign_obj:
30895 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
30896 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30897 							ZVAL_COPY(EX_VAR(opline->result.var), value);
30898 						}
30899 						goto exit_assign_obj;
30900 					}
30901 				}
30902 			} else {
30903 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
30904 				if (EXPECTED(zobj->properties != NULL)) {
30905 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
30906 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
30907 							GC_DELREF(zobj->properties);
30908 						}
30909 						zobj->properties = zend_array_dup(zobj->properties);
30910 					}
30911 					property_val = zend_hash_find_known_hash(zobj->properties, name);
30912 					if (property_val) {
30913 						goto fast_assign_obj;
30914 					}
30915 				}
30916 
30917 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
30918 					if (EXPECTED(zobj->properties == NULL)) {
30919 						rebuild_object_properties(zobj);
30920 					}
30921 					if (IS_VAR == IS_CONST) {
30922 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
30923 							Z_ADDREF_P(value);
30924 						}
30925 					} else if (IS_VAR != IS_TMP_VAR) {
30926 						if (Z_ISREF_P(value)) {
30927 							if (IS_VAR == IS_VAR) {
30928 								zend_reference *ref = Z_REF_P(value);
30929 								if (GC_DELREF(ref) == 0) {
30930 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
30931 									efree_size(ref, sizeof(zend_reference));
30932 									value = &tmp;
30933 								} else {
30934 									value = Z_REFVAL_P(value);
30935 									Z_TRY_ADDREF_P(value);
30936 								}
30937 							} else {
30938 								value = Z_REFVAL_P(value);
30939 								Z_TRY_ADDREF_P(value);
30940 							}
30941 						} else if (IS_VAR == IS_CV) {
30942 							Z_TRY_ADDREF_P(value);
30943 						}
30944 						}
30945 					zend_hash_add_new(zobj->properties, name, value);
30946 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
30947 						ZVAL_COPY(EX_VAR(opline->result.var), value);
30948 					}
30949 					goto exit_assign_obj;
30950 				}
30951 			}
30952 		}
30953 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
30954 	} else {
30955 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
30956 		if (UNEXPECTED(!name)) {
30957 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30958 			UNDEF_RESULT();
30959 			goto exit_assign_obj;
30960 		}
30961 	}
30962 
30963 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
30964 		ZVAL_DEREF(value);
30965 	}
30966 
30967 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
30968 
30969 	if (IS_CV != IS_CONST) {
30970 		zend_tmp_string_release(tmp_name);
30971 	}
30972 
30973 free_and_exit_assign_obj:
30974 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
30975 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
30976 	}
30977 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
30978 exit_assign_obj:
30979 	if (garbage) {
30980 		GC_DTOR_NO_REF(garbage);
30981 	}
30982 
30983 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
30984 	/* assign_obj has two opcodes! */
30985 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
30986 }
30987 
30988 /* 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)30989 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
30990 {
30991 	USE_OPLINE
30992 	zval *object, *value, tmp;
30993 	zend_object *zobj;
30994 	zend_string *name, *tmp_name;
30995 	zend_refcounted *garbage = NULL;
30996 
30997 	SAVE_OPLINE();
30998 	object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
30999 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
31000 
31001 	if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
31002 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
31003 			object = Z_REFVAL_P(object);
31004 			goto assign_object;
31005 		}
31006 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
31007 		value = &EG(uninitialized_zval);
31008 		goto free_and_exit_assign_obj;
31009 	}
31010 
31011 assign_object:
31012 	zobj = Z_OBJ_P(object);
31013 	if (IS_CV == IS_CONST) {
31014 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
31015 			void **cache_slot = CACHE_ADDR(opline->extended_value);
31016 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
31017 			zval *property_val;
31018 
31019 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
31020 				property_val = OBJ_PROP(zobj, prop_offset);
31021 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
31022 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
31023 
31024 					if (UNEXPECTED(prop_info != NULL)) {
31025 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
31026 						goto free_and_exit_assign_obj;
31027 					} else {
31028 fast_assign_obj:
31029 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
31030 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31031 							ZVAL_COPY(EX_VAR(opline->result.var), value);
31032 						}
31033 						goto exit_assign_obj;
31034 					}
31035 				}
31036 			} else {
31037 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
31038 				if (EXPECTED(zobj->properties != NULL)) {
31039 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
31040 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
31041 							GC_DELREF(zobj->properties);
31042 						}
31043 						zobj->properties = zend_array_dup(zobj->properties);
31044 					}
31045 					property_val = zend_hash_find_known_hash(zobj->properties, name);
31046 					if (property_val) {
31047 						goto fast_assign_obj;
31048 					}
31049 				}
31050 
31051 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
31052 					if (EXPECTED(zobj->properties == NULL)) {
31053 						rebuild_object_properties(zobj);
31054 					}
31055 					if (IS_CV == IS_CONST) {
31056 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
31057 							Z_ADDREF_P(value);
31058 						}
31059 					} else if (IS_CV != IS_TMP_VAR) {
31060 						if (Z_ISREF_P(value)) {
31061 							if (IS_CV == IS_VAR) {
31062 								zend_reference *ref = Z_REF_P(value);
31063 								if (GC_DELREF(ref) == 0) {
31064 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
31065 									efree_size(ref, sizeof(zend_reference));
31066 									value = &tmp;
31067 								} else {
31068 									value = Z_REFVAL_P(value);
31069 									Z_TRY_ADDREF_P(value);
31070 								}
31071 							} else {
31072 								value = Z_REFVAL_P(value);
31073 								Z_TRY_ADDREF_P(value);
31074 							}
31075 						} else if (IS_CV == IS_CV) {
31076 							Z_TRY_ADDREF_P(value);
31077 						}
31078 						}
31079 					zend_hash_add_new(zobj->properties, name, value);
31080 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31081 						ZVAL_COPY(EX_VAR(opline->result.var), value);
31082 					}
31083 					goto exit_assign_obj;
31084 				}
31085 			}
31086 		}
31087 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
31088 	} else {
31089 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
31090 		if (UNEXPECTED(!name)) {
31091 
31092 			UNDEF_RESULT();
31093 			goto exit_assign_obj;
31094 		}
31095 	}
31096 
31097 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
31098 		ZVAL_DEREF(value);
31099 	}
31100 
31101 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
31102 
31103 	if (IS_CV != IS_CONST) {
31104 		zend_tmp_string_release(tmp_name);
31105 	}
31106 
31107 free_and_exit_assign_obj:
31108 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
31109 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
31110 	}
31111 
31112 exit_assign_obj:
31113 	if (garbage) {
31114 		GC_DTOR_NO_REF(garbage);
31115 	}
31116 
31117 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31118 	/* assign_obj has two opcodes! */
31119 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31120 }
31121 
31122 /* 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)31123 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31124 {
31125 	USE_OPLINE
31126 	zval *object_ptr, *orig_object_ptr;
31127 	zval *value;
31128 	zval *variable_ptr;
31129 	zval *dim;
31130 	zend_refcounted *garbage = NULL;
31131 
31132 	SAVE_OPLINE();
31133 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31134 
31135 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31136 try_assign_dim_array:
31137 		SEPARATE_ARRAY(object_ptr);
31138 		if (IS_CV == IS_UNUSED) {
31139 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
31140 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
31141 				HashTable *ht = Z_ARRVAL_P(object_ptr);
31142 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
31143 					GC_ADDREF(ht);
31144 				}
31145 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31146 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
31147 					zend_array_destroy(ht);
31148 					goto assign_dim_error;
31149 				}
31150 			}
31151 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
31152 				ZVAL_DEREF(value);
31153 			}
31154 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
31155 			if (UNEXPECTED(value == NULL)) {
31156 				zend_cannot_add_element();
31157 				goto assign_dim_error;
31158 			} else if (IS_CONST == IS_CV) {
31159 				if (Z_REFCOUNTED_P(value)) {
31160 					Z_ADDREF_P(value);
31161 				}
31162 			} else if (IS_CONST == IS_VAR) {
31163 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
31164 				if (Z_ISREF_P(free_op_data)) {
31165 					if (Z_REFCOUNTED_P(value)) {
31166 						Z_ADDREF_P(value);
31167 					}
31168 					zval_ptr_dtor_nogc(free_op_data);
31169 				}
31170 			} else if (IS_CONST == IS_CONST) {
31171 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
31172 					Z_ADDREF_P(value);
31173 				}
31174 			}
31175 		} else {
31176 			dim = EX_VAR(opline->op2.var);
31177 			if (IS_CV == IS_CONST) {
31178 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31179 			} else {
31180 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31181 			}
31182 			if (UNEXPECTED(variable_ptr == NULL)) {
31183 				goto assign_dim_error;
31184 			}
31185 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
31186 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
31187 		}
31188 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31189 			ZVAL_COPY(EX_VAR(opline->result.var), value);
31190 		}
31191 		if (garbage) {
31192 			GC_DTOR_NO_REF(garbage);
31193 		}
31194 	} else {
31195 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
31196 			object_ptr = Z_REFVAL_P(object_ptr);
31197 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31198 				goto try_assign_dim_array;
31199 			}
31200 		}
31201 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
31202 			zend_object *obj = Z_OBJ_P(object_ptr);
31203 
31204 			GC_ADDREF(obj);
31205 			dim = EX_VAR(opline->op2.var);
31206 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
31207 				dim = ZVAL_UNDEFINED_OP2();
31208 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
31209 				dim++;
31210 			}
31211 
31212 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
31213 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
31214 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31215 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
31216 				ZVAL_DEREF(value);
31217 			}
31218 
31219 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
31220 
31221 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
31222 				zend_objects_store_del(obj);
31223 			}
31224 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
31225 			if (IS_CV == IS_UNUSED) {
31226 				zend_use_new_element_for_string();
31227 
31228 				UNDEF_RESULT();
31229 			} else {
31230 				dim = EX_VAR(opline->op2.var);
31231 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
31232 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
31233 
31234 			}
31235 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
31236 			if (Z_ISREF_P(orig_object_ptr)
31237 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
31238 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
31239 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31240 
31241 				UNDEF_RESULT();
31242 			} else {
31243 				HashTable *ht = zend_new_array(8);
31244 				uint8_t old_type = Z_TYPE_P(object_ptr);
31245 
31246 				ZVAL_ARR(object_ptr, ht);
31247 				if (UNEXPECTED(old_type == IS_FALSE)) {
31248 					GC_ADDREF(ht);
31249 					zend_false_to_array_deprecated();
31250 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
31251 						zend_array_destroy(ht);
31252 						goto assign_dim_error;
31253 					}
31254 				}
31255 				goto try_assign_dim_array;
31256 			}
31257 		} else {
31258 			zend_use_scalar_as_array();
31259 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31260 assign_dim_error:
31261 
31262 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31263 				ZVAL_NULL(EX_VAR(opline->result.var));
31264 			}
31265 		}
31266 	}
31267 	if (IS_CV != IS_UNUSED) {
31268 
31269 	}
31270 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31271 	/* assign_dim has two opcodes! */
31272 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31273 }
31274 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31275 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31276 {
31277 	USE_OPLINE
31278 	zval *object_ptr, *orig_object_ptr;
31279 	zval *value;
31280 	zval *variable_ptr;
31281 	zval *dim;
31282 	zend_refcounted *garbage = NULL;
31283 
31284 	SAVE_OPLINE();
31285 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31286 
31287 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31288 try_assign_dim_array:
31289 		SEPARATE_ARRAY(object_ptr);
31290 		if (IS_CV == IS_UNUSED) {
31291 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
31292 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
31293 				HashTable *ht = Z_ARRVAL_P(object_ptr);
31294 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
31295 					GC_ADDREF(ht);
31296 				}
31297 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31298 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
31299 					zend_array_destroy(ht);
31300 					goto assign_dim_error;
31301 				}
31302 			}
31303 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
31304 				ZVAL_DEREF(value);
31305 			}
31306 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
31307 			if (UNEXPECTED(value == NULL)) {
31308 				zend_cannot_add_element();
31309 				goto assign_dim_error;
31310 			} else if (IS_TMP_VAR == IS_CV) {
31311 				if (Z_REFCOUNTED_P(value)) {
31312 					Z_ADDREF_P(value);
31313 				}
31314 			} else if (IS_TMP_VAR == IS_VAR) {
31315 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
31316 				if (Z_ISREF_P(free_op_data)) {
31317 					if (Z_REFCOUNTED_P(value)) {
31318 						Z_ADDREF_P(value);
31319 					}
31320 					zval_ptr_dtor_nogc(free_op_data);
31321 				}
31322 			} else if (IS_TMP_VAR == IS_CONST) {
31323 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
31324 					Z_ADDREF_P(value);
31325 				}
31326 			}
31327 		} else {
31328 			dim = EX_VAR(opline->op2.var);
31329 			if (IS_CV == IS_CONST) {
31330 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31331 			} else {
31332 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31333 			}
31334 			if (UNEXPECTED(variable_ptr == NULL)) {
31335 				goto assign_dim_error;
31336 			}
31337 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
31338 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
31339 		}
31340 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31341 			ZVAL_COPY(EX_VAR(opline->result.var), value);
31342 		}
31343 		if (garbage) {
31344 			GC_DTOR_NO_REF(garbage);
31345 		}
31346 	} else {
31347 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
31348 			object_ptr = Z_REFVAL_P(object_ptr);
31349 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31350 				goto try_assign_dim_array;
31351 			}
31352 		}
31353 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
31354 			zend_object *obj = Z_OBJ_P(object_ptr);
31355 
31356 			GC_ADDREF(obj);
31357 			dim = EX_VAR(opline->op2.var);
31358 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
31359 				dim = ZVAL_UNDEFINED_OP2();
31360 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
31361 				dim++;
31362 			}
31363 
31364 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
31365 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
31366 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31367 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
31368 				ZVAL_DEREF(value);
31369 			}
31370 
31371 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
31372 
31373 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31374 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
31375 				zend_objects_store_del(obj);
31376 			}
31377 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
31378 			if (IS_CV == IS_UNUSED) {
31379 				zend_use_new_element_for_string();
31380 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31381 				UNDEF_RESULT();
31382 			} else {
31383 				dim = EX_VAR(opline->op2.var);
31384 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
31385 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
31386 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31387 			}
31388 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
31389 			if (Z_ISREF_P(orig_object_ptr)
31390 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
31391 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
31392 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31393 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31394 				UNDEF_RESULT();
31395 			} else {
31396 				HashTable *ht = zend_new_array(8);
31397 				uint8_t old_type = Z_TYPE_P(object_ptr);
31398 
31399 				ZVAL_ARR(object_ptr, ht);
31400 				if (UNEXPECTED(old_type == IS_FALSE)) {
31401 					GC_ADDREF(ht);
31402 					zend_false_to_array_deprecated();
31403 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
31404 						zend_array_destroy(ht);
31405 						goto assign_dim_error;
31406 					}
31407 				}
31408 				goto try_assign_dim_array;
31409 			}
31410 		} else {
31411 			zend_use_scalar_as_array();
31412 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31413 assign_dim_error:
31414 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31415 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31416 				ZVAL_NULL(EX_VAR(opline->result.var));
31417 			}
31418 		}
31419 	}
31420 	if (IS_CV != IS_UNUSED) {
31421 
31422 	}
31423 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31424 	/* assign_dim has two opcodes! */
31425 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31426 }
31427 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31428 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31429 {
31430 	USE_OPLINE
31431 	zval *object_ptr, *orig_object_ptr;
31432 	zval *value;
31433 	zval *variable_ptr;
31434 	zval *dim;
31435 	zend_refcounted *garbage = NULL;
31436 
31437 	SAVE_OPLINE();
31438 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31439 
31440 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31441 try_assign_dim_array:
31442 		SEPARATE_ARRAY(object_ptr);
31443 		if (IS_CV == IS_UNUSED) {
31444 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
31445 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
31446 				HashTable *ht = Z_ARRVAL_P(object_ptr);
31447 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
31448 					GC_ADDREF(ht);
31449 				}
31450 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31451 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
31452 					zend_array_destroy(ht);
31453 					goto assign_dim_error;
31454 				}
31455 			}
31456 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
31457 				ZVAL_DEREF(value);
31458 			}
31459 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
31460 			if (UNEXPECTED(value == NULL)) {
31461 				zend_cannot_add_element();
31462 				goto assign_dim_error;
31463 			} else if (IS_VAR == IS_CV) {
31464 				if (Z_REFCOUNTED_P(value)) {
31465 					Z_ADDREF_P(value);
31466 				}
31467 			} else if (IS_VAR == IS_VAR) {
31468 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
31469 				if (Z_ISREF_P(free_op_data)) {
31470 					if (Z_REFCOUNTED_P(value)) {
31471 						Z_ADDREF_P(value);
31472 					}
31473 					zval_ptr_dtor_nogc(free_op_data);
31474 				}
31475 			} else if (IS_VAR == IS_CONST) {
31476 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
31477 					Z_ADDREF_P(value);
31478 				}
31479 			}
31480 		} else {
31481 			dim = EX_VAR(opline->op2.var);
31482 			if (IS_CV == IS_CONST) {
31483 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31484 			} else {
31485 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31486 			}
31487 			if (UNEXPECTED(variable_ptr == NULL)) {
31488 				goto assign_dim_error;
31489 			}
31490 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
31491 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
31492 		}
31493 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31494 			ZVAL_COPY(EX_VAR(opline->result.var), value);
31495 		}
31496 		if (garbage) {
31497 			GC_DTOR_NO_REF(garbage);
31498 		}
31499 	} else {
31500 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
31501 			object_ptr = Z_REFVAL_P(object_ptr);
31502 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31503 				goto try_assign_dim_array;
31504 			}
31505 		}
31506 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
31507 			zend_object *obj = Z_OBJ_P(object_ptr);
31508 
31509 			GC_ADDREF(obj);
31510 			dim = EX_VAR(opline->op2.var);
31511 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
31512 				dim = ZVAL_UNDEFINED_OP2();
31513 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
31514 				dim++;
31515 			}
31516 
31517 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
31518 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
31519 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31520 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
31521 				ZVAL_DEREF(value);
31522 			}
31523 
31524 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
31525 
31526 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31527 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
31528 				zend_objects_store_del(obj);
31529 			}
31530 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
31531 			if (IS_CV == IS_UNUSED) {
31532 				zend_use_new_element_for_string();
31533 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31534 				UNDEF_RESULT();
31535 			} else {
31536 				dim = EX_VAR(opline->op2.var);
31537 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
31538 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
31539 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31540 			}
31541 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
31542 			if (Z_ISREF_P(orig_object_ptr)
31543 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
31544 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
31545 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31546 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31547 				UNDEF_RESULT();
31548 			} else {
31549 				HashTable *ht = zend_new_array(8);
31550 				uint8_t old_type = Z_TYPE_P(object_ptr);
31551 
31552 				ZVAL_ARR(object_ptr, ht);
31553 				if (UNEXPECTED(old_type == IS_FALSE)) {
31554 					GC_ADDREF(ht);
31555 					zend_false_to_array_deprecated();
31556 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
31557 						zend_array_destroy(ht);
31558 						goto assign_dim_error;
31559 					}
31560 				}
31561 				goto try_assign_dim_array;
31562 			}
31563 		} else {
31564 			zend_use_scalar_as_array();
31565 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31566 assign_dim_error:
31567 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31568 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31569 				ZVAL_NULL(EX_VAR(opline->result.var));
31570 			}
31571 		}
31572 	}
31573 	if (IS_CV != IS_UNUSED) {
31574 
31575 	}
31576 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31577 	/* assign_dim has two opcodes! */
31578 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31579 }
31580 
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31581 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31582 {
31583 	USE_OPLINE
31584 	zval *object_ptr, *orig_object_ptr;
31585 	zval *value;
31586 	zval *variable_ptr;
31587 	zval *dim;
31588 	zend_refcounted *garbage = NULL;
31589 
31590 	SAVE_OPLINE();
31591 	orig_object_ptr = object_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31592 
31593 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31594 try_assign_dim_array:
31595 		SEPARATE_ARRAY(object_ptr);
31596 		if (IS_CV == IS_UNUSED) {
31597 			value = EX_VAR((opline+1)->op1.var);
31598 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
31599 				HashTable *ht = Z_ARRVAL_P(object_ptr);
31600 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
31601 					GC_ADDREF(ht);
31602 				}
31603 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31604 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
31605 					zend_array_destroy(ht);
31606 					goto assign_dim_error;
31607 				}
31608 			}
31609 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
31610 				ZVAL_DEREF(value);
31611 			}
31612 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
31613 			if (UNEXPECTED(value == NULL)) {
31614 				zend_cannot_add_element();
31615 				goto assign_dim_error;
31616 			} else if (IS_CV == IS_CV) {
31617 				if (Z_REFCOUNTED_P(value)) {
31618 					Z_ADDREF_P(value);
31619 				}
31620 			} else if (IS_CV == IS_VAR) {
31621 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
31622 				if (Z_ISREF_P(free_op_data)) {
31623 					if (Z_REFCOUNTED_P(value)) {
31624 						Z_ADDREF_P(value);
31625 					}
31626 					zval_ptr_dtor_nogc(free_op_data);
31627 				}
31628 			} else if (IS_CV == IS_CONST) {
31629 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
31630 					Z_ADDREF_P(value);
31631 				}
31632 			}
31633 		} else {
31634 			dim = EX_VAR(opline->op2.var);
31635 			if (IS_CV == IS_CONST) {
31636 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31637 			} else {
31638 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
31639 			}
31640 			if (UNEXPECTED(variable_ptr == NULL)) {
31641 				goto assign_dim_error;
31642 			}
31643 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
31644 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
31645 		}
31646 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31647 			ZVAL_COPY(EX_VAR(opline->result.var), value);
31648 		}
31649 		if (garbage) {
31650 			GC_DTOR_NO_REF(garbage);
31651 		}
31652 	} else {
31653 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
31654 			object_ptr = Z_REFVAL_P(object_ptr);
31655 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
31656 				goto try_assign_dim_array;
31657 			}
31658 		}
31659 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
31660 			zend_object *obj = Z_OBJ_P(object_ptr);
31661 
31662 			GC_ADDREF(obj);
31663 			dim = EX_VAR(opline->op2.var);
31664 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
31665 				dim = ZVAL_UNDEFINED_OP2();
31666 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
31667 				dim++;
31668 			}
31669 
31670 			value = EX_VAR((opline+1)->op1.var);
31671 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
31672 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
31673 			} else if (IS_CV & (IS_CV|IS_VAR)) {
31674 				ZVAL_DEREF(value);
31675 			}
31676 
31677 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
31678 
31679 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
31680 				zend_objects_store_del(obj);
31681 			}
31682 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
31683 			if (IS_CV == IS_UNUSED) {
31684 				zend_use_new_element_for_string();
31685 
31686 				UNDEF_RESULT();
31687 			} else {
31688 				dim = EX_VAR(opline->op2.var);
31689 				value = EX_VAR((opline+1)->op1.var);
31690 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
31691 
31692 			}
31693 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
31694 			if (Z_ISREF_P(orig_object_ptr)
31695 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
31696 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
31697 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31698 
31699 				UNDEF_RESULT();
31700 			} else {
31701 				HashTable *ht = zend_new_array(8);
31702 				uint8_t old_type = Z_TYPE_P(object_ptr);
31703 
31704 				ZVAL_ARR(object_ptr, ht);
31705 				if (UNEXPECTED(old_type == IS_FALSE)) {
31706 					GC_ADDREF(ht);
31707 					zend_false_to_array_deprecated();
31708 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
31709 						zend_array_destroy(ht);
31710 						goto assign_dim_error;
31711 					}
31712 				}
31713 				goto try_assign_dim_array;
31714 			}
31715 		} else {
31716 			zend_use_scalar_as_array();
31717 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31718 assign_dim_error:
31719 
31720 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31721 				ZVAL_NULL(EX_VAR(opline->result.var));
31722 			}
31723 		}
31724 	}
31725 	if (IS_CV != IS_UNUSED) {
31726 
31727 	}
31728 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31729 	/* assign_dim has two opcodes! */
31730 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31731 }
31732 
ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31733 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31734 {
31735 	USE_OPLINE
31736 	zval *value;
31737 	zval *variable_ptr;
31738 
31739 	SAVE_OPLINE();
31740 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31741 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31742 
31743 	if (0 || UNEXPECTED(0)) {
31744 		zend_refcounted *garbage = NULL;
31745 
31746 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
31747 		if (UNEXPECTED(0)) {
31748 			ZVAL_COPY(EX_VAR(opline->result.var), value);
31749 		}
31750 		if (garbage) {
31751 			GC_DTOR_NO_REF(garbage);
31752 		}
31753 	} else {
31754 		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
31755 	}
31756 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31757 	/* zend_assign_to_variable() always takes care of op2, never free it! */
31758 
31759 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31760 }
31761 
ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31762 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31763 {
31764 	USE_OPLINE
31765 	zval *value;
31766 	zval *variable_ptr;
31767 
31768 	SAVE_OPLINE();
31769 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31770 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31771 
31772 	if (0 || UNEXPECTED(1)) {
31773 		zend_refcounted *garbage = NULL;
31774 
31775 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
31776 		if (UNEXPECTED(1)) {
31777 			ZVAL_COPY(EX_VAR(opline->result.var), value);
31778 		}
31779 		if (garbage) {
31780 			GC_DTOR_NO_REF(garbage);
31781 		}
31782 	} else {
31783 		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
31784 	}
31785 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31786 	/* zend_assign_to_variable() always takes care of op2, never free it! */
31787 
31788 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31789 }
31790 
ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31791 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31792 {
31793 	USE_OPLINE
31794 	zval *variable_ptr;
31795 	zval *value_ptr;
31796 	zend_refcounted *garbage = NULL;
31797 
31798 	SAVE_OPLINE();
31799 	value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
31800 	variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31801 
31802 	if (IS_VAR == IS_VAR &&
31803 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
31804 
31805 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
31806 		variable_ptr = &EG(uninitialized_zval);
31807 	} else if (IS_CV == IS_VAR &&
31808 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
31809 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
31810 
31811 		variable_ptr = zend_wrong_assign_to_variable_reference(
31812 			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
31813 	} else {
31814 		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
31815 	}
31816 
31817 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
31818 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
31819 	}
31820 
31821 	if (garbage) {
31822 		GC_DTOR(garbage);
31823 	}
31824 
31825 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31826 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
31827 }
31828 
ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31829 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31830 {
31831 	USE_OPLINE
31832 	zval *property, *container, *value_ptr;
31833 
31834 	SAVE_OPLINE();
31835 
31836 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31837 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31838 
31839 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
31840 
31841 	if (1) {
31842 		if (IS_VAR == IS_UNUSED) {
31843 			if (IS_CV == IS_CONST) {
31844 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31845 			} else {
31846 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31847 			}
31848 		} else {
31849 			if (IS_CV == IS_CONST) {
31850 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31851 			} else {
31852 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31853 			}
31854 		}
31855 	} else {
31856 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31857 	}
31858 
31859 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31860 
31861 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
31862 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31863 }
31864 
31865 /* 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)31866 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31867 {
31868 	USE_OPLINE
31869 	zval *property, *container, *value_ptr;
31870 
31871 	SAVE_OPLINE();
31872 
31873 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
31874 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
31875 
31876 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
31877 
31878 	if (1) {
31879 		if (IS_VAR == IS_UNUSED) {
31880 			if (IS_CV == IS_CONST) {
31881 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31882 			} else {
31883 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31884 			}
31885 		} else {
31886 			if (IS_CV == IS_CONST) {
31887 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31888 			} else {
31889 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31890 			}
31891 		}
31892 	} else {
31893 		zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
31894 	}
31895 
31896 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
31897 
31898 
31899 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
31900 }
31901 
31902 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)31903 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
31904 {
31905 	USE_OPLINE
31906 	zval *function_name;
31907 	zend_class_entry *ce;
31908 	uint32_t call_info;
31909 	zend_function *fbc;
31910 	zend_execute_data *call;
31911 
31912 	SAVE_OPLINE();
31913 
31914 	if (IS_VAR == IS_CONST) {
31915 		/* no function found. try a static method in class */
31916 		ce = CACHED_PTR(opline->result.num);
31917 		if (UNEXPECTED(ce == NULL)) {
31918 			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);
31919 			if (UNEXPECTED(ce == NULL)) {
31920 
31921 				HANDLE_EXCEPTION();
31922 			}
31923 			if (IS_CV != IS_CONST) {
31924 				CACHE_PTR(opline->result.num, ce);
31925 			}
31926 		}
31927 	} else if (IS_VAR == IS_UNUSED) {
31928 		ce = zend_fetch_class(NULL, opline->op1.num);
31929 		if (UNEXPECTED(ce == NULL)) {
31930 
31931 			HANDLE_EXCEPTION();
31932 		}
31933 	} else {
31934 		ce = Z_CE_P(EX_VAR(opline->op1.var));
31935 	}
31936 
31937 	if (IS_VAR == IS_CONST &&
31938 	    IS_CV == IS_CONST &&
31939 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
31940 		/* nothing to do */
31941 	} else if (IS_VAR != IS_CONST &&
31942 	           IS_CV == IS_CONST &&
31943 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
31944 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
31945 	} else if (IS_CV != IS_UNUSED) {
31946 		function_name = EX_VAR(opline->op2.var);
31947 		if (IS_CV != IS_CONST) {
31948 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
31949 				do {
31950 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
31951 						function_name = Z_REFVAL_P(function_name);
31952 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
31953 							break;
31954 						}
31955 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
31956 						ZVAL_UNDEFINED_OP2();
31957 						if (UNEXPECTED(EG(exception) != NULL)) {
31958 							HANDLE_EXCEPTION();
31959 						}
31960 					}
31961 					zend_throw_error(NULL, "Method name must be a string");
31962 
31963 					HANDLE_EXCEPTION();
31964 				} while (0);
31965 			}
31966 		}
31967 
31968 		if (ce->get_static_method) {
31969 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
31970 		} else {
31971 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
31972 		}
31973 		if (UNEXPECTED(fbc == NULL)) {
31974 			if (EXPECTED(!EG(exception))) {
31975 				zend_undefined_method(ce, Z_STR_P(function_name));
31976 			}
31977 
31978 			HANDLE_EXCEPTION();
31979 		}
31980 		if (IS_CV == IS_CONST &&
31981 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
31982 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
31983 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
31984 		}
31985 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
31986 			init_func_run_time_cache(&fbc->op_array);
31987 		}
31988 		if (IS_CV != IS_CONST) {
31989 
31990 		}
31991 	} else {
31992 		if (UNEXPECTED(ce->constructor == NULL)) {
31993 			zend_throw_error(NULL, "Cannot call constructor");
31994 			HANDLE_EXCEPTION();
31995 		}
31996 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
31997 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
31998 			HANDLE_EXCEPTION();
31999 		}
32000 		fbc = ce->constructor;
32001 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
32002 			init_func_run_time_cache(&fbc->op_array);
32003 		}
32004 	}
32005 
32006 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
32007 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
32008 			ce = (zend_class_entry*)Z_OBJ(EX(This));
32009 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
32010 		} else {
32011 			zend_non_static_method_call(fbc);
32012 			HANDLE_EXCEPTION();
32013 		}
32014 	} else {
32015 		/* previous opcode is ZEND_FETCH_CLASS */
32016 		if (IS_VAR == IS_UNUSED
32017 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
32018 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
32019 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
32020 				ce = Z_OBJCE(EX(This));
32021 			} else {
32022 				ce = Z_CE(EX(This));
32023 			}
32024 		}
32025 		call_info = ZEND_CALL_NESTED_FUNCTION;
32026 	}
32027 
32028 	call = zend_vm_stack_push_call_frame(call_info,
32029 		fbc, opline->extended_value, ce);
32030 	call->prev_execute_data = EX(call);
32031 	EX(call) = call;
32032 
32033 	ZEND_VM_NEXT_OPCODE();
32034 }
32035 
ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32036 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32037 {
32038 	USE_OPLINE
32039 	zval *expr_ptr, new_expr;
32040 
32041 	SAVE_OPLINE();
32042 	if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) &&
32043 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
32044 		expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32045 		if (Z_ISREF_P(expr_ptr)) {
32046 			Z_ADDREF_P(expr_ptr);
32047 		} else {
32048 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
32049 		}
32050 		zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32051 	} else {
32052 		expr_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32053 		if (IS_VAR == IS_TMP_VAR) {
32054 			/* pass */
32055 		} else if (IS_VAR == IS_CONST) {
32056 			Z_TRY_ADDREF_P(expr_ptr);
32057 		} else if (IS_VAR == IS_CV) {
32058 			ZVAL_DEREF(expr_ptr);
32059 			Z_TRY_ADDREF_P(expr_ptr);
32060 		} else /* if (IS_VAR == IS_VAR) */ {
32061 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
32062 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
32063 
32064 				expr_ptr = Z_REFVAL_P(expr_ptr);
32065 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
32066 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
32067 					expr_ptr = &new_expr;
32068 					efree_size(ref, sizeof(zend_reference));
32069 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
32070 					Z_ADDREF_P(expr_ptr);
32071 				}
32072 			}
32073 		}
32074 	}
32075 
32076 	if (IS_CV != IS_UNUSED) {
32077 		zval *offset = EX_VAR(opline->op2.var);
32078 		zend_string *str;
32079 		zend_ulong hval;
32080 
32081 add_again:
32082 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
32083 			str = Z_STR_P(offset);
32084 			if (IS_CV != IS_CONST) {
32085 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
32086 					goto num_index;
32087 				}
32088 			}
32089 str_index:
32090 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
32091 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
32092 			hval = Z_LVAL_P(offset);
32093 num_index:
32094 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
32095 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
32096 			offset = Z_REFVAL_P(offset);
32097 			goto add_again;
32098 		} else if (Z_TYPE_P(offset) == IS_NULL) {
32099 			str = ZSTR_EMPTY_ALLOC();
32100 			goto str_index;
32101 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
32102 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
32103 			goto num_index;
32104 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
32105 			hval = 0;
32106 			goto num_index;
32107 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
32108 			hval = 1;
32109 			goto num_index;
32110 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
32111 			zend_use_resource_as_offset(offset);
32112 			hval = Z_RES_HANDLE_P(offset);
32113 			goto num_index;
32114 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
32115 			ZVAL_UNDEFINED_OP2();
32116 			str = ZSTR_EMPTY_ALLOC();
32117 			goto str_index;
32118 		} else {
32119 			zend_illegal_array_offset_access(offset);
32120 			zval_ptr_dtor_nogc(expr_ptr);
32121 		}
32122 
32123 	} else {
32124 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
32125 			zend_cannot_add_element();
32126 			zval_ptr_dtor_nogc(expr_ptr);
32127 		}
32128 	}
32129 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32130 }
32131 
ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32132 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32133 {
32134 	zval *array;
32135 	uint32_t size;
32136 	USE_OPLINE
32137 
32138 	array = EX_VAR(opline->result.var);
32139 	if (IS_VAR != IS_UNUSED) {
32140 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
32141 		ZVAL_ARR(array, zend_new_array(size));
32142 		/* Explicitly initialize array as not-packed if flag is set */
32143 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
32144 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
32145 		}
32146 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32147 	} else {
32148 		ZVAL_ARR(array, zend_new_array(0));
32149 		ZEND_VM_NEXT_OPCODE();
32150 	}
32151 }
32152 
ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32153 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32154 {
32155 	USE_OPLINE
32156 	zval *container;
32157 	zval *offset;
32158 	zend_ulong hval;
32159 	zend_string *key;
32160 
32161 	SAVE_OPLINE();
32162 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32163 	offset = EX_VAR(opline->op2.var);
32164 
32165 	do {
32166 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
32167 			HashTable *ht;
32168 
32169 unset_dim_array:
32170 			SEPARATE_ARRAY(container);
32171 			ht = Z_ARRVAL_P(container);
32172 offset_again:
32173 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
32174 				key = Z_STR_P(offset);
32175 				if (IS_CV != IS_CONST) {
32176 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
32177 						goto num_index_dim;
32178 					}
32179 				}
32180 str_index_dim:
32181 				ZEND_ASSERT(ht != &EG(symbol_table));
32182 				zend_hash_del(ht, key);
32183 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
32184 				hval = Z_LVAL_P(offset);
32185 num_index_dim:
32186 				zend_hash_index_del(ht, hval);
32187 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
32188 				offset = Z_REFVAL_P(offset);
32189 				goto offset_again;
32190 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
32191 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
32192 				goto num_index_dim;
32193 			} else if (Z_TYPE_P(offset) == IS_NULL) {
32194 				key = ZSTR_EMPTY_ALLOC();
32195 				goto str_index_dim;
32196 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
32197 				hval = 0;
32198 				goto num_index_dim;
32199 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
32200 				hval = 1;
32201 				goto num_index_dim;
32202 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
32203 				zend_use_resource_as_offset(offset);
32204 				hval = Z_RES_HANDLE_P(offset);
32205 				goto num_index_dim;
32206 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
32207 				ZVAL_UNDEFINED_OP2();
32208 				key = ZSTR_EMPTY_ALLOC();
32209 				goto str_index_dim;
32210 			} else {
32211 				zend_illegal_array_offset_unset(offset);
32212 			}
32213 			break;
32214 		} else if (Z_ISREF_P(container)) {
32215 			container = Z_REFVAL_P(container);
32216 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
32217 				goto unset_dim_array;
32218 			}
32219 		}
32220 		if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32221 			container = ZVAL_UNDEFINED_OP1();
32222 		}
32223 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
32224 			offset = ZVAL_UNDEFINED_OP2();
32225 		}
32226 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
32227 			if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
32228 				offset++;
32229 			}
32230 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
32231 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
32232 			zend_throw_error(NULL, "Cannot unset string offsets");
32233 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
32234 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
32235 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
32236 			zend_false_to_array_deprecated();
32237 		}
32238 	} while (0);
32239 
32240 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32241 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32242 }
32243 
ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32244 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32245 {
32246 	USE_OPLINE
32247 	zval *container;
32248 	zval *offset;
32249 	zend_string *name, *tmp_name;
32250 
32251 	SAVE_OPLINE();
32252 	container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32253 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
32254 
32255 	do {
32256 		if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
32257 			if (Z_ISREF_P(container)) {
32258 				container = Z_REFVAL_P(container);
32259 				if (Z_TYPE_P(container) != IS_OBJECT) {
32260 					if (IS_VAR == IS_CV
32261 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32262 						ZVAL_UNDEFINED_OP1();
32263 					}
32264 					break;
32265 				}
32266 			} else {
32267 				break;
32268 			}
32269 		}
32270 		if (IS_CV == IS_CONST) {
32271 			name = Z_STR_P(offset);
32272 		} else {
32273 			name = zval_try_get_tmp_string(offset, &tmp_name);
32274 			if (UNEXPECTED(!name)) {
32275 				break;
32276 			}
32277 		}
32278 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
32279 		if (IS_CV != IS_CONST) {
32280 			zend_tmp_string_release(tmp_name);
32281 		}
32282 	} while (0);
32283 
32284 	zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32285 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32286 }
32287 
ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32288 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32289 {
32290 	USE_OPLINE
32291 
32292 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
32293 
32294 	SAVE_OPLINE();
32295 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
32296 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
32297 	}
32298 
32299 	/* Destroy the previously yielded value */
32300 	zval_ptr_dtor(&generator->value);
32301 
32302 	/* Destroy the previously yielded key */
32303 	zval_ptr_dtor(&generator->key);
32304 
32305 	/* Set the new yielded value */
32306 	if (IS_VAR != IS_UNUSED) {
32307 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
32308 			/* Constants and temporary variables aren't yieldable by reference,
32309 			 * but we still allow them with a notice. */
32310 			if (IS_VAR & (IS_CONST|IS_TMP_VAR)) {
32311 				zval *value;
32312 
32313 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
32314 
32315 				value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32316 				ZVAL_COPY_VALUE(&generator->value, value);
32317 				if (IS_VAR == IS_CONST) {
32318 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
32319 						Z_ADDREF(generator->value);
32320 					}
32321 				}
32322 			} else {
32323 				zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32324 
32325 				/* If a function call result is yielded and the function did
32326 				 * not return by reference we throw a notice. */
32327 				do {
32328 					if (IS_VAR == IS_VAR) {
32329 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
32330 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
32331 						 && !Z_ISREF_P(value_ptr)) {
32332 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
32333 							ZVAL_COPY(&generator->value, value_ptr);
32334 							break;
32335 						}
32336 					}
32337 					if (Z_ISREF_P(value_ptr)) {
32338 						Z_ADDREF_P(value_ptr);
32339 					} else {
32340 						ZVAL_MAKE_REF_EX(value_ptr, 2);
32341 					}
32342 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
32343 				} while (0);
32344 
32345 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32346 			}
32347 		} else {
32348 			zval *value = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
32349 
32350 			/* Consts, temporary variables and references need copying */
32351 			if (IS_VAR == IS_CONST) {
32352 				ZVAL_COPY_VALUE(&generator->value, value);
32353 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
32354 					Z_ADDREF(generator->value);
32355 				}
32356 			} else if (IS_VAR == IS_TMP_VAR) {
32357 				ZVAL_COPY_VALUE(&generator->value, value);
32358 			} else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
32359 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
32360 				zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
32361 			} else {
32362 				ZVAL_COPY_VALUE(&generator->value, value);
32363 				if (IS_VAR == IS_CV) {
32364 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
32365 				}
32366 			}
32367 		}
32368 	} else {
32369 		/* If no value was specified yield null */
32370 		ZVAL_NULL(&generator->value);
32371 	}
32372 
32373 	/* Set the new yielded key */
32374 	if (IS_CV != IS_UNUSED) {
32375 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
32376 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
32377 			key = Z_REFVAL_P(key);
32378 		}
32379 		ZVAL_COPY(&generator->key, key);
32380 
32381 		if (Z_TYPE(generator->key) == IS_LONG
32382 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
32383 		) {
32384 			generator->largest_used_integer_key = Z_LVAL(generator->key);
32385 		}
32386 	} else {
32387 		/* If no key was specified we use auto-increment keys */
32388 		generator->largest_used_integer_key++;
32389 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
32390 	}
32391 
32392 	if (RETURN_VALUE_USED(opline)) {
32393 		/* If the return value of yield is used set the send
32394 		 * target and initialize it to NULL */
32395 		generator->send_target = EX_VAR(opline->result.var);
32396 		ZVAL_NULL(generator->send_target);
32397 	} else {
32398 		generator->send_target = NULL;
32399 	}
32400 
32401 	/* We increment to the next op, so we are at the correct position when the
32402 	 * generator is resumed. */
32403 	ZEND_VM_INC_OPCODE();
32404 
32405 	/* The GOTO VM uses a local opline variable. We need to set the opline
32406 	 * variable in execute_data so we don't resume at an old position. */
32407 	SAVE_OPLINE();
32408 
32409 	ZEND_VM_RETURN();
32410 }
32411 
ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32412 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)
32413 {
32414 	USE_OPLINE
32415 	zval *array;
32416 	zval *value, *variable_ptr;
32417 	uint32_t value_type;
32418 	HashTable *fe_ht;
32419 	HashPosition pos;
32420 
32421 	array = EX_VAR(opline->op1.var);
32422 	SAVE_OPLINE();
32423 	fe_ht = Z_ARRVAL_P(array);
32424 	pos = Z_FE_POS_P(array);
32425 	if (HT_IS_PACKED(fe_ht)) {
32426 		value = fe_ht->arPacked + pos;
32427 		while (1) {
32428 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
32429 				/* reached end of iteration */
32430 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
32431 				ZEND_VM_CONTINUE();
32432 			}
32433 			value_type = Z_TYPE_INFO_P(value);
32434 			ZEND_ASSERT(value_type != IS_INDIRECT);
32435 			if (EXPECTED(value_type != IS_UNDEF)) {
32436 				break;
32437 			}
32438 			pos++;
32439 			value++;
32440 		}
32441 		Z_FE_POS_P(array) = pos + 1;
32442 		if (0) {
32443 			ZVAL_LONG(EX_VAR(opline->result.var), pos);
32444 		}
32445 	} else {
32446 		Bucket *p;
32447 
32448 		p = fe_ht->arData + pos;
32449 		while (1) {
32450 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
32451 				/* reached end of iteration */
32452 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
32453 				ZEND_VM_CONTINUE();
32454 			}
32455 			pos++;
32456 			value = &p->val;
32457 			value_type = Z_TYPE_INFO_P(value);
32458 			ZEND_ASSERT(value_type != IS_INDIRECT);
32459 			if (EXPECTED(value_type != IS_UNDEF)) {
32460 				break;
32461 			}
32462 			p++;
32463 		}
32464 		Z_FE_POS_P(array) = pos;
32465 		if (0) {
32466 			if (!p->key) {
32467 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
32468 			} else {
32469 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
32470 			}
32471 		}
32472 	}
32473 
32474 	variable_ptr = EX_VAR(opline->op2.var);
32475 	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
32476 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32477 }
32478 
32479 
ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32480 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)
32481 {
32482 	USE_OPLINE
32483 	zval *array;
32484 	zval *value, *variable_ptr;
32485 	uint32_t value_type;
32486 	HashTable *fe_ht;
32487 	HashPosition pos;
32488 
32489 	array = EX_VAR(opline->op1.var);
32490 	SAVE_OPLINE();
32491 	fe_ht = Z_ARRVAL_P(array);
32492 	pos = Z_FE_POS_P(array);
32493 	if (HT_IS_PACKED(fe_ht)) {
32494 		value = fe_ht->arPacked + pos;
32495 		while (1) {
32496 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
32497 				/* reached end of iteration */
32498 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
32499 				ZEND_VM_CONTINUE();
32500 			}
32501 			value_type = Z_TYPE_INFO_P(value);
32502 			ZEND_ASSERT(value_type != IS_INDIRECT);
32503 			if (EXPECTED(value_type != IS_UNDEF)) {
32504 				break;
32505 			}
32506 			pos++;
32507 			value++;
32508 		}
32509 		Z_FE_POS_P(array) = pos + 1;
32510 		if (1) {
32511 			ZVAL_LONG(EX_VAR(opline->result.var), pos);
32512 		}
32513 	} else {
32514 		Bucket *p;
32515 
32516 		p = fe_ht->arData + pos;
32517 		while (1) {
32518 			if (UNEXPECTED(pos >= fe_ht->nNumUsed)) {
32519 				/* reached end of iteration */
32520 				ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value);
32521 				ZEND_VM_CONTINUE();
32522 			}
32523 			pos++;
32524 			value = &p->val;
32525 			value_type = Z_TYPE_INFO_P(value);
32526 			ZEND_ASSERT(value_type != IS_INDIRECT);
32527 			if (EXPECTED(value_type != IS_UNDEF)) {
32528 				break;
32529 			}
32530 			p++;
32531 		}
32532 		Z_FE_POS_P(array) = pos;
32533 		if (1) {
32534 			if (!p->key) {
32535 				ZVAL_LONG(EX_VAR(opline->result.var), p->h);
32536 			} else {
32537 				ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key);
32538 			}
32539 		}
32540 	}
32541 
32542 	variable_ptr = EX_VAR(opline->op2.var);
32543 	zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
32544 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32545 }
32546 
32547 
ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32548 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32549 {
32550 	USE_OPLINE
32551 	zval *obj;
32552 	zend_object *zobj;
32553 	zend_class_entry *ce, *scope;
32554 	zend_function *clone;
32555 	zend_object_clone_obj_t clone_call;
32556 
32557 	SAVE_OPLINE();
32558 	obj = &EX(This);
32559 
32560 	do {
32561 		if (IS_UNUSED == IS_CONST ||
32562 		    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
32563 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
32564 				obj = Z_REFVAL_P(obj);
32565 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
32566 					break;
32567 				}
32568 			}
32569 			ZVAL_UNDEF(EX_VAR(opline->result.var));
32570 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
32571 				ZVAL_UNDEFINED_OP1();
32572 				if (UNEXPECTED(EG(exception) != NULL)) {
32573 					HANDLE_EXCEPTION();
32574 				}
32575 			}
32576 			zend_throw_error(NULL, "__clone method called on non-object");
32577 
32578 			HANDLE_EXCEPTION();
32579 		}
32580 	} while (0);
32581 
32582 	zobj = Z_OBJ_P(obj);
32583 	ce = zobj->ce;
32584 	clone = ce->clone;
32585 	clone_call = zobj->handlers->clone_obj;
32586 	if (UNEXPECTED(clone_call == NULL)) {
32587 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
32588 
32589 		ZVAL_UNDEF(EX_VAR(opline->result.var));
32590 		HANDLE_EXCEPTION();
32591 	}
32592 
32593 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
32594 		scope = EX(func)->op_array.scope;
32595 		if (clone->common.scope != scope) {
32596 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
32597 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
32598 				zend_wrong_clone_call(clone, scope);
32599 
32600 				ZVAL_UNDEF(EX_VAR(opline->result.var));
32601 				HANDLE_EXCEPTION();
32602 			}
32603 		}
32604 	}
32605 
32606 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
32607 
32608 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32609 }
32610 
ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32611 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32612 {
32613 	uint32_t fetch_type;
32614 	zend_class_entry *called_scope, *scope;
32615 	USE_OPLINE
32616 
32617 	if (IS_UNUSED != IS_UNUSED) {
32618 		SAVE_OPLINE();
32619 		zval *op = NULL;
32620 		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
32621 			ZVAL_DEREF(op);
32622 			if (Z_TYPE_P(op) != IS_OBJECT) {
32623 				zend_type_error("Cannot use \"::class\" on %s", zend_zval_value_name(op));
32624 				ZVAL_UNDEF(EX_VAR(opline->result.var));
32625 
32626 				HANDLE_EXCEPTION();
32627 			}
32628 		}
32629 
32630 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
32631 
32632 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32633 	}
32634 
32635 	fetch_type = opline->op1.num;
32636 	scope = EX(func)->op_array.scope;
32637 	if (UNEXPECTED(scope == NULL)) {
32638 		SAVE_OPLINE();
32639 		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
32640 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
32641 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
32642 		ZVAL_UNDEF(EX_VAR(opline->result.var));
32643 		HANDLE_EXCEPTION();
32644 	}
32645 
32646 	switch (fetch_type) {
32647 		case ZEND_FETCH_CLASS_SELF:
32648 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
32649 			break;
32650 		case ZEND_FETCH_CLASS_PARENT:
32651 			if (UNEXPECTED(scope->parent == NULL)) {
32652 				SAVE_OPLINE();
32653 				zend_throw_error(NULL,
32654 					"Cannot use \"parent\" when current class scope has no parent");
32655 				ZVAL_UNDEF(EX_VAR(opline->result.var));
32656 				HANDLE_EXCEPTION();
32657 			}
32658 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
32659 			break;
32660 		case ZEND_FETCH_CLASS_STATIC:
32661 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
32662 				called_scope = Z_OBJCE(EX(This));
32663 			} else {
32664 				called_scope = Z_CE(EX(This));
32665 			}
32666 			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
32667 			break;
32668 		EMPTY_SWITCH_DEFAULT_CASE()
32669 	}
32670 	ZEND_VM_NEXT_OPCODE();
32671 }
32672 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32673 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32674 {
32675 	USE_OPLINE
32676 	zval *object;
32677 	zval *property;
32678 	zval *value;
32679 	zval *zptr;
32680 	void **cache_slot;
32681 	zend_property_info *prop_info;
32682 	zend_object *zobj;
32683 	zend_string *name, *tmp_name;
32684 
32685 	SAVE_OPLINE();
32686 	object = &EX(This);
32687 	property = RT_CONSTANT(opline, opline->op2);
32688 
32689 	do {
32690 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
32691 
32692 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32693 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32694 				object = Z_REFVAL_P(object);
32695 				goto assign_op_object;
32696 			}
32697 			if (IS_UNUSED == IS_CV
32698 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32699 				ZVAL_UNDEFINED_OP1();
32700 			}
32701 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
32702 			break;
32703 		}
32704 
32705 assign_op_object:
32706 		/* here we are sure we are dealing with an object */
32707 		zobj = Z_OBJ_P(object);
32708 		if (IS_CONST == IS_CONST) {
32709 			name = Z_STR_P(property);
32710 		} else {
32711 			name = zval_try_get_tmp_string(property, &tmp_name);
32712 			if (UNEXPECTED(!name)) {
32713 				UNDEF_RESULT();
32714 				break;
32715 			}
32716 		}
32717 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
32718 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
32719 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
32720 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32721 					ZVAL_NULL(EX_VAR(opline->result.var));
32722 				}
32723 			} else {
32724 				zval *orig_zptr = zptr;
32725 				zend_reference *ref;
32726 
32727 				do {
32728 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
32729 						ref = Z_REF_P(zptr);
32730 						zptr = Z_REFVAL_P(zptr);
32731 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
32732 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
32733 							break;
32734 						}
32735 					}
32736 
32737 					if (IS_CONST == IS_CONST) {
32738 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
32739 					} else {
32740 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
32741 					}
32742 					if (UNEXPECTED(prop_info)) {
32743 						/* special case for typed properties */
32744 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
32745 					} else {
32746 						zend_binary_op(zptr, zptr, value OPLINE_CC);
32747 					}
32748 				} while (0);
32749 
32750 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32751 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
32752 				}
32753 			}
32754 		} else {
32755 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
32756 		}
32757 		if (IS_CONST != IS_CONST) {
32758 			zend_tmp_string_release(tmp_name);
32759 		}
32760 	} while (0);
32761 
32762 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
32763 
32764 
32765 	/* assign_obj has two opcodes! */
32766 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
32767 }
32768 
32769 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32770 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32771 {
32772 	USE_OPLINE
32773 	zval *object;
32774 	zval *property;
32775 	zval *zptr;
32776 	void **cache_slot;
32777 	zend_property_info *prop_info;
32778 	zend_object *zobj;
32779 	zend_string *name, *tmp_name;
32780 
32781 	SAVE_OPLINE();
32782 	object = &EX(This);
32783 	property = RT_CONSTANT(opline, opline->op2);
32784 
32785 	do {
32786 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32787 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32788 				object = Z_REFVAL_P(object);
32789 				goto pre_incdec_object;
32790 			}
32791 			if (IS_UNUSED == IS_CV
32792 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32793 				ZVAL_UNDEFINED_OP1();
32794 			}
32795 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
32796 			break;
32797 		}
32798 
32799 pre_incdec_object:
32800 		/* here we are sure we are dealing with an object */
32801 		zobj = Z_OBJ_P(object);
32802 		if (IS_CONST == IS_CONST) {
32803 			name = Z_STR_P(property);
32804 		} else {
32805 			name = zval_try_get_tmp_string(property, &tmp_name);
32806 			if (UNEXPECTED(!name)) {
32807 				UNDEF_RESULT();
32808 				break;
32809 			}
32810 		}
32811 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
32812 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
32813 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
32814 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
32815 					ZVAL_NULL(EX_VAR(opline->result.var));
32816 				}
32817 			} else {
32818 				if (IS_CONST == IS_CONST) {
32819 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
32820 				} else {
32821 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
32822 				}
32823 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
32824 			}
32825 		} else {
32826 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
32827 		}
32828 		if (IS_CONST != IS_CONST) {
32829 			zend_tmp_string_release(tmp_name);
32830 		}
32831 	} while (0);
32832 
32833 
32834 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32835 }
32836 
ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32837 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32838 {
32839 	USE_OPLINE
32840 	zval *object;
32841 	zval *property;
32842 	zval *zptr;
32843 	void **cache_slot;
32844 	zend_property_info *prop_info;
32845 	zend_object *zobj;
32846 	zend_string *name, *tmp_name;
32847 
32848 	SAVE_OPLINE();
32849 	object = &EX(This);
32850 	property = RT_CONSTANT(opline, opline->op2);
32851 
32852 	do {
32853 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
32854 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
32855 				object = Z_REFVAL_P(object);
32856 				goto post_incdec_object;
32857 			}
32858 			if (IS_UNUSED == IS_CV
32859 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
32860 				ZVAL_UNDEFINED_OP1();
32861 			}
32862 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
32863 			break;
32864 		}
32865 
32866 post_incdec_object:
32867 		/* here we are sure we are dealing with an object */
32868 		zobj = Z_OBJ_P(object);
32869 		if (IS_CONST == IS_CONST) {
32870 			name = Z_STR_P(property);
32871 		} else {
32872 			name = zval_try_get_tmp_string(property, &tmp_name);
32873 			if (UNEXPECTED(!name)) {
32874 				ZVAL_UNDEF(EX_VAR(opline->result.var));
32875 				break;
32876 			}
32877 		}
32878 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
32879 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
32880 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
32881 				ZVAL_NULL(EX_VAR(opline->result.var));
32882 			} else {
32883 				if (IS_CONST == IS_CONST) {
32884 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
32885 				} else {
32886 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
32887 				}
32888 
32889 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
32890 			}
32891 		} else {
32892 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
32893 		}
32894 		if (IS_CONST != IS_CONST) {
32895 			zend_tmp_string_release(tmp_name);
32896 		}
32897 	} while (0);
32898 
32899 
32900 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
32901 }
32902 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)32903 static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
32904 {
32905 	USE_OPLINE
32906 	zval *container;
32907 	void **cache_slot = NULL;
32908 
32909 	SAVE_OPLINE();
32910 	container = &EX(This);
32911 
32912 	if (IS_UNUSED == IS_CONST ||
32913 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
32914 		do {
32915 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
32916 				container = Z_REFVAL_P(container);
32917 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
32918 					break;
32919 				}
32920 			}
32921 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
32922 				ZVAL_UNDEFINED_OP1();
32923 			}
32924 			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
32925 			ZVAL_NULL(EX_VAR(opline->result.var));
32926 			goto fetch_obj_r_finish;
32927 		} while (0);
32928 	}
32929 
32930 	/* here we are sure we are dealing with an object */
32931 	do {
32932 		zend_object *zobj = Z_OBJ_P(container);
32933 		zend_string *name, *tmp_name;
32934 		zval *retval;
32935 
32936 		if (IS_CONST == IS_CONST) {
32937 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
32938 
32939 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
32940 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
32941 
32942 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
32943 					retval = OBJ_PROP(zobj, prop_offset);
32944 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
32945 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32946 							goto fetch_obj_r_copy;
32947 						} else {
32948 fetch_obj_r_fast_copy:
32949 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
32950 							ZEND_VM_NEXT_OPCODE();
32951 						}
32952 					}
32953 				} else if (EXPECTED(zobj->properties != NULL)) {
32954 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32955 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
32956 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
32957 
32958 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
32959 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
32960 
32961 							if (EXPECTED(p->key == name) ||
32962 							    (EXPECTED(p->h == ZSTR_H(name)) &&
32963 							     EXPECTED(p->key != NULL) &&
32964 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
32965 								retval = &p->val;
32966 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32967 									goto fetch_obj_r_copy;
32968 								} else {
32969 									goto fetch_obj_r_fast_copy;
32970 								}
32971 							}
32972 						}
32973 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
32974 					}
32975 					retval = zend_hash_find_known_hash(zobj->properties, name);
32976 					if (EXPECTED(retval)) {
32977 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
32978 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
32979 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
32980 							goto fetch_obj_r_copy;
32981 						} else {
32982 							goto fetch_obj_r_fast_copy;
32983 						}
32984 					}
32985 				}
32986 			}
32987 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
32988 		} else {
32989 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
32990 			if (UNEXPECTED(!name)) {
32991 				ZVAL_UNDEF(EX_VAR(opline->result.var));
32992 				break;
32993 			}
32994 		}
32995 
32996 #if ZEND_DEBUG
32997 		/* For non-standard object handlers, verify a declared property type in debug builds.
32998 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
32999 		zend_property_info *prop_info = NULL;
33000 		if (zobj->handlers->read_property != zend_std_read_property) {
33001 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
33002 		}
33003 #endif
33004 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
33005 #if ZEND_DEBUG
33006 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
33007 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
33008 			ZVAL_OPT_DEREF(retval);
33009 			zend_verify_property_type(prop_info, retval, /* strict */ true);
33010 		}
33011 #endif
33012 
33013 		if (IS_CONST != IS_CONST) {
33014 			zend_tmp_string_release(tmp_name);
33015 		}
33016 
33017 		if (retval != EX_VAR(opline->result.var)) {
33018 fetch_obj_r_copy:
33019 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
33020 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
33021 			zend_unwrap_reference(retval);
33022 		}
33023 	} while (0);
33024 
33025 fetch_obj_r_finish:
33026 
33027 
33028 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33029 }
33030 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33031 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33032 {
33033 	ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33034 }
33035 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33036 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33037 {
33038 	USE_OPLINE
33039 	zval *property, *container, *result;
33040 
33041 	SAVE_OPLINE();
33042 
33043 	container = &EX(This);
33044 	property = RT_CONSTANT(opline, opline->op2);
33045 	result = EX_VAR(opline->result.var);
33046 	zend_fetch_property_address(
33047 		result, container, IS_UNUSED, property, IS_CONST,
33048 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
33049 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
33050 
33051 	if (IS_UNUSED == IS_VAR) {
33052 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
33053 	}
33054 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33055 }
33056 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33057 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33058 {
33059 	USE_OPLINE
33060 	zval *property, *container, *result;
33061 
33062 	SAVE_OPLINE();
33063 	container = &EX(This);
33064 	property = RT_CONSTANT(opline, opline->op2);
33065 	result = EX_VAR(opline->result.var);
33066 	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
33067 
33068 	if (IS_UNUSED == IS_VAR) {
33069 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
33070 	}
33071 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33072 }
33073 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33074 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33075 {
33076 	USE_OPLINE
33077 	zval *container;
33078 	void **cache_slot = NULL;
33079 
33080 	SAVE_OPLINE();
33081 	container = &EX(This);
33082 
33083 	if (IS_UNUSED == IS_CONST ||
33084 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
33085 		do {
33086 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
33087 				container = Z_REFVAL_P(container);
33088 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
33089 					break;
33090 				}
33091 			}
33092 			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
33093 				ZVAL_UNDEFINED_OP2();
33094 			}
33095 			ZVAL_NULL(EX_VAR(opline->result.var));
33096 			goto fetch_obj_is_finish;
33097 		} while (0);
33098 	}
33099 
33100 	/* here we are sure we are dealing with an object */
33101 	do {
33102 		zend_object *zobj = Z_OBJ_P(container);
33103 		zend_string *name, *tmp_name;
33104 		zval *retval;
33105 
33106 		if (IS_CONST == IS_CONST) {
33107 			cache_slot = CACHE_ADDR(opline->extended_value);
33108 
33109 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
33110 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33111 
33112 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33113 					retval = OBJ_PROP(zobj, prop_offset);
33114 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
33115 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33116 							goto fetch_obj_is_copy;
33117 						} else {
33118 fetch_obj_is_fast_copy:
33119 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
33120 							ZEND_VM_NEXT_OPCODE();
33121 						}
33122 					}
33123 				} else if (EXPECTED(zobj->properties != NULL)) {
33124 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33125 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
33126 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
33127 
33128 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
33129 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
33130 
33131 							if (EXPECTED(p->key == name) ||
33132 							    (EXPECTED(p->h == ZSTR_H(name)) &&
33133 							     EXPECTED(p->key != NULL) &&
33134 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
33135 								retval = &p->val;
33136 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33137 									goto fetch_obj_is_copy;
33138 								} else {
33139 									goto fetch_obj_is_fast_copy;
33140 								}
33141 							}
33142 						}
33143 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
33144 					}
33145 					retval = zend_hash_find_known_hash(zobj->properties, name);
33146 					if (EXPECTED(retval)) {
33147 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
33148 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
33149 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
33150 							goto fetch_obj_is_copy;
33151 						} else {
33152 							goto fetch_obj_is_fast_copy;
33153 						}
33154 					}
33155 				}
33156 			}
33157 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33158 		} else {
33159 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
33160 			if (UNEXPECTED(!name)) {
33161 				ZVAL_UNDEF(EX_VAR(opline->result.var));
33162 				break;
33163 			}
33164 		}
33165 
33166 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
33167 
33168 		if (IS_CONST != IS_CONST) {
33169 			zend_tmp_string_release(tmp_name);
33170 		}
33171 
33172 		if (retval != EX_VAR(opline->result.var)) {
33173 fetch_obj_is_copy:
33174 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
33175 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
33176 			zend_unwrap_reference(retval);
33177 		}
33178 	} while (0);
33179 
33180 fetch_obj_is_finish:
33181 
33182 
33183 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33184 }
33185 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33186 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33187 {
33188 #if 0
33189 	USE_OPLINE
33190 #endif
33191 
33192 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
33193 		/* Behave like FETCH_OBJ_W */
33194 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
33195 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33196 		}
33197 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33198 	} else {
33199 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
33200 	}
33201 }
33202 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33203 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33204 {
33205 	USE_OPLINE
33206 	zval *container, *property, *result;
33207 
33208 	SAVE_OPLINE();
33209 	container = &EX(This);
33210 	property = RT_CONSTANT(opline, opline->op2);
33211 	result = EX_VAR(opline->result.var);
33212 	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0 OPLINE_CC EXECUTE_DATA_CC);
33213 
33214 	if (IS_UNUSED == IS_VAR) {
33215 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
33216 	}
33217 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33218 }
33219 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33220 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33221 {
33222 	USE_OPLINE
33223 	zval *object, *value, tmp;
33224 	zend_object *zobj;
33225 	zend_string *name, *tmp_name;
33226 	zend_refcounted *garbage = NULL;
33227 
33228 	SAVE_OPLINE();
33229 	object = &EX(This);
33230 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
33231 
33232 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33233 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33234 			object = Z_REFVAL_P(object);
33235 			goto assign_object;
33236 		}
33237 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
33238 		value = &EG(uninitialized_zval);
33239 		goto free_and_exit_assign_obj;
33240 	}
33241 
33242 assign_object:
33243 	zobj = Z_OBJ_P(object);
33244 	if (IS_CONST == IS_CONST) {
33245 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
33246 			void **cache_slot = CACHE_ADDR(opline->extended_value);
33247 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33248 			zval *property_val;
33249 
33250 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33251 				property_val = OBJ_PROP(zobj, prop_offset);
33252 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
33253 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
33254 
33255 					if (UNEXPECTED(prop_info != NULL)) {
33256 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
33257 						goto free_and_exit_assign_obj;
33258 					} else {
33259 fast_assign_obj:
33260 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
33261 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33262 							ZVAL_COPY(EX_VAR(opline->result.var), value);
33263 						}
33264 						goto exit_assign_obj;
33265 					}
33266 				}
33267 			} else {
33268 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33269 				if (EXPECTED(zobj->properties != NULL)) {
33270 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33271 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33272 							GC_DELREF(zobj->properties);
33273 						}
33274 						zobj->properties = zend_array_dup(zobj->properties);
33275 					}
33276 					property_val = zend_hash_find_known_hash(zobj->properties, name);
33277 					if (property_val) {
33278 						goto fast_assign_obj;
33279 					}
33280 				}
33281 
33282 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
33283 					if (EXPECTED(zobj->properties == NULL)) {
33284 						rebuild_object_properties(zobj);
33285 					}
33286 					if (IS_CONST == IS_CONST) {
33287 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33288 							Z_ADDREF_P(value);
33289 						}
33290 					} else if (IS_CONST != IS_TMP_VAR) {
33291 						if (Z_ISREF_P(value)) {
33292 							if (IS_CONST == IS_VAR) {
33293 								zend_reference *ref = Z_REF_P(value);
33294 								if (GC_DELREF(ref) == 0) {
33295 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33296 									efree_size(ref, sizeof(zend_reference));
33297 									value = &tmp;
33298 								} else {
33299 									value = Z_REFVAL_P(value);
33300 									Z_TRY_ADDREF_P(value);
33301 								}
33302 							} else {
33303 								value = Z_REFVAL_P(value);
33304 								Z_TRY_ADDREF_P(value);
33305 							}
33306 						} else if (IS_CONST == IS_CV) {
33307 							Z_TRY_ADDREF_P(value);
33308 						}
33309 						}
33310 					zend_hash_add_new(zobj->properties, name, value);
33311 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33312 						ZVAL_COPY(EX_VAR(opline->result.var), value);
33313 					}
33314 					goto exit_assign_obj;
33315 				}
33316 			}
33317 		}
33318 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33319 	} else {
33320 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
33321 		if (UNEXPECTED(!name)) {
33322 
33323 			UNDEF_RESULT();
33324 			goto exit_assign_obj;
33325 		}
33326 	}
33327 
33328 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
33329 		ZVAL_DEREF(value);
33330 	}
33331 
33332 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
33333 
33334 	if (IS_CONST != IS_CONST) {
33335 		zend_tmp_string_release(tmp_name);
33336 	}
33337 
33338 free_and_exit_assign_obj:
33339 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
33340 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
33341 	}
33342 
33343 exit_assign_obj:
33344 	if (garbage) {
33345 		GC_DTOR_NO_REF(garbage);
33346 	}
33347 
33348 
33349 	/* assign_obj has two opcodes! */
33350 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33351 }
33352 
33353 /* 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)33354 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33355 {
33356 	USE_OPLINE
33357 	zval *object, *value, tmp;
33358 	zend_object *zobj;
33359 	zend_string *name, *tmp_name;
33360 	zend_refcounted *garbage = NULL;
33361 
33362 	SAVE_OPLINE();
33363 	object = &EX(This);
33364 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
33365 
33366 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33367 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33368 			object = Z_REFVAL_P(object);
33369 			goto assign_object;
33370 		}
33371 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
33372 		value = &EG(uninitialized_zval);
33373 		goto free_and_exit_assign_obj;
33374 	}
33375 
33376 assign_object:
33377 	zobj = Z_OBJ_P(object);
33378 	if (IS_CONST == IS_CONST) {
33379 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
33380 			void **cache_slot = CACHE_ADDR(opline->extended_value);
33381 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33382 			zval *property_val;
33383 
33384 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33385 				property_val = OBJ_PROP(zobj, prop_offset);
33386 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
33387 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
33388 
33389 					if (UNEXPECTED(prop_info != NULL)) {
33390 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
33391 						goto free_and_exit_assign_obj;
33392 					} else {
33393 fast_assign_obj:
33394 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
33395 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33396 							ZVAL_COPY(EX_VAR(opline->result.var), value);
33397 						}
33398 						goto exit_assign_obj;
33399 					}
33400 				}
33401 			} else {
33402 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33403 				if (EXPECTED(zobj->properties != NULL)) {
33404 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33405 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33406 							GC_DELREF(zobj->properties);
33407 						}
33408 						zobj->properties = zend_array_dup(zobj->properties);
33409 					}
33410 					property_val = zend_hash_find_known_hash(zobj->properties, name);
33411 					if (property_val) {
33412 						goto fast_assign_obj;
33413 					}
33414 				}
33415 
33416 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
33417 					if (EXPECTED(zobj->properties == NULL)) {
33418 						rebuild_object_properties(zobj);
33419 					}
33420 					if (IS_TMP_VAR == IS_CONST) {
33421 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33422 							Z_ADDREF_P(value);
33423 						}
33424 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
33425 						if (Z_ISREF_P(value)) {
33426 							if (IS_TMP_VAR == IS_VAR) {
33427 								zend_reference *ref = Z_REF_P(value);
33428 								if (GC_DELREF(ref) == 0) {
33429 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33430 									efree_size(ref, sizeof(zend_reference));
33431 									value = &tmp;
33432 								} else {
33433 									value = Z_REFVAL_P(value);
33434 									Z_TRY_ADDREF_P(value);
33435 								}
33436 							} else {
33437 								value = Z_REFVAL_P(value);
33438 								Z_TRY_ADDREF_P(value);
33439 							}
33440 						} else if (IS_TMP_VAR == IS_CV) {
33441 							Z_TRY_ADDREF_P(value);
33442 						}
33443 						}
33444 					zend_hash_add_new(zobj->properties, name, value);
33445 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33446 						ZVAL_COPY(EX_VAR(opline->result.var), value);
33447 					}
33448 					goto exit_assign_obj;
33449 				}
33450 			}
33451 		}
33452 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33453 	} else {
33454 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
33455 		if (UNEXPECTED(!name)) {
33456 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
33457 			UNDEF_RESULT();
33458 			goto exit_assign_obj;
33459 		}
33460 	}
33461 
33462 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
33463 		ZVAL_DEREF(value);
33464 	}
33465 
33466 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
33467 
33468 	if (IS_CONST != IS_CONST) {
33469 		zend_tmp_string_release(tmp_name);
33470 	}
33471 
33472 free_and_exit_assign_obj:
33473 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
33474 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
33475 	}
33476 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
33477 exit_assign_obj:
33478 	if (garbage) {
33479 		GC_DTOR_NO_REF(garbage);
33480 	}
33481 
33482 
33483 	/* assign_obj has two opcodes! */
33484 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33485 }
33486 
33487 /* 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)33488 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33489 {
33490 	USE_OPLINE
33491 	zval *object, *value, tmp;
33492 	zend_object *zobj;
33493 	zend_string *name, *tmp_name;
33494 	zend_refcounted *garbage = NULL;
33495 
33496 	SAVE_OPLINE();
33497 	object = &EX(This);
33498 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
33499 
33500 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33501 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33502 			object = Z_REFVAL_P(object);
33503 			goto assign_object;
33504 		}
33505 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
33506 		value = &EG(uninitialized_zval);
33507 		goto free_and_exit_assign_obj;
33508 	}
33509 
33510 assign_object:
33511 	zobj = Z_OBJ_P(object);
33512 	if (IS_CONST == IS_CONST) {
33513 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
33514 			void **cache_slot = CACHE_ADDR(opline->extended_value);
33515 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33516 			zval *property_val;
33517 
33518 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33519 				property_val = OBJ_PROP(zobj, prop_offset);
33520 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
33521 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
33522 
33523 					if (UNEXPECTED(prop_info != NULL)) {
33524 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
33525 						goto free_and_exit_assign_obj;
33526 					} else {
33527 fast_assign_obj:
33528 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
33529 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33530 							ZVAL_COPY(EX_VAR(opline->result.var), value);
33531 						}
33532 						goto exit_assign_obj;
33533 					}
33534 				}
33535 			} else {
33536 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33537 				if (EXPECTED(zobj->properties != NULL)) {
33538 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33539 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33540 							GC_DELREF(zobj->properties);
33541 						}
33542 						zobj->properties = zend_array_dup(zobj->properties);
33543 					}
33544 					property_val = zend_hash_find_known_hash(zobj->properties, name);
33545 					if (property_val) {
33546 						goto fast_assign_obj;
33547 					}
33548 				}
33549 
33550 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
33551 					if (EXPECTED(zobj->properties == NULL)) {
33552 						rebuild_object_properties(zobj);
33553 					}
33554 					if (IS_VAR == IS_CONST) {
33555 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33556 							Z_ADDREF_P(value);
33557 						}
33558 					} else if (IS_VAR != IS_TMP_VAR) {
33559 						if (Z_ISREF_P(value)) {
33560 							if (IS_VAR == IS_VAR) {
33561 								zend_reference *ref = Z_REF_P(value);
33562 								if (GC_DELREF(ref) == 0) {
33563 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33564 									efree_size(ref, sizeof(zend_reference));
33565 									value = &tmp;
33566 								} else {
33567 									value = Z_REFVAL_P(value);
33568 									Z_TRY_ADDREF_P(value);
33569 								}
33570 							} else {
33571 								value = Z_REFVAL_P(value);
33572 								Z_TRY_ADDREF_P(value);
33573 							}
33574 						} else if (IS_VAR == IS_CV) {
33575 							Z_TRY_ADDREF_P(value);
33576 						}
33577 						}
33578 					zend_hash_add_new(zobj->properties, name, value);
33579 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33580 						ZVAL_COPY(EX_VAR(opline->result.var), value);
33581 					}
33582 					goto exit_assign_obj;
33583 				}
33584 			}
33585 		}
33586 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33587 	} else {
33588 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
33589 		if (UNEXPECTED(!name)) {
33590 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
33591 			UNDEF_RESULT();
33592 			goto exit_assign_obj;
33593 		}
33594 	}
33595 
33596 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
33597 		ZVAL_DEREF(value);
33598 	}
33599 
33600 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
33601 
33602 	if (IS_CONST != IS_CONST) {
33603 		zend_tmp_string_release(tmp_name);
33604 	}
33605 
33606 free_and_exit_assign_obj:
33607 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
33608 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
33609 	}
33610 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
33611 exit_assign_obj:
33612 	if (garbage) {
33613 		GC_DTOR_NO_REF(garbage);
33614 	}
33615 
33616 
33617 	/* assign_obj has two opcodes! */
33618 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33619 }
33620 
33621 /* 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)33622 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33623 {
33624 	USE_OPLINE
33625 	zval *object, *value, tmp;
33626 	zend_object *zobj;
33627 	zend_string *name, *tmp_name;
33628 	zend_refcounted *garbage = NULL;
33629 
33630 	SAVE_OPLINE();
33631 	object = &EX(This);
33632 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
33633 
33634 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
33635 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
33636 			object = Z_REFVAL_P(object);
33637 			goto assign_object;
33638 		}
33639 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
33640 		value = &EG(uninitialized_zval);
33641 		goto free_and_exit_assign_obj;
33642 	}
33643 
33644 assign_object:
33645 	zobj = Z_OBJ_P(object);
33646 	if (IS_CONST == IS_CONST) {
33647 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
33648 			void **cache_slot = CACHE_ADDR(opline->extended_value);
33649 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
33650 			zval *property_val;
33651 
33652 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
33653 				property_val = OBJ_PROP(zobj, prop_offset);
33654 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
33655 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
33656 
33657 					if (UNEXPECTED(prop_info != NULL)) {
33658 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
33659 						goto free_and_exit_assign_obj;
33660 					} else {
33661 fast_assign_obj:
33662 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
33663 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33664 							ZVAL_COPY(EX_VAR(opline->result.var), value);
33665 						}
33666 						goto exit_assign_obj;
33667 					}
33668 				}
33669 			} else {
33670 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33671 				if (EXPECTED(zobj->properties != NULL)) {
33672 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
33673 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
33674 							GC_DELREF(zobj->properties);
33675 						}
33676 						zobj->properties = zend_array_dup(zobj->properties);
33677 					}
33678 					property_val = zend_hash_find_known_hash(zobj->properties, name);
33679 					if (property_val) {
33680 						goto fast_assign_obj;
33681 					}
33682 				}
33683 
33684 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
33685 					if (EXPECTED(zobj->properties == NULL)) {
33686 						rebuild_object_properties(zobj);
33687 					}
33688 					if (IS_CV == IS_CONST) {
33689 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
33690 							Z_ADDREF_P(value);
33691 						}
33692 					} else if (IS_CV != IS_TMP_VAR) {
33693 						if (Z_ISREF_P(value)) {
33694 							if (IS_CV == IS_VAR) {
33695 								zend_reference *ref = Z_REF_P(value);
33696 								if (GC_DELREF(ref) == 0) {
33697 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
33698 									efree_size(ref, sizeof(zend_reference));
33699 									value = &tmp;
33700 								} else {
33701 									value = Z_REFVAL_P(value);
33702 									Z_TRY_ADDREF_P(value);
33703 								}
33704 							} else {
33705 								value = Z_REFVAL_P(value);
33706 								Z_TRY_ADDREF_P(value);
33707 							}
33708 						} else if (IS_CV == IS_CV) {
33709 							Z_TRY_ADDREF_P(value);
33710 						}
33711 						}
33712 					zend_hash_add_new(zobj->properties, name, value);
33713 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
33714 						ZVAL_COPY(EX_VAR(opline->result.var), value);
33715 					}
33716 					goto exit_assign_obj;
33717 				}
33718 			}
33719 		}
33720 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
33721 	} else {
33722 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
33723 		if (UNEXPECTED(!name)) {
33724 
33725 			UNDEF_RESULT();
33726 			goto exit_assign_obj;
33727 		}
33728 	}
33729 
33730 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
33731 		ZVAL_DEREF(value);
33732 	}
33733 
33734 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
33735 
33736 	if (IS_CONST != IS_CONST) {
33737 		zend_tmp_string_release(tmp_name);
33738 	}
33739 
33740 free_and_exit_assign_obj:
33741 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
33742 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
33743 	}
33744 
33745 exit_assign_obj:
33746 	if (garbage) {
33747 		GC_DTOR_NO_REF(garbage);
33748 	}
33749 
33750 
33751 	/* assign_obj has two opcodes! */
33752 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33753 }
33754 
33755 /* 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)33756 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33757 {
33758 	USE_OPLINE
33759 	zval *property, *container, *value_ptr;
33760 
33761 	SAVE_OPLINE();
33762 
33763 	container = &EX(This);
33764 	property = RT_CONSTANT(opline, opline->op2);
33765 
33766 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
33767 
33768 	if (1) {
33769 		if (IS_UNUSED == IS_UNUSED) {
33770 			if (IS_CONST == IS_CONST) {
33771 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33772 			} else {
33773 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33774 			}
33775 		} else {
33776 			if (IS_CONST == IS_CONST) {
33777 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33778 			} else {
33779 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33780 			}
33781 		}
33782 	} else {
33783 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33784 	}
33785 
33786 
33787 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
33788 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33789 }
33790 
33791 /* 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)33792 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33793 {
33794 	USE_OPLINE
33795 	zval *property, *container, *value_ptr;
33796 
33797 	SAVE_OPLINE();
33798 
33799 	container = &EX(This);
33800 	property = RT_CONSTANT(opline, opline->op2);
33801 
33802 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
33803 
33804 	if (1) {
33805 		if (IS_UNUSED == IS_UNUSED) {
33806 			if (IS_CONST == IS_CONST) {
33807 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33808 			} else {
33809 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33810 			}
33811 		} else {
33812 			if (IS_CONST == IS_CONST) {
33813 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33814 			} else {
33815 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33816 			}
33817 		}
33818 	} else {
33819 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
33820 	}
33821 
33822 
33823 
33824 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
33825 }
33826 
33827 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33828 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33829 {
33830 	USE_OPLINE
33831 	zend_string **rope;
33832 	zval *var;
33833 
33834 	/* Compiler allocates the necessary number of zval slots to keep the rope */
33835 	rope = (zend_string**)EX_VAR(opline->result.var);
33836 	if (IS_CONST == IS_CONST) {
33837 		var = RT_CONSTANT(opline, opline->op2);
33838 		rope[0] = Z_STR_P(var);
33839 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
33840 			Z_ADDREF_P(var);
33841 		}
33842 	} else {
33843 		var = RT_CONSTANT(opline, opline->op2);
33844 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
33845 			if (IS_CONST == IS_CV) {
33846 				rope[0] = zend_string_copy(Z_STR_P(var));
33847 			} else {
33848 				rope[0] = Z_STR_P(var);
33849 			}
33850 		} else {
33851 			SAVE_OPLINE();
33852 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
33853 				ZVAL_UNDEFINED_OP2();
33854 			}
33855 			rope[0] = zval_get_string_func(var);
33856 
33857 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33858 		}
33859 	}
33860 	ZEND_VM_NEXT_OPCODE();
33861 }
33862 
ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33863 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33864 {
33865 	zval *class_name;
33866 	USE_OPLINE
33867 
33868 	SAVE_OPLINE();
33869 	if (IS_CONST == IS_UNUSED) {
33870 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
33871 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33872 	} else if (IS_CONST == IS_CONST) {
33873 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
33874 
33875 		if (UNEXPECTED(ce == NULL)) {
33876 			class_name = RT_CONSTANT(opline, opline->op2);
33877 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
33878 			CACHE_PTR(opline->extended_value, ce);
33879 		}
33880 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
33881 	} else {
33882 		class_name = RT_CONSTANT(opline, opline->op2);
33883 try_class_name:
33884 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
33885 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
33886 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
33887 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
33888 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
33889 			class_name = Z_REFVAL_P(class_name);
33890 			goto try_class_name;
33891 		} else {
33892 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
33893 				ZVAL_UNDEFINED_OP2();
33894 				if (UNEXPECTED(EG(exception) != NULL)) {
33895 					HANDLE_EXCEPTION();
33896 				}
33897 			}
33898 			zend_throw_error(NULL, "Class name must be a valid object or a string");
33899 		}
33900 	}
33901 
33902 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
33903 }
33904 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)33905 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
33906 {
33907 	USE_OPLINE
33908 	zval *function_name;
33909 	zval *object;
33910 	zend_function *fbc;
33911 	zend_class_entry *called_scope;
33912 	zend_object *obj;
33913 	zend_execute_data *call;
33914 	uint32_t call_info;
33915 
33916 	SAVE_OPLINE();
33917 
33918 	object = &EX(This);
33919 
33920 	if (IS_CONST != IS_CONST) {
33921 		function_name = RT_CONSTANT(opline, opline->op2);
33922 	}
33923 
33924 	if (IS_CONST != IS_CONST &&
33925 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
33926 		do {
33927 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
33928 				function_name = Z_REFVAL_P(function_name);
33929 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
33930 					break;
33931 				}
33932 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
33933 				ZVAL_UNDEFINED_OP2();
33934 				if (UNEXPECTED(EG(exception) != NULL)) {
33935 
33936 					HANDLE_EXCEPTION();
33937 				}
33938 			}
33939 			zend_throw_error(NULL, "Method name must be a string");
33940 
33941 
33942 			HANDLE_EXCEPTION();
33943 		} while (0);
33944 	}
33945 
33946 	if (IS_UNUSED == IS_UNUSED) {
33947 		obj = Z_OBJ_P(object);
33948 	} else {
33949 		do {
33950 			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
33951 				obj = Z_OBJ_P(object);
33952 			} else {
33953 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
33954 					zend_reference *ref = Z_REF_P(object);
33955 
33956 					object = &ref->val;
33957 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
33958 						obj = Z_OBJ_P(object);
33959 						if (IS_UNUSED & IS_VAR) {
33960 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
33961 								efree_size(ref, sizeof(zend_reference));
33962 							} else {
33963 								Z_ADDREF_P(object);
33964 							}
33965 						}
33966 						break;
33967 					}
33968 				}
33969 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
33970 					object = ZVAL_UNDEFINED_OP1();
33971 					if (UNEXPECTED(EG(exception) != NULL)) {
33972 						if (IS_CONST != IS_CONST) {
33973 
33974 						}
33975 						HANDLE_EXCEPTION();
33976 					}
33977 				}
33978 				if (IS_CONST == IS_CONST) {
33979 					function_name = RT_CONSTANT(opline, opline->op2);
33980 				}
33981 				zend_invalid_method_call(object, function_name);
33982 
33983 
33984 				HANDLE_EXCEPTION();
33985 			}
33986 		} while (0);
33987 	}
33988 
33989 	called_scope = obj->ce;
33990 
33991 	if (IS_CONST == IS_CONST &&
33992 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
33993 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
33994 	} else {
33995 		zend_object *orig_obj = obj;
33996 
33997 		if (IS_CONST == IS_CONST) {
33998 			function_name = RT_CONSTANT(opline, opline->op2);
33999 		}
34000 
34001 		/* First, locate the function. */
34002 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
34003 		if (UNEXPECTED(fbc == NULL)) {
34004 			if (EXPECTED(!EG(exception))) {
34005 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
34006 			}
34007 
34008 			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
34009 				zend_objects_store_del(orig_obj);
34010 			}
34011 			HANDLE_EXCEPTION();
34012 		}
34013 		if (IS_CONST == IS_CONST &&
34014 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
34015 		    EXPECTED(obj == orig_obj)) {
34016 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
34017 		}
34018 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
34019 			GC_ADDREF(obj); /* For $this pointer */
34020 			if (GC_DELREF(orig_obj) == 0) {
34021 				zend_objects_store_del(orig_obj);
34022 			}
34023 		}
34024 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
34025 			init_func_run_time_cache(&fbc->op_array);
34026 		}
34027 	}
34028 
34029 	if (IS_CONST != IS_CONST) {
34030 
34031 	}
34032 
34033 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
34034 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
34035 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
34036 			zend_objects_store_del(obj);
34037 			if (UNEXPECTED(EG(exception))) {
34038 				HANDLE_EXCEPTION();
34039 			}
34040 		}
34041 		/* call static method */
34042 		obj = (zend_object*)called_scope;
34043 		call_info = ZEND_CALL_NESTED_FUNCTION;
34044 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
34045 		if (IS_UNUSED == IS_CV) {
34046 			GC_ADDREF(obj); /* For $this pointer */
34047 		}
34048 		/* CV may be changed indirectly (e.g. when it's a reference) */
34049 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
34050 	}
34051 
34052 	call = zend_vm_stack_push_call_frame(call_info,
34053 		fbc, opline->extended_value, obj);
34054 	call->prev_execute_data = EX(call);
34055 	EX(call) = call;
34056 
34057 	ZEND_VM_NEXT_OPCODE();
34058 }
34059 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34060 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34061 {
34062 	USE_OPLINE
34063 	zval *function_name;
34064 	zend_class_entry *ce;
34065 	uint32_t call_info;
34066 	zend_function *fbc;
34067 	zend_execute_data *call;
34068 
34069 	SAVE_OPLINE();
34070 
34071 	if (IS_UNUSED == IS_CONST) {
34072 		/* no function found. try a static method in class */
34073 		ce = CACHED_PTR(opline->result.num);
34074 		if (UNEXPECTED(ce == NULL)) {
34075 			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);
34076 			if (UNEXPECTED(ce == NULL)) {
34077 
34078 				HANDLE_EXCEPTION();
34079 			}
34080 			if (IS_CONST != IS_CONST) {
34081 				CACHE_PTR(opline->result.num, ce);
34082 			}
34083 		}
34084 	} else if (IS_UNUSED == IS_UNUSED) {
34085 		ce = zend_fetch_class(NULL, opline->op1.num);
34086 		if (UNEXPECTED(ce == NULL)) {
34087 
34088 			HANDLE_EXCEPTION();
34089 		}
34090 	} else {
34091 		ce = Z_CE_P(EX_VAR(opline->op1.var));
34092 	}
34093 
34094 	if (IS_UNUSED == IS_CONST &&
34095 	    IS_CONST == IS_CONST &&
34096 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
34097 		/* nothing to do */
34098 	} else if (IS_UNUSED != IS_CONST &&
34099 	           IS_CONST == IS_CONST &&
34100 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
34101 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
34102 	} else if (IS_CONST != IS_UNUSED) {
34103 		function_name = RT_CONSTANT(opline, opline->op2);
34104 		if (IS_CONST != IS_CONST) {
34105 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
34106 				do {
34107 					if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
34108 						function_name = Z_REFVAL_P(function_name);
34109 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
34110 							break;
34111 						}
34112 					} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
34113 						ZVAL_UNDEFINED_OP2();
34114 						if (UNEXPECTED(EG(exception) != NULL)) {
34115 							HANDLE_EXCEPTION();
34116 						}
34117 					}
34118 					zend_throw_error(NULL, "Method name must be a string");
34119 
34120 					HANDLE_EXCEPTION();
34121 				} while (0);
34122 			}
34123 		}
34124 
34125 		if (ce->get_static_method) {
34126 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
34127 		} else {
34128 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
34129 		}
34130 		if (UNEXPECTED(fbc == NULL)) {
34131 			if (EXPECTED(!EG(exception))) {
34132 				zend_undefined_method(ce, Z_STR_P(function_name));
34133 			}
34134 
34135 			HANDLE_EXCEPTION();
34136 		}
34137 		if (IS_CONST == IS_CONST &&
34138 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
34139 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
34140 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
34141 		}
34142 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
34143 			init_func_run_time_cache(&fbc->op_array);
34144 		}
34145 		if (IS_CONST != IS_CONST) {
34146 
34147 		}
34148 	} else {
34149 		if (UNEXPECTED(ce->constructor == NULL)) {
34150 			zend_throw_error(NULL, "Cannot call constructor");
34151 			HANDLE_EXCEPTION();
34152 		}
34153 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
34154 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
34155 			HANDLE_EXCEPTION();
34156 		}
34157 		fbc = ce->constructor;
34158 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
34159 			init_func_run_time_cache(&fbc->op_array);
34160 		}
34161 	}
34162 
34163 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
34164 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
34165 			ce = (zend_class_entry*)Z_OBJ(EX(This));
34166 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
34167 		} else {
34168 			zend_non_static_method_call(fbc);
34169 			HANDLE_EXCEPTION();
34170 		}
34171 	} else {
34172 		/* previous opcode is ZEND_FETCH_CLASS */
34173 		if (IS_UNUSED == IS_UNUSED
34174 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
34175 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
34176 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
34177 				ce = Z_OBJCE(EX(This));
34178 			} else {
34179 				ce = Z_CE(EX(This));
34180 			}
34181 		}
34182 		call_info = ZEND_CALL_NESTED_FUNCTION;
34183 	}
34184 
34185 	call = zend_vm_stack_push_call_frame(call_info,
34186 		fbc, opline->extended_value, ce);
34187 	call->prev_execute_data = EX(call);
34188 	EX(call) = call;
34189 
34190 	ZEND_VM_NEXT_OPCODE();
34191 }
34192 
ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34193 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34194 {
34195 	USE_OPLINE
34196 	uint32_t arg_num;
34197 
34198 	if (IS_CONST == IS_CONST) {
34199 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
34200 		arg_num = zend_get_arg_offset_by_name(
34201 			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
34202 		if (UNEXPECTED(arg_num == 0)) {
34203 			/* Treat this as a by-value argument, and throw an error during SEND. */
34204 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
34205 			ZEND_VM_NEXT_OPCODE();
34206 		}
34207 	} else {
34208 		arg_num = opline->op2.num;
34209 	}
34210 
34211 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
34212 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
34213 			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
34214 		} else {
34215 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
34216 		}
34217 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
34218 		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
34219 	} else {
34220 		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
34221 	}
34222 	ZEND_VM_NEXT_OPCODE();
34223 }
34224 
ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34225 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34226 {
34227 	USE_OPLINE
34228 	zend_constant *c;
34229 
34230 	c = CACHED_PTR(opline->extended_value);
34231 	if (EXPECTED(c != NULL) && EXPECTED(!IS_SPECIAL_CACHE_VAL(c))) {
34232 		ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value);
34233 		ZEND_VM_NEXT_OPCODE();
34234 	}
34235 
34236 	SAVE_OPLINE();
34237 	zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num OPLINE_CC EXECUTE_DATA_CC);
34238 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34239 }
34240 
ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34241 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34242 {
34243 	zend_class_entry *ce, *scope;
34244 	zend_class_constant *c;
34245 	zval *value, *zv, *constant_zv;
34246 	zend_string *constant_name;
34247 	USE_OPLINE
34248 
34249 	SAVE_OPLINE();
34250 
34251 	do {
34252 		if (IS_UNUSED == IS_CONST && IS_CONST == IS_CONST) {
34253 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
34254 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
34255 				break;
34256 			}
34257 		}
34258 		if (IS_UNUSED == IS_CONST) {
34259 			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
34260 				ce = CACHED_PTR(opline->extended_value);
34261 			} else {
34262 				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);
34263 				if (UNEXPECTED(ce == NULL)) {
34264 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34265 
34266 					HANDLE_EXCEPTION();
34267 				}
34268 				CACHE_PTR(opline->extended_value, ce);
34269 			}
34270 		} else if (IS_UNUSED == IS_UNUSED) {
34271 			ce = zend_fetch_class(NULL, opline->op1.num);
34272 			if (UNEXPECTED(ce == NULL)) {
34273 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34274 
34275 				HANDLE_EXCEPTION();
34276 			}
34277 		} else {
34278 			ce = Z_CE_P(EX_VAR(opline->op1.var));
34279 		}
34280 		if (IS_UNUSED != IS_CONST
34281 			&& IS_CONST == IS_CONST
34282 			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
34283 			value = CACHED_PTR(opline->extended_value + sizeof(void*));
34284 			break;
34285 		}
34286 
34287 		constant_zv = RT_CONSTANT(opline, opline->op2);
34288 		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
34289 			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
34290 			ZVAL_UNDEF(EX_VAR(opline->result.var));
34291 
34292 			HANDLE_EXCEPTION();
34293 		}
34294 		constant_name = Z_STR_P(constant_zv);
34295 		/* Magic 'class' for constant OP2 is caught at compile-time */
34296 		if (IS_CONST != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
34297 			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
34298 
34299 			ZEND_VM_NEXT_OPCODE();
34300 		}
34301 		zv = IS_CONST == IS_CONST
34302 			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
34303 			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);
34304 
34305 		if (EXPECTED(zv != NULL)) {
34306 			c = Z_PTR_P(zv);
34307 			scope = EX(func)->op_array.scope;
34308 			if (!zend_verify_const_access(c, scope)) {
34309 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34310 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34311 
34312 				HANDLE_EXCEPTION();
34313 			}
34314 
34315 			if (ce->ce_flags & ZEND_ACC_TRAIT) {
34316 				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34317 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34318 
34319 				HANDLE_EXCEPTION();
34320 			}
34321 
34322 			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
34323 			if (UNEXPECTED(is_constant_deprecated)) {
34324 				zend_error(E_DEPRECATED, "Constant %s::%s is deprecated", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34325 
34326 				if (EG(exception)) {
34327 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34328 
34329 					HANDLE_EXCEPTION();
34330 				}
34331 			}
34332 
34333 			value = &c->value;
34334 			// Enums require loading of all class constants to build the backed enum table
34335 			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
34336 				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
34337 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34338 
34339 					HANDLE_EXCEPTION();
34340 				}
34341 			}
34342 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
34343 				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
34344 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34345 
34346 					HANDLE_EXCEPTION();
34347 				}
34348 			}
34349 			if (IS_CONST == IS_CONST && !is_constant_deprecated) {
34350 				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
34351 			}
34352 		} else {
34353 			zend_throw_error(NULL, "Undefined constant %s::%s",
34354 				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34355 			ZVAL_UNDEF(EX_VAR(opline->result.var));
34356 
34357 			HANDLE_EXCEPTION();
34358 		}
34359 	} while (0);
34360 
34361 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
34362 
34363 	ZEND_VM_NEXT_OPCODE();
34364 }
34365 
ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34366 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34367 {
34368 	zval *array;
34369 	uint32_t size;
34370 	USE_OPLINE
34371 
34372 	array = EX_VAR(opline->result.var);
34373 	if (IS_UNUSED != IS_UNUSED) {
34374 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
34375 		ZVAL_ARR(array, zend_new_array(size));
34376 		/* Explicitly initialize array as not-packed if flag is set */
34377 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
34378 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
34379 		}
34380 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34381 	} else {
34382 		ZVAL_ARR(array, zend_new_array(0));
34383 		ZEND_VM_NEXT_OPCODE();
34384 	}
34385 }
34386 
ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34387 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34388 {
34389 	USE_OPLINE
34390 	zval *container;
34391 	zval *offset;
34392 	zend_string *name, *tmp_name;
34393 
34394 	SAVE_OPLINE();
34395 	container = &EX(This);
34396 	offset = RT_CONSTANT(opline, opline->op2);
34397 
34398 	do {
34399 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
34400 			if (Z_ISREF_P(container)) {
34401 				container = Z_REFVAL_P(container);
34402 				if (Z_TYPE_P(container) != IS_OBJECT) {
34403 					if (IS_UNUSED == IS_CV
34404 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
34405 						ZVAL_UNDEFINED_OP1();
34406 					}
34407 					break;
34408 				}
34409 			} else {
34410 				break;
34411 			}
34412 		}
34413 		if (IS_CONST == IS_CONST) {
34414 			name = Z_STR_P(offset);
34415 		} else {
34416 			name = zval_try_get_tmp_string(offset, &tmp_name);
34417 			if (UNEXPECTED(!name)) {
34418 				break;
34419 			}
34420 		}
34421 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
34422 		if (IS_CONST != IS_CONST) {
34423 			zend_tmp_string_release(tmp_name);
34424 		}
34425 	} while (0);
34426 
34427 
34428 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34429 }
34430 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34431 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34432 {
34433 	USE_OPLINE
34434 	zval *container;
34435 	int result;
34436 	zval *offset;
34437 	zend_string *name, *tmp_name;
34438 
34439 	SAVE_OPLINE();
34440 	container = &EX(This);
34441 	offset = RT_CONSTANT(opline, opline->op2);
34442 
34443 	if (IS_UNUSED == IS_CONST ||
34444 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
34445 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
34446 			container = Z_REFVAL_P(container);
34447 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
34448 				result = (opline->extended_value & ZEND_ISEMPTY);
34449 				goto isset_object_finish;
34450 			}
34451 		} else {
34452 			result = (opline->extended_value & ZEND_ISEMPTY);
34453 			goto isset_object_finish;
34454 		}
34455 	}
34456 
34457 	if (IS_CONST == IS_CONST) {
34458 		name = Z_STR_P(offset);
34459 	} else {
34460 		name = zval_try_get_tmp_string(offset, &tmp_name);
34461 		if (UNEXPECTED(!name)) {
34462 			result = 0;
34463 			goto isset_object_finish;
34464 		}
34465 	}
34466 
34467 	result =
34468 		(opline->extended_value & ZEND_ISEMPTY) ^
34469 		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));
34470 
34471 	if (IS_CONST != IS_CONST) {
34472 		zend_tmp_string_release(tmp_name);
34473 	}
34474 
34475 isset_object_finish:
34476 
34477 
34478 	ZEND_VM_SMART_BRANCH(result, 1);
34479 }
34480 
ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34481 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34482 {
34483 	USE_OPLINE
34484 
34485 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
34486 
34487 	SAVE_OPLINE();
34488 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
34489 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
34490 	}
34491 
34492 	/* Destroy the previously yielded value */
34493 	zval_ptr_dtor(&generator->value);
34494 
34495 	/* Destroy the previously yielded key */
34496 	zval_ptr_dtor(&generator->key);
34497 
34498 	/* Set the new yielded value */
34499 	if (IS_UNUSED != IS_UNUSED) {
34500 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
34501 			/* Constants and temporary variables aren't yieldable by reference,
34502 			 * but we still allow them with a notice. */
34503 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
34504 				zval *value;
34505 
34506 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
34507 
34508 				value = NULL;
34509 				ZVAL_COPY_VALUE(&generator->value, value);
34510 				if (IS_UNUSED == IS_CONST) {
34511 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
34512 						Z_ADDREF(generator->value);
34513 					}
34514 				}
34515 			} else {
34516 				zval *value_ptr = NULL;
34517 
34518 				/* If a function call result is yielded and the function did
34519 				 * not return by reference we throw a notice. */
34520 				do {
34521 					if (IS_UNUSED == IS_VAR) {
34522 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
34523 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
34524 						 && !Z_ISREF_P(value_ptr)) {
34525 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
34526 							ZVAL_COPY(&generator->value, value_ptr);
34527 							break;
34528 						}
34529 					}
34530 					if (Z_ISREF_P(value_ptr)) {
34531 						Z_ADDREF_P(value_ptr);
34532 					} else {
34533 						ZVAL_MAKE_REF_EX(value_ptr, 2);
34534 					}
34535 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
34536 				} while (0);
34537 
34538 			}
34539 		} else {
34540 			zval *value = NULL;
34541 
34542 			/* Consts, temporary variables and references need copying */
34543 			if (IS_UNUSED == IS_CONST) {
34544 				ZVAL_COPY_VALUE(&generator->value, value);
34545 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
34546 					Z_ADDREF(generator->value);
34547 				}
34548 			} else if (IS_UNUSED == IS_TMP_VAR) {
34549 				ZVAL_COPY_VALUE(&generator->value, value);
34550 			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
34551 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
34552 
34553 			} else {
34554 				ZVAL_COPY_VALUE(&generator->value, value);
34555 				if (IS_UNUSED == IS_CV) {
34556 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
34557 				}
34558 			}
34559 		}
34560 	} else {
34561 		/* If no value was specified yield null */
34562 		ZVAL_NULL(&generator->value);
34563 	}
34564 
34565 	/* Set the new yielded key */
34566 	if (IS_CONST != IS_UNUSED) {
34567 		zval *key = RT_CONSTANT(opline, opline->op2);
34568 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
34569 			key = Z_REFVAL_P(key);
34570 		}
34571 		ZVAL_COPY(&generator->key, key);
34572 
34573 		if (Z_TYPE(generator->key) == IS_LONG
34574 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
34575 		) {
34576 			generator->largest_used_integer_key = Z_LVAL(generator->key);
34577 		}
34578 	} else {
34579 		/* If no key was specified we use auto-increment keys */
34580 		generator->largest_used_integer_key++;
34581 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
34582 	}
34583 
34584 	if (RETURN_VALUE_USED(opline)) {
34585 		/* If the return value of yield is used set the send
34586 		 * target and initialize it to NULL */
34587 		generator->send_target = EX_VAR(opline->result.var);
34588 		ZVAL_NULL(generator->send_target);
34589 	} else {
34590 		generator->send_target = NULL;
34591 	}
34592 
34593 	/* We increment to the next op, so we are at the correct position when the
34594 	 * generator is resumed. */
34595 	ZEND_VM_INC_OPCODE();
34596 
34597 	/* The GOTO VM uses a local opline variable. We need to set the opline
34598 	 * variable in execute_data so we don't resume at an old position. */
34599 	SAVE_OPLINE();
34600 
34601 	ZEND_VM_RETURN();
34602 }
34603 
ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34604 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34605 {
34606 	zend_class_entry *ce, *scope;
34607 	zend_class_constant *c;
34608 	zval *value, *zv, *constant_zv;
34609 	zend_string *constant_name;
34610 	USE_OPLINE
34611 
34612 	SAVE_OPLINE();
34613 
34614 	do {
34615 		if (IS_UNUSED == IS_CONST && (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) {
34616 			if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) {
34617 				value = CACHED_PTR(opline->extended_value + sizeof(void*));
34618 				break;
34619 			}
34620 		}
34621 		if (IS_UNUSED == IS_CONST) {
34622 			if (EXPECTED(CACHED_PTR(opline->extended_value))) {
34623 				ce = CACHED_PTR(opline->extended_value);
34624 			} else {
34625 				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);
34626 				if (UNEXPECTED(ce == NULL)) {
34627 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34628 					FREE_OP(opline->op2_type, opline->op2.var);
34629 					HANDLE_EXCEPTION();
34630 				}
34631 				CACHE_PTR(opline->extended_value, ce);
34632 			}
34633 		} else if (IS_UNUSED == IS_UNUSED) {
34634 			ce = zend_fetch_class(NULL, opline->op1.num);
34635 			if (UNEXPECTED(ce == NULL)) {
34636 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34637 				FREE_OP(opline->op2_type, opline->op2.var);
34638 				HANDLE_EXCEPTION();
34639 			}
34640 		} else {
34641 			ce = Z_CE_P(EX_VAR(opline->op1.var));
34642 		}
34643 		if (IS_UNUSED != IS_CONST
34644 			&& (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
34645 			&& EXPECTED(CACHED_PTR(opline->extended_value) == ce)) {
34646 			value = CACHED_PTR(opline->extended_value + sizeof(void*));
34647 			break;
34648 		}
34649 
34650 		constant_zv = _get_zval_ptr_tmpvarcv(opline->op2_type, opline->op2, BP_VAR_R EXECUTE_DATA_CC);
34651 		if (UNEXPECTED(Z_TYPE_P(constant_zv) != IS_STRING)) {
34652 			zend_invalid_class_constant_type_error(Z_TYPE_P(constant_zv));
34653 			ZVAL_UNDEF(EX_VAR(opline->result.var));
34654 			FREE_OP(opline->op2_type, opline->op2.var);
34655 			HANDLE_EXCEPTION();
34656 		}
34657 		constant_name = Z_STR_P(constant_zv);
34658 		/* Magic 'class' for constant OP2 is caught at compile-time */
34659 		if ((IS_TMP_VAR|IS_VAR|IS_CV) != IS_CONST && UNEXPECTED(zend_string_equals_literal_ci(constant_name, "class"))) {
34660 			ZVAL_STR_COPY(EX_VAR(opline->result.var), ce->name);
34661 			FREE_OP(opline->op2_type, opline->op2.var);
34662 			ZEND_VM_NEXT_OPCODE();
34663 		}
34664 		zv = (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST
34665 			? zend_hash_find_known_hash(CE_CONSTANTS_TABLE(ce), constant_name)
34666 			: zend_hash_find(CE_CONSTANTS_TABLE(ce), constant_name);
34667 
34668 		if (EXPECTED(zv != NULL)) {
34669 			c = Z_PTR_P(zv);
34670 			scope = EX(func)->op_array.scope;
34671 			if (!zend_verify_const_access(c, scope)) {
34672 				zend_throw_error(NULL, "Cannot access %s constant %s::%s", zend_visibility_string(ZEND_CLASS_CONST_FLAGS(c)), ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34673 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34674 				FREE_OP(opline->op2_type, opline->op2.var);
34675 				HANDLE_EXCEPTION();
34676 			}
34677 
34678 			if (ce->ce_flags & ZEND_ACC_TRAIT) {
34679 				zend_throw_error(NULL, "Cannot access trait constant %s::%s directly", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34680 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34681 				FREE_OP(opline->op2_type, opline->op2.var);
34682 				HANDLE_EXCEPTION();
34683 			}
34684 
34685 			bool is_constant_deprecated = ZEND_CLASS_CONST_FLAGS(c) & ZEND_ACC_DEPRECATED;
34686 			if (UNEXPECTED(is_constant_deprecated)) {
34687 				zend_error(E_DEPRECATED, "Constant %s::%s is deprecated", ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34688 
34689 				if (EG(exception)) {
34690 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34691 					FREE_OP(opline->op2_type, opline->op2.var);
34692 					HANDLE_EXCEPTION();
34693 				}
34694 			}
34695 
34696 			value = &c->value;
34697 			// Enums require loading of all class constants to build the backed enum table
34698 			if (ce->ce_flags & ZEND_ACC_ENUM && ce->enum_backing_type != IS_UNDEF && ce->type == ZEND_USER_CLASS && !(ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
34699 				if (UNEXPECTED(zend_update_class_constants(ce) == FAILURE)) {
34700 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34701 					FREE_OP(opline->op2_type, opline->op2.var);
34702 					HANDLE_EXCEPTION();
34703 				}
34704 			}
34705 			if (Z_TYPE_P(value) == IS_CONSTANT_AST) {
34706 				if (UNEXPECTED(zend_update_class_constant(c, constant_name, c->ce) != SUCCESS)) {
34707 					ZVAL_UNDEF(EX_VAR(opline->result.var));
34708 					FREE_OP(opline->op2_type, opline->op2.var);
34709 					HANDLE_EXCEPTION();
34710 				}
34711 			}
34712 			if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && !is_constant_deprecated) {
34713 				CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value);
34714 			}
34715 		} else {
34716 			zend_throw_error(NULL, "Undefined constant %s::%s",
34717 				ZSTR_VAL(ce->name), ZSTR_VAL(constant_name));
34718 			ZVAL_UNDEF(EX_VAR(opline->result.var));
34719 			FREE_OP(opline->op2_type, opline->op2.var);
34720 			HANDLE_EXCEPTION();
34721 		}
34722 	} while (0);
34723 
34724 	ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value);
34725 
34726 	FREE_OP(opline->op2_type, opline->op2.var);
34727 	ZEND_VM_NEXT_OPCODE();
34728 }
34729 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34730 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34731 {
34732 	USE_OPLINE
34733 	zval *object;
34734 	zval *property;
34735 	zval *value;
34736 	zval *zptr;
34737 	void **cache_slot;
34738 	zend_property_info *prop_info;
34739 	zend_object *zobj;
34740 	zend_string *name, *tmp_name;
34741 
34742 	SAVE_OPLINE();
34743 	object = &EX(This);
34744 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34745 
34746 	do {
34747 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
34748 
34749 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
34750 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
34751 				object = Z_REFVAL_P(object);
34752 				goto assign_op_object;
34753 			}
34754 			if (IS_UNUSED == IS_CV
34755 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
34756 				ZVAL_UNDEFINED_OP1();
34757 			}
34758 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
34759 			break;
34760 		}
34761 
34762 assign_op_object:
34763 		/* here we are sure we are dealing with an object */
34764 		zobj = Z_OBJ_P(object);
34765 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34766 			name = Z_STR_P(property);
34767 		} else {
34768 			name = zval_try_get_tmp_string(property, &tmp_name);
34769 			if (UNEXPECTED(!name)) {
34770 				UNDEF_RESULT();
34771 				break;
34772 			}
34773 		}
34774 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
34775 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
34776 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
34777 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34778 					ZVAL_NULL(EX_VAR(opline->result.var));
34779 				}
34780 			} else {
34781 				zval *orig_zptr = zptr;
34782 				zend_reference *ref;
34783 
34784 				do {
34785 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
34786 						ref = Z_REF_P(zptr);
34787 						zptr = Z_REFVAL_P(zptr);
34788 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
34789 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
34790 							break;
34791 						}
34792 					}
34793 
34794 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34795 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
34796 					} else {
34797 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
34798 					}
34799 					if (UNEXPECTED(prop_info)) {
34800 						/* special case for typed properties */
34801 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
34802 					} else {
34803 						zend_binary_op(zptr, zptr, value OPLINE_CC);
34804 					}
34805 				} while (0);
34806 
34807 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34808 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
34809 				}
34810 			}
34811 		} else {
34812 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
34813 		}
34814 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34815 			zend_tmp_string_release(tmp_name);
34816 		}
34817 	} while (0);
34818 
34819 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
34820 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34821 
34822 	/* assign_obj has two opcodes! */
34823 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
34824 }
34825 
34826 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34827 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34828 {
34829 	USE_OPLINE
34830 	zval *object;
34831 	zval *property;
34832 	zval *zptr;
34833 	void **cache_slot;
34834 	zend_property_info *prop_info;
34835 	zend_object *zobj;
34836 	zend_string *name, *tmp_name;
34837 
34838 	SAVE_OPLINE();
34839 	object = &EX(This);
34840 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34841 
34842 	do {
34843 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
34844 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
34845 				object = Z_REFVAL_P(object);
34846 				goto pre_incdec_object;
34847 			}
34848 			if (IS_UNUSED == IS_CV
34849 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
34850 				ZVAL_UNDEFINED_OP1();
34851 			}
34852 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
34853 			break;
34854 		}
34855 
34856 pre_incdec_object:
34857 		/* here we are sure we are dealing with an object */
34858 		zobj = Z_OBJ_P(object);
34859 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34860 			name = Z_STR_P(property);
34861 		} else {
34862 			name = zval_try_get_tmp_string(property, &tmp_name);
34863 			if (UNEXPECTED(!name)) {
34864 				UNDEF_RESULT();
34865 				break;
34866 			}
34867 		}
34868 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
34869 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
34870 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
34871 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
34872 					ZVAL_NULL(EX_VAR(opline->result.var));
34873 				}
34874 			} else {
34875 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34876 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
34877 				} else {
34878 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
34879 				}
34880 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
34881 			}
34882 		} else {
34883 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
34884 		}
34885 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34886 			zend_tmp_string_release(tmp_name);
34887 		}
34888 	} while (0);
34889 
34890 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34891 
34892 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34893 }
34894 
ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34895 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34896 {
34897 	USE_OPLINE
34898 	zval *object;
34899 	zval *property;
34900 	zval *zptr;
34901 	void **cache_slot;
34902 	zend_property_info *prop_info;
34903 	zend_object *zobj;
34904 	zend_string *name, *tmp_name;
34905 
34906 	SAVE_OPLINE();
34907 	object = &EX(This);
34908 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
34909 
34910 	do {
34911 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
34912 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
34913 				object = Z_REFVAL_P(object);
34914 				goto post_incdec_object;
34915 			}
34916 			if (IS_UNUSED == IS_CV
34917 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
34918 				ZVAL_UNDEFINED_OP1();
34919 			}
34920 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
34921 			break;
34922 		}
34923 
34924 post_incdec_object:
34925 		/* here we are sure we are dealing with an object */
34926 		zobj = Z_OBJ_P(object);
34927 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34928 			name = Z_STR_P(property);
34929 		} else {
34930 			name = zval_try_get_tmp_string(property, &tmp_name);
34931 			if (UNEXPECTED(!name)) {
34932 				ZVAL_UNDEF(EX_VAR(opline->result.var));
34933 				break;
34934 			}
34935 		}
34936 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
34937 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
34938 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
34939 				ZVAL_NULL(EX_VAR(opline->result.var));
34940 			} else {
34941 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34942 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
34943 				} else {
34944 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
34945 				}
34946 
34947 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
34948 			}
34949 		} else {
34950 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
34951 		}
34952 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
34953 			zend_tmp_string_release(tmp_name);
34954 		}
34955 	} while (0);
34956 
34957 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
34958 
34959 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
34960 }
34961 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)34962 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
34963 {
34964 	USE_OPLINE
34965 	zval *container;
34966 	void **cache_slot = NULL;
34967 
34968 	SAVE_OPLINE();
34969 	container = &EX(This);
34970 
34971 	if (IS_UNUSED == IS_CONST ||
34972 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
34973 		do {
34974 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
34975 				container = Z_REFVAL_P(container);
34976 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
34977 					break;
34978 				}
34979 			}
34980 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
34981 				ZVAL_UNDEFINED_OP1();
34982 			}
34983 			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
34984 			ZVAL_NULL(EX_VAR(opline->result.var));
34985 			goto fetch_obj_r_finish;
34986 		} while (0);
34987 	}
34988 
34989 	/* here we are sure we are dealing with an object */
34990 	do {
34991 		zend_object *zobj = Z_OBJ_P(container);
34992 		zend_string *name, *tmp_name;
34993 		zval *retval;
34994 
34995 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
34996 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
34997 
34998 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
34999 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35000 
35001 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35002 					retval = OBJ_PROP(zobj, prop_offset);
35003 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
35004 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35005 							goto fetch_obj_r_copy;
35006 						} else {
35007 fetch_obj_r_fast_copy:
35008 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
35009 							ZEND_VM_NEXT_OPCODE();
35010 						}
35011 					}
35012 				} else if (EXPECTED(zobj->properties != NULL)) {
35013 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35014 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
35015 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
35016 
35017 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
35018 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
35019 
35020 							if (EXPECTED(p->key == name) ||
35021 							    (EXPECTED(p->h == ZSTR_H(name)) &&
35022 							     EXPECTED(p->key != NULL) &&
35023 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
35024 								retval = &p->val;
35025 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35026 									goto fetch_obj_r_copy;
35027 								} else {
35028 									goto fetch_obj_r_fast_copy;
35029 								}
35030 							}
35031 						}
35032 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
35033 					}
35034 					retval = zend_hash_find_known_hash(zobj->properties, name);
35035 					if (EXPECTED(retval)) {
35036 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
35037 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
35038 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35039 							goto fetch_obj_r_copy;
35040 						} else {
35041 							goto fetch_obj_r_fast_copy;
35042 						}
35043 					}
35044 				}
35045 			}
35046 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35047 		} else {
35048 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
35049 			if (UNEXPECTED(!name)) {
35050 				ZVAL_UNDEF(EX_VAR(opline->result.var));
35051 				break;
35052 			}
35053 		}
35054 
35055 #if ZEND_DEBUG
35056 		/* For non-standard object handlers, verify a declared property type in debug builds.
35057 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
35058 		zend_property_info *prop_info = NULL;
35059 		if (zobj->handlers->read_property != zend_std_read_property) {
35060 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
35061 		}
35062 #endif
35063 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
35064 #if ZEND_DEBUG
35065 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
35066 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
35067 			ZVAL_OPT_DEREF(retval);
35068 			zend_verify_property_type(prop_info, retval, /* strict */ true);
35069 		}
35070 #endif
35071 
35072 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35073 			zend_tmp_string_release(tmp_name);
35074 		}
35075 
35076 		if (retval != EX_VAR(opline->result.var)) {
35077 fetch_obj_r_copy:
35078 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
35079 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
35080 			zend_unwrap_reference(retval);
35081 		}
35082 	} while (0);
35083 
35084 fetch_obj_r_finish:
35085 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35086 
35087 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35088 }
35089 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35090 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35091 {
35092 	USE_OPLINE
35093 	zval *property, *container, *result;
35094 
35095 	SAVE_OPLINE();
35096 
35097 	container = &EX(This);
35098 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35099 	result = EX_VAR(opline->result.var);
35100 	zend_fetch_property_address(
35101 		result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR),
35102 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
35103 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
35104 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35105 	if (IS_UNUSED == IS_VAR) {
35106 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
35107 	}
35108 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35109 }
35110 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35111 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35112 {
35113 	USE_OPLINE
35114 	zval *property, *container, *result;
35115 
35116 	SAVE_OPLINE();
35117 	container = &EX(This);
35118 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35119 	result = EX_VAR(opline->result.var);
35120 	zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
35121 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35122 	if (IS_UNUSED == IS_VAR) {
35123 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
35124 	}
35125 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35126 }
35127 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35128 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35129 {
35130 	USE_OPLINE
35131 	zval *container;
35132 	void **cache_slot = NULL;
35133 
35134 	SAVE_OPLINE();
35135 	container = &EX(This);
35136 
35137 	if (IS_UNUSED == IS_CONST ||
35138 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
35139 		do {
35140 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
35141 				container = Z_REFVAL_P(container);
35142 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
35143 					break;
35144 				}
35145 			}
35146 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
35147 				ZVAL_UNDEFINED_OP2();
35148 			}
35149 			ZVAL_NULL(EX_VAR(opline->result.var));
35150 			goto fetch_obj_is_finish;
35151 		} while (0);
35152 	}
35153 
35154 	/* here we are sure we are dealing with an object */
35155 	do {
35156 		zend_object *zobj = Z_OBJ_P(container);
35157 		zend_string *name, *tmp_name;
35158 		zval *retval;
35159 
35160 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35161 			cache_slot = CACHE_ADDR(opline->extended_value);
35162 
35163 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
35164 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35165 
35166 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35167 					retval = OBJ_PROP(zobj, prop_offset);
35168 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
35169 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35170 							goto fetch_obj_is_copy;
35171 						} else {
35172 fetch_obj_is_fast_copy:
35173 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
35174 							ZEND_VM_NEXT_OPCODE();
35175 						}
35176 					}
35177 				} else if (EXPECTED(zobj->properties != NULL)) {
35178 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35179 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
35180 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
35181 
35182 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
35183 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
35184 
35185 							if (EXPECTED(p->key == name) ||
35186 							    (EXPECTED(p->h == ZSTR_H(name)) &&
35187 							     EXPECTED(p->key != NULL) &&
35188 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
35189 								retval = &p->val;
35190 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35191 									goto fetch_obj_is_copy;
35192 								} else {
35193 									goto fetch_obj_is_fast_copy;
35194 								}
35195 							}
35196 						}
35197 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
35198 					}
35199 					retval = zend_hash_find_known_hash(zobj->properties, name);
35200 					if (EXPECTED(retval)) {
35201 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
35202 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
35203 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
35204 							goto fetch_obj_is_copy;
35205 						} else {
35206 							goto fetch_obj_is_fast_copy;
35207 						}
35208 					}
35209 				}
35210 			}
35211 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35212 		} else {
35213 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
35214 			if (UNEXPECTED(!name)) {
35215 				ZVAL_UNDEF(EX_VAR(opline->result.var));
35216 				break;
35217 			}
35218 		}
35219 
35220 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
35221 
35222 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35223 			zend_tmp_string_release(tmp_name);
35224 		}
35225 
35226 		if (retval != EX_VAR(opline->result.var)) {
35227 fetch_obj_is_copy:
35228 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
35229 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
35230 			zend_unwrap_reference(retval);
35231 		}
35232 	} while (0);
35233 
35234 fetch_obj_is_finish:
35235 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35236 
35237 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35238 }
35239 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35240 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35241 {
35242 #if 0
35243 	USE_OPLINE
35244 #endif
35245 
35246 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
35247 		/* Behave like FETCH_OBJ_W */
35248 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
35249 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35250 		}
35251 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35252 	} else {
35253 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
35254 	}
35255 }
35256 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35257 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35258 {
35259 	USE_OPLINE
35260 	zval *container, *property, *result;
35261 
35262 	SAVE_OPLINE();
35263 	container = &EX(This);
35264 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35265 	result = EX_VAR(opline->result.var);
35266 	zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0 OPLINE_CC EXECUTE_DATA_CC);
35267 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35268 	if (IS_UNUSED == IS_VAR) {
35269 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
35270 	}
35271 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35272 }
35273 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35274 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35275 {
35276 	USE_OPLINE
35277 	zval *object, *value, tmp;
35278 	zend_object *zobj;
35279 	zend_string *name, *tmp_name;
35280 	zend_refcounted *garbage = NULL;
35281 
35282 	SAVE_OPLINE();
35283 	object = &EX(This);
35284 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
35285 
35286 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35287 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35288 			object = Z_REFVAL_P(object);
35289 			goto assign_object;
35290 		}
35291 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
35292 		value = &EG(uninitialized_zval);
35293 		goto free_and_exit_assign_obj;
35294 	}
35295 
35296 assign_object:
35297 	zobj = Z_OBJ_P(object);
35298 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35299 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
35300 			void **cache_slot = CACHE_ADDR(opline->extended_value);
35301 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35302 			zval *property_val;
35303 
35304 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35305 				property_val = OBJ_PROP(zobj, prop_offset);
35306 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
35307 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
35308 
35309 					if (UNEXPECTED(prop_info != NULL)) {
35310 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
35311 						goto free_and_exit_assign_obj;
35312 					} else {
35313 fast_assign_obj:
35314 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
35315 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35316 							ZVAL_COPY(EX_VAR(opline->result.var), value);
35317 						}
35318 						goto exit_assign_obj;
35319 					}
35320 				}
35321 			} else {
35322 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35323 				if (EXPECTED(zobj->properties != NULL)) {
35324 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
35325 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
35326 							GC_DELREF(zobj->properties);
35327 						}
35328 						zobj->properties = zend_array_dup(zobj->properties);
35329 					}
35330 					property_val = zend_hash_find_known_hash(zobj->properties, name);
35331 					if (property_val) {
35332 						goto fast_assign_obj;
35333 					}
35334 				}
35335 
35336 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
35337 					if (EXPECTED(zobj->properties == NULL)) {
35338 						rebuild_object_properties(zobj);
35339 					}
35340 					if (IS_CONST == IS_CONST) {
35341 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
35342 							Z_ADDREF_P(value);
35343 						}
35344 					} else if (IS_CONST != IS_TMP_VAR) {
35345 						if (Z_ISREF_P(value)) {
35346 							if (IS_CONST == IS_VAR) {
35347 								zend_reference *ref = Z_REF_P(value);
35348 								if (GC_DELREF(ref) == 0) {
35349 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
35350 									efree_size(ref, sizeof(zend_reference));
35351 									value = &tmp;
35352 								} else {
35353 									value = Z_REFVAL_P(value);
35354 									Z_TRY_ADDREF_P(value);
35355 								}
35356 							} else {
35357 								value = Z_REFVAL_P(value);
35358 								Z_TRY_ADDREF_P(value);
35359 							}
35360 						} else if (IS_CONST == IS_CV) {
35361 							Z_TRY_ADDREF_P(value);
35362 						}
35363 						}
35364 					zend_hash_add_new(zobj->properties, name, value);
35365 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35366 						ZVAL_COPY(EX_VAR(opline->result.var), value);
35367 					}
35368 					goto exit_assign_obj;
35369 				}
35370 			}
35371 		}
35372 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35373 	} else {
35374 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
35375 		if (UNEXPECTED(!name)) {
35376 
35377 			UNDEF_RESULT();
35378 			goto exit_assign_obj;
35379 		}
35380 	}
35381 
35382 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
35383 		ZVAL_DEREF(value);
35384 	}
35385 
35386 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
35387 
35388 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35389 		zend_tmp_string_release(tmp_name);
35390 	}
35391 
35392 free_and_exit_assign_obj:
35393 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
35394 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
35395 	}
35396 
35397 exit_assign_obj:
35398 	if (garbage) {
35399 		GC_DTOR_NO_REF(garbage);
35400 	}
35401 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35402 
35403 	/* assign_obj has two opcodes! */
35404 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35405 }
35406 
35407 /* 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)35408 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35409 {
35410 	USE_OPLINE
35411 	zval *object, *value, tmp;
35412 	zend_object *zobj;
35413 	zend_string *name, *tmp_name;
35414 	zend_refcounted *garbage = NULL;
35415 
35416 	SAVE_OPLINE();
35417 	object = &EX(This);
35418 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
35419 
35420 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35421 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35422 			object = Z_REFVAL_P(object);
35423 			goto assign_object;
35424 		}
35425 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
35426 		value = &EG(uninitialized_zval);
35427 		goto free_and_exit_assign_obj;
35428 	}
35429 
35430 assign_object:
35431 	zobj = Z_OBJ_P(object);
35432 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35433 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
35434 			void **cache_slot = CACHE_ADDR(opline->extended_value);
35435 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35436 			zval *property_val;
35437 
35438 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35439 				property_val = OBJ_PROP(zobj, prop_offset);
35440 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
35441 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
35442 
35443 					if (UNEXPECTED(prop_info != NULL)) {
35444 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
35445 						goto free_and_exit_assign_obj;
35446 					} else {
35447 fast_assign_obj:
35448 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
35449 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35450 							ZVAL_COPY(EX_VAR(opline->result.var), value);
35451 						}
35452 						goto exit_assign_obj;
35453 					}
35454 				}
35455 			} else {
35456 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35457 				if (EXPECTED(zobj->properties != NULL)) {
35458 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
35459 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
35460 							GC_DELREF(zobj->properties);
35461 						}
35462 						zobj->properties = zend_array_dup(zobj->properties);
35463 					}
35464 					property_val = zend_hash_find_known_hash(zobj->properties, name);
35465 					if (property_val) {
35466 						goto fast_assign_obj;
35467 					}
35468 				}
35469 
35470 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
35471 					if (EXPECTED(zobj->properties == NULL)) {
35472 						rebuild_object_properties(zobj);
35473 					}
35474 					if (IS_TMP_VAR == IS_CONST) {
35475 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
35476 							Z_ADDREF_P(value);
35477 						}
35478 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
35479 						if (Z_ISREF_P(value)) {
35480 							if (IS_TMP_VAR == IS_VAR) {
35481 								zend_reference *ref = Z_REF_P(value);
35482 								if (GC_DELREF(ref) == 0) {
35483 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
35484 									efree_size(ref, sizeof(zend_reference));
35485 									value = &tmp;
35486 								} else {
35487 									value = Z_REFVAL_P(value);
35488 									Z_TRY_ADDREF_P(value);
35489 								}
35490 							} else {
35491 								value = Z_REFVAL_P(value);
35492 								Z_TRY_ADDREF_P(value);
35493 							}
35494 						} else if (IS_TMP_VAR == IS_CV) {
35495 							Z_TRY_ADDREF_P(value);
35496 						}
35497 						}
35498 					zend_hash_add_new(zobj->properties, name, value);
35499 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35500 						ZVAL_COPY(EX_VAR(opline->result.var), value);
35501 					}
35502 					goto exit_assign_obj;
35503 				}
35504 			}
35505 		}
35506 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35507 	} else {
35508 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
35509 		if (UNEXPECTED(!name)) {
35510 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
35511 			UNDEF_RESULT();
35512 			goto exit_assign_obj;
35513 		}
35514 	}
35515 
35516 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
35517 		ZVAL_DEREF(value);
35518 	}
35519 
35520 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
35521 
35522 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35523 		zend_tmp_string_release(tmp_name);
35524 	}
35525 
35526 free_and_exit_assign_obj:
35527 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
35528 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
35529 	}
35530 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
35531 exit_assign_obj:
35532 	if (garbage) {
35533 		GC_DTOR_NO_REF(garbage);
35534 	}
35535 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35536 
35537 	/* assign_obj has two opcodes! */
35538 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35539 }
35540 
35541 /* 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)35542 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35543 {
35544 	USE_OPLINE
35545 	zval *object, *value, tmp;
35546 	zend_object *zobj;
35547 	zend_string *name, *tmp_name;
35548 	zend_refcounted *garbage = NULL;
35549 
35550 	SAVE_OPLINE();
35551 	object = &EX(This);
35552 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
35553 
35554 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35555 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35556 			object = Z_REFVAL_P(object);
35557 			goto assign_object;
35558 		}
35559 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
35560 		value = &EG(uninitialized_zval);
35561 		goto free_and_exit_assign_obj;
35562 	}
35563 
35564 assign_object:
35565 	zobj = Z_OBJ_P(object);
35566 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35567 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
35568 			void **cache_slot = CACHE_ADDR(opline->extended_value);
35569 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35570 			zval *property_val;
35571 
35572 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35573 				property_val = OBJ_PROP(zobj, prop_offset);
35574 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
35575 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
35576 
35577 					if (UNEXPECTED(prop_info != NULL)) {
35578 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
35579 						goto free_and_exit_assign_obj;
35580 					} else {
35581 fast_assign_obj:
35582 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
35583 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35584 							ZVAL_COPY(EX_VAR(opline->result.var), value);
35585 						}
35586 						goto exit_assign_obj;
35587 					}
35588 				}
35589 			} else {
35590 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35591 				if (EXPECTED(zobj->properties != NULL)) {
35592 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
35593 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
35594 							GC_DELREF(zobj->properties);
35595 						}
35596 						zobj->properties = zend_array_dup(zobj->properties);
35597 					}
35598 					property_val = zend_hash_find_known_hash(zobj->properties, name);
35599 					if (property_val) {
35600 						goto fast_assign_obj;
35601 					}
35602 				}
35603 
35604 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
35605 					if (EXPECTED(zobj->properties == NULL)) {
35606 						rebuild_object_properties(zobj);
35607 					}
35608 					if (IS_VAR == IS_CONST) {
35609 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
35610 							Z_ADDREF_P(value);
35611 						}
35612 					} else if (IS_VAR != IS_TMP_VAR) {
35613 						if (Z_ISREF_P(value)) {
35614 							if (IS_VAR == IS_VAR) {
35615 								zend_reference *ref = Z_REF_P(value);
35616 								if (GC_DELREF(ref) == 0) {
35617 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
35618 									efree_size(ref, sizeof(zend_reference));
35619 									value = &tmp;
35620 								} else {
35621 									value = Z_REFVAL_P(value);
35622 									Z_TRY_ADDREF_P(value);
35623 								}
35624 							} else {
35625 								value = Z_REFVAL_P(value);
35626 								Z_TRY_ADDREF_P(value);
35627 							}
35628 						} else if (IS_VAR == IS_CV) {
35629 							Z_TRY_ADDREF_P(value);
35630 						}
35631 						}
35632 					zend_hash_add_new(zobj->properties, name, value);
35633 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35634 						ZVAL_COPY(EX_VAR(opline->result.var), value);
35635 					}
35636 					goto exit_assign_obj;
35637 				}
35638 			}
35639 		}
35640 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35641 	} else {
35642 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
35643 		if (UNEXPECTED(!name)) {
35644 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
35645 			UNDEF_RESULT();
35646 			goto exit_assign_obj;
35647 		}
35648 	}
35649 
35650 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
35651 		ZVAL_DEREF(value);
35652 	}
35653 
35654 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
35655 
35656 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35657 		zend_tmp_string_release(tmp_name);
35658 	}
35659 
35660 free_and_exit_assign_obj:
35661 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
35662 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
35663 	}
35664 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
35665 exit_assign_obj:
35666 	if (garbage) {
35667 		GC_DTOR_NO_REF(garbage);
35668 	}
35669 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35670 
35671 	/* assign_obj has two opcodes! */
35672 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35673 }
35674 
35675 /* 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)35676 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35677 {
35678 	USE_OPLINE
35679 	zval *object, *value, tmp;
35680 	zend_object *zobj;
35681 	zend_string *name, *tmp_name;
35682 	zend_refcounted *garbage = NULL;
35683 
35684 	SAVE_OPLINE();
35685 	object = &EX(This);
35686 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
35687 
35688 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
35689 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
35690 			object = Z_REFVAL_P(object);
35691 			goto assign_object;
35692 		}
35693 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
35694 		value = &EG(uninitialized_zval);
35695 		goto free_and_exit_assign_obj;
35696 	}
35697 
35698 assign_object:
35699 	zobj = Z_OBJ_P(object);
35700 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35701 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
35702 			void **cache_slot = CACHE_ADDR(opline->extended_value);
35703 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
35704 			zval *property_val;
35705 
35706 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
35707 				property_val = OBJ_PROP(zobj, prop_offset);
35708 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
35709 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
35710 
35711 					if (UNEXPECTED(prop_info != NULL)) {
35712 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
35713 						goto free_and_exit_assign_obj;
35714 					} else {
35715 fast_assign_obj:
35716 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
35717 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35718 							ZVAL_COPY(EX_VAR(opline->result.var), value);
35719 						}
35720 						goto exit_assign_obj;
35721 					}
35722 				}
35723 			} else {
35724 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35725 				if (EXPECTED(zobj->properties != NULL)) {
35726 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
35727 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
35728 							GC_DELREF(zobj->properties);
35729 						}
35730 						zobj->properties = zend_array_dup(zobj->properties);
35731 					}
35732 					property_val = zend_hash_find_known_hash(zobj->properties, name);
35733 					if (property_val) {
35734 						goto fast_assign_obj;
35735 					}
35736 				}
35737 
35738 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
35739 					if (EXPECTED(zobj->properties == NULL)) {
35740 						rebuild_object_properties(zobj);
35741 					}
35742 					if (IS_CV == IS_CONST) {
35743 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
35744 							Z_ADDREF_P(value);
35745 						}
35746 					} else if (IS_CV != IS_TMP_VAR) {
35747 						if (Z_ISREF_P(value)) {
35748 							if (IS_CV == IS_VAR) {
35749 								zend_reference *ref = Z_REF_P(value);
35750 								if (GC_DELREF(ref) == 0) {
35751 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
35752 									efree_size(ref, sizeof(zend_reference));
35753 									value = &tmp;
35754 								} else {
35755 									value = Z_REFVAL_P(value);
35756 									Z_TRY_ADDREF_P(value);
35757 								}
35758 							} else {
35759 								value = Z_REFVAL_P(value);
35760 								Z_TRY_ADDREF_P(value);
35761 							}
35762 						} else if (IS_CV == IS_CV) {
35763 							Z_TRY_ADDREF_P(value);
35764 						}
35765 						}
35766 					zend_hash_add_new(zobj->properties, name, value);
35767 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
35768 						ZVAL_COPY(EX_VAR(opline->result.var), value);
35769 					}
35770 					goto exit_assign_obj;
35771 				}
35772 			}
35773 		}
35774 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
35775 	} else {
35776 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
35777 		if (UNEXPECTED(!name)) {
35778 
35779 			UNDEF_RESULT();
35780 			goto exit_assign_obj;
35781 		}
35782 	}
35783 
35784 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
35785 		ZVAL_DEREF(value);
35786 	}
35787 
35788 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
35789 
35790 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35791 		zend_tmp_string_release(tmp_name);
35792 	}
35793 
35794 free_and_exit_assign_obj:
35795 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
35796 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
35797 	}
35798 
35799 exit_assign_obj:
35800 	if (garbage) {
35801 		GC_DTOR_NO_REF(garbage);
35802 	}
35803 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35804 
35805 	/* assign_obj has two opcodes! */
35806 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35807 }
35808 
35809 /* 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)35810 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35811 {
35812 	USE_OPLINE
35813 	zval *property, *container, *value_ptr;
35814 
35815 	SAVE_OPLINE();
35816 
35817 	container = &EX(This);
35818 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35819 
35820 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
35821 
35822 	if (1) {
35823 		if (IS_UNUSED == IS_UNUSED) {
35824 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35825 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35826 			} else {
35827 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35828 			}
35829 		} else {
35830 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35831 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35832 			} else {
35833 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35834 			}
35835 		}
35836 	} else {
35837 		zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
35838 	}
35839 
35840 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35841 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
35842 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35843 }
35844 
35845 /* 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)35846 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35847 {
35848 	USE_OPLINE
35849 	zval *property, *container, *value_ptr;
35850 
35851 	SAVE_OPLINE();
35852 
35853 	container = &EX(This);
35854 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35855 
35856 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
35857 
35858 	if (1) {
35859 		if (IS_UNUSED == IS_UNUSED) {
35860 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35861 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35862 			} else {
35863 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35864 			}
35865 		} else {
35866 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35867 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35868 			} else {
35869 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
35870 			}
35871 		}
35872 	} else {
35873 		zend_assign_to_property_reference(container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
35874 	}
35875 
35876 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35877 
35878 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
35879 }
35880 
35881 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35882 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35883 {
35884 	USE_OPLINE
35885 	zend_string **rope;
35886 	zval *var;
35887 
35888 	/* Compiler allocates the necessary number of zval slots to keep the rope */
35889 	rope = (zend_string**)EX_VAR(opline->result.var);
35890 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35891 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35892 		rope[0] = Z_STR_P(var);
35893 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
35894 			Z_ADDREF_P(var);
35895 		}
35896 	} else {
35897 		var = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35898 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
35899 			if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
35900 				rope[0] = zend_string_copy(Z_STR_P(var));
35901 			} else {
35902 				rope[0] = Z_STR_P(var);
35903 			}
35904 		} else {
35905 			SAVE_OPLINE();
35906 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
35907 				ZVAL_UNDEFINED_OP2();
35908 			}
35909 			rope[0] = zval_get_string_func(var);
35910 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35911 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35912 		}
35913 	}
35914 	ZEND_VM_NEXT_OPCODE();
35915 }
35916 
ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35917 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35918 {
35919 	zval *class_name;
35920 	USE_OPLINE
35921 
35922 	SAVE_OPLINE();
35923 	if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
35924 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
35925 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35926 	} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
35927 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
35928 
35929 		if (UNEXPECTED(ce == NULL)) {
35930 			class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35931 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
35932 			CACHE_PTR(opline->extended_value, ce);
35933 		}
35934 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
35935 	} else {
35936 		class_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35937 try_class_name:
35938 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
35939 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
35940 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
35941 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
35942 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
35943 			class_name = Z_REFVAL_P(class_name);
35944 			goto try_class_name;
35945 		} else {
35946 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
35947 				ZVAL_UNDEFINED_OP2();
35948 				if (UNEXPECTED(EG(exception) != NULL)) {
35949 					HANDLE_EXCEPTION();
35950 				}
35951 			}
35952 			zend_throw_error(NULL, "Class name must be a valid object or a string");
35953 		}
35954 	}
35955 
35956 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35957 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
35958 }
35959 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)35960 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
35961 {
35962 	USE_OPLINE
35963 	zval *function_name;
35964 	zval *object;
35965 	zend_function *fbc;
35966 	zend_class_entry *called_scope;
35967 	zend_object *obj;
35968 	zend_execute_data *call;
35969 	uint32_t call_info;
35970 
35971 	SAVE_OPLINE();
35972 
35973 	object = &EX(This);
35974 
35975 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
35976 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
35977 	}
35978 
35979 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
35980 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
35981 		do {
35982 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
35983 				function_name = Z_REFVAL_P(function_name);
35984 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
35985 					break;
35986 				}
35987 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
35988 				ZVAL_UNDEFINED_OP2();
35989 				if (UNEXPECTED(EG(exception) != NULL)) {
35990 
35991 					HANDLE_EXCEPTION();
35992 				}
35993 			}
35994 			zend_throw_error(NULL, "Method name must be a string");
35995 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
35996 
35997 			HANDLE_EXCEPTION();
35998 		} while (0);
35999 	}
36000 
36001 	if (IS_UNUSED == IS_UNUSED) {
36002 		obj = Z_OBJ_P(object);
36003 	} else {
36004 		do {
36005 			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
36006 				obj = Z_OBJ_P(object);
36007 			} else {
36008 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
36009 					zend_reference *ref = Z_REF_P(object);
36010 
36011 					object = &ref->val;
36012 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
36013 						obj = Z_OBJ_P(object);
36014 						if (IS_UNUSED & IS_VAR) {
36015 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
36016 								efree_size(ref, sizeof(zend_reference));
36017 							} else {
36018 								Z_ADDREF_P(object);
36019 							}
36020 						}
36021 						break;
36022 					}
36023 				}
36024 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
36025 					object = ZVAL_UNDEFINED_OP1();
36026 					if (UNEXPECTED(EG(exception) != NULL)) {
36027 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36028 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36029 						}
36030 						HANDLE_EXCEPTION();
36031 					}
36032 				}
36033 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
36034 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36035 				}
36036 				zend_invalid_method_call(object, function_name);
36037 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36038 
36039 				HANDLE_EXCEPTION();
36040 			}
36041 		} while (0);
36042 	}
36043 
36044 	called_scope = obj->ce;
36045 
36046 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
36047 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
36048 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
36049 	} else {
36050 		zend_object *orig_obj = obj;
36051 
36052 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
36053 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36054 		}
36055 
36056 		/* First, locate the function. */
36057 		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));
36058 		if (UNEXPECTED(fbc == NULL)) {
36059 			if (EXPECTED(!EG(exception))) {
36060 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
36061 			}
36062 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36063 			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
36064 				zend_objects_store_del(orig_obj);
36065 			}
36066 			HANDLE_EXCEPTION();
36067 		}
36068 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
36069 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
36070 		    EXPECTED(obj == orig_obj)) {
36071 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
36072 		}
36073 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
36074 			GC_ADDREF(obj); /* For $this pointer */
36075 			if (GC_DELREF(orig_obj) == 0) {
36076 				zend_objects_store_del(orig_obj);
36077 			}
36078 		}
36079 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
36080 			init_func_run_time_cache(&fbc->op_array);
36081 		}
36082 	}
36083 
36084 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36085 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36086 	}
36087 
36088 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
36089 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
36090 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
36091 			zend_objects_store_del(obj);
36092 			if (UNEXPECTED(EG(exception))) {
36093 				HANDLE_EXCEPTION();
36094 			}
36095 		}
36096 		/* call static method */
36097 		obj = (zend_object*)called_scope;
36098 		call_info = ZEND_CALL_NESTED_FUNCTION;
36099 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
36100 		if (IS_UNUSED == IS_CV) {
36101 			GC_ADDREF(obj); /* For $this pointer */
36102 		}
36103 		/* CV may be changed indirectly (e.g. when it's a reference) */
36104 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
36105 	}
36106 
36107 	call = zend_vm_stack_push_call_frame(call_info,
36108 		fbc, opline->extended_value, obj);
36109 	call->prev_execute_data = EX(call);
36110 	EX(call) = call;
36111 
36112 	ZEND_VM_NEXT_OPCODE();
36113 }
36114 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36115 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36116 {
36117 	USE_OPLINE
36118 	zval *function_name;
36119 	zend_class_entry *ce;
36120 	uint32_t call_info;
36121 	zend_function *fbc;
36122 	zend_execute_data *call;
36123 
36124 	SAVE_OPLINE();
36125 
36126 	if (IS_UNUSED == IS_CONST) {
36127 		/* no function found. try a static method in class */
36128 		ce = CACHED_PTR(opline->result.num);
36129 		if (UNEXPECTED(ce == NULL)) {
36130 			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);
36131 			if (UNEXPECTED(ce == NULL)) {
36132 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36133 				HANDLE_EXCEPTION();
36134 			}
36135 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36136 				CACHE_PTR(opline->result.num, ce);
36137 			}
36138 		}
36139 	} else if (IS_UNUSED == IS_UNUSED) {
36140 		ce = zend_fetch_class(NULL, opline->op1.num);
36141 		if (UNEXPECTED(ce == NULL)) {
36142 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36143 			HANDLE_EXCEPTION();
36144 		}
36145 	} else {
36146 		ce = Z_CE_P(EX_VAR(opline->op1.var));
36147 	}
36148 
36149 	if (IS_UNUSED == IS_CONST &&
36150 	    (IS_TMP_VAR|IS_VAR) == IS_CONST &&
36151 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
36152 		/* nothing to do */
36153 	} else if (IS_UNUSED != IS_CONST &&
36154 	           (IS_TMP_VAR|IS_VAR) == IS_CONST &&
36155 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
36156 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
36157 	} else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
36158 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36159 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36160 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
36161 				do {
36162 					if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
36163 						function_name = Z_REFVAL_P(function_name);
36164 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
36165 							break;
36166 						}
36167 					} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
36168 						ZVAL_UNDEFINED_OP2();
36169 						if (UNEXPECTED(EG(exception) != NULL)) {
36170 							HANDLE_EXCEPTION();
36171 						}
36172 					}
36173 					zend_throw_error(NULL, "Method name must be a string");
36174 					zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36175 					HANDLE_EXCEPTION();
36176 				} while (0);
36177 			}
36178 		}
36179 
36180 		if (ce->get_static_method) {
36181 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
36182 		} else {
36183 			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));
36184 		}
36185 		if (UNEXPECTED(fbc == NULL)) {
36186 			if (EXPECTED(!EG(exception))) {
36187 				zend_undefined_method(ce, Z_STR_P(function_name));
36188 			}
36189 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36190 			HANDLE_EXCEPTION();
36191 		}
36192 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
36193 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
36194 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
36195 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
36196 		}
36197 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
36198 			init_func_run_time_cache(&fbc->op_array);
36199 		}
36200 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36201 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36202 		}
36203 	} else {
36204 		if (UNEXPECTED(ce->constructor == NULL)) {
36205 			zend_throw_error(NULL, "Cannot call constructor");
36206 			HANDLE_EXCEPTION();
36207 		}
36208 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
36209 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
36210 			HANDLE_EXCEPTION();
36211 		}
36212 		fbc = ce->constructor;
36213 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
36214 			init_func_run_time_cache(&fbc->op_array);
36215 		}
36216 	}
36217 
36218 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
36219 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
36220 			ce = (zend_class_entry*)Z_OBJ(EX(This));
36221 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
36222 		} else {
36223 			zend_non_static_method_call(fbc);
36224 			HANDLE_EXCEPTION();
36225 		}
36226 	} else {
36227 		/* previous opcode is ZEND_FETCH_CLASS */
36228 		if (IS_UNUSED == IS_UNUSED
36229 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
36230 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
36231 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
36232 				ce = Z_OBJCE(EX(This));
36233 			} else {
36234 				ce = Z_CE(EX(This));
36235 			}
36236 		}
36237 		call_info = ZEND_CALL_NESTED_FUNCTION;
36238 	}
36239 
36240 	call = zend_vm_stack_push_call_frame(call_info,
36241 		fbc, opline->extended_value, ce);
36242 	call->prev_execute_data = EX(call);
36243 	EX(call) = call;
36244 
36245 	ZEND_VM_NEXT_OPCODE();
36246 }
36247 
ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36248 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36249 {
36250 	zval *array;
36251 	uint32_t size;
36252 	USE_OPLINE
36253 
36254 	array = EX_VAR(opline->result.var);
36255 	if (IS_UNUSED != IS_UNUSED) {
36256 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
36257 		ZVAL_ARR(array, zend_new_array(size));
36258 		/* Explicitly initialize array as not-packed if flag is set */
36259 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
36260 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
36261 		}
36262 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36263 	} else {
36264 		ZVAL_ARR(array, zend_new_array(0));
36265 		ZEND_VM_NEXT_OPCODE();
36266 	}
36267 }
36268 
ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36269 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36270 {
36271 	USE_OPLINE
36272 	zval *container;
36273 	zval *offset;
36274 	zend_string *name, *tmp_name;
36275 
36276 	SAVE_OPLINE();
36277 	container = &EX(This);
36278 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36279 
36280 	do {
36281 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
36282 			if (Z_ISREF_P(container)) {
36283 				container = Z_REFVAL_P(container);
36284 				if (Z_TYPE_P(container) != IS_OBJECT) {
36285 					if (IS_UNUSED == IS_CV
36286 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
36287 						ZVAL_UNDEFINED_OP1();
36288 					}
36289 					break;
36290 				}
36291 			} else {
36292 				break;
36293 			}
36294 		}
36295 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
36296 			name = Z_STR_P(offset);
36297 		} else {
36298 			name = zval_try_get_tmp_string(offset, &tmp_name);
36299 			if (UNEXPECTED(!name)) {
36300 				break;
36301 			}
36302 		}
36303 		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));
36304 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36305 			zend_tmp_string_release(tmp_name);
36306 		}
36307 	} while (0);
36308 
36309 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36310 
36311 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36312 }
36313 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36314 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36315 {
36316 	USE_OPLINE
36317 	zval *container;
36318 	int result;
36319 	zval *offset;
36320 	zend_string *name, *tmp_name;
36321 
36322 	SAVE_OPLINE();
36323 	container = &EX(This);
36324 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36325 
36326 	if (IS_UNUSED == IS_CONST ||
36327 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
36328 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
36329 			container = Z_REFVAL_P(container);
36330 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
36331 				result = (opline->extended_value & ZEND_ISEMPTY);
36332 				goto isset_object_finish;
36333 			}
36334 		} else {
36335 			result = (opline->extended_value & ZEND_ISEMPTY);
36336 			goto isset_object_finish;
36337 		}
36338 	}
36339 
36340 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
36341 		name = Z_STR_P(offset);
36342 	} else {
36343 		name = zval_try_get_tmp_string(offset, &tmp_name);
36344 		if (UNEXPECTED(!name)) {
36345 			result = 0;
36346 			goto isset_object_finish;
36347 		}
36348 	}
36349 
36350 	result =
36351 		(opline->extended_value & ZEND_ISEMPTY) ^
36352 		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));
36353 
36354 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
36355 		zend_tmp_string_release(tmp_name);
36356 	}
36357 
36358 isset_object_finish:
36359 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36360 
36361 	ZEND_VM_SMART_BRANCH(result, 1);
36362 }
36363 
ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36364 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36365 {
36366 	USE_OPLINE
36367 
36368 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
36369 
36370 	SAVE_OPLINE();
36371 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
36372 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36373 	}
36374 
36375 	/* Destroy the previously yielded value */
36376 	zval_ptr_dtor(&generator->value);
36377 
36378 	/* Destroy the previously yielded key */
36379 	zval_ptr_dtor(&generator->key);
36380 
36381 	/* Set the new yielded value */
36382 	if (IS_UNUSED != IS_UNUSED) {
36383 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
36384 			/* Constants and temporary variables aren't yieldable by reference,
36385 			 * but we still allow them with a notice. */
36386 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
36387 				zval *value;
36388 
36389 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
36390 
36391 				value = NULL;
36392 				ZVAL_COPY_VALUE(&generator->value, value);
36393 				if (IS_UNUSED == IS_CONST) {
36394 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
36395 						Z_ADDREF(generator->value);
36396 					}
36397 				}
36398 			} else {
36399 				zval *value_ptr = NULL;
36400 
36401 				/* If a function call result is yielded and the function did
36402 				 * not return by reference we throw a notice. */
36403 				do {
36404 					if (IS_UNUSED == IS_VAR) {
36405 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
36406 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
36407 						 && !Z_ISREF_P(value_ptr)) {
36408 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
36409 							ZVAL_COPY(&generator->value, value_ptr);
36410 							break;
36411 						}
36412 					}
36413 					if (Z_ISREF_P(value_ptr)) {
36414 						Z_ADDREF_P(value_ptr);
36415 					} else {
36416 						ZVAL_MAKE_REF_EX(value_ptr, 2);
36417 					}
36418 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
36419 				} while (0);
36420 
36421 			}
36422 		} else {
36423 			zval *value = NULL;
36424 
36425 			/* Consts, temporary variables and references need copying */
36426 			if (IS_UNUSED == IS_CONST) {
36427 				ZVAL_COPY_VALUE(&generator->value, value);
36428 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
36429 					Z_ADDREF(generator->value);
36430 				}
36431 			} else if (IS_UNUSED == IS_TMP_VAR) {
36432 				ZVAL_COPY_VALUE(&generator->value, value);
36433 			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
36434 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
36435 
36436 			} else {
36437 				ZVAL_COPY_VALUE(&generator->value, value);
36438 				if (IS_UNUSED == IS_CV) {
36439 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
36440 				}
36441 			}
36442 		}
36443 	} else {
36444 		/* If no value was specified yield null */
36445 		ZVAL_NULL(&generator->value);
36446 	}
36447 
36448 	/* Set the new yielded key */
36449 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
36450 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
36451 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
36452 			key = Z_REFVAL_P(key);
36453 		}
36454 		ZVAL_COPY(&generator->key, key);
36455 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
36456 
36457 		if (Z_TYPE(generator->key) == IS_LONG
36458 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
36459 		) {
36460 			generator->largest_used_integer_key = Z_LVAL(generator->key);
36461 		}
36462 	} else {
36463 		/* If no key was specified we use auto-increment keys */
36464 		generator->largest_used_integer_key++;
36465 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
36466 	}
36467 
36468 	if (RETURN_VALUE_USED(opline)) {
36469 		/* If the return value of yield is used set the send
36470 		 * target and initialize it to NULL */
36471 		generator->send_target = EX_VAR(opline->result.var);
36472 		ZVAL_NULL(generator->send_target);
36473 	} else {
36474 		generator->send_target = NULL;
36475 	}
36476 
36477 	/* We increment to the next op, so we are at the correct position when the
36478 	 * generator is resumed. */
36479 	ZEND_VM_INC_OPCODE();
36480 
36481 	/* The GOTO VM uses a local opline variable. We need to set the opline
36482 	 * variable in execute_data so we don't resume at an old position. */
36483 	SAVE_OPLINE();
36484 
36485 	ZEND_VM_RETURN();
36486 }
36487 
ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36488 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36489 {
36490 	zval *class_name;
36491 	USE_OPLINE
36492 
36493 	SAVE_OPLINE();
36494 	if (IS_UNUSED == IS_UNUSED) {
36495 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
36496 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36497 	} else if (IS_UNUSED == IS_CONST) {
36498 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
36499 
36500 		if (UNEXPECTED(ce == NULL)) {
36501 			class_name = NULL;
36502 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
36503 			CACHE_PTR(opline->extended_value, ce);
36504 		}
36505 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
36506 	} else {
36507 		class_name = NULL;
36508 try_class_name:
36509 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
36510 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
36511 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
36512 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
36513 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
36514 			class_name = Z_REFVAL_P(class_name);
36515 			goto try_class_name;
36516 		} else {
36517 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
36518 				ZVAL_UNDEFINED_OP2();
36519 				if (UNEXPECTED(EG(exception) != NULL)) {
36520 					HANDLE_EXCEPTION();
36521 				}
36522 			}
36523 			zend_throw_error(NULL, "Class name must be a valid object or a string");
36524 		}
36525 	}
36526 
36527 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36528 }
36529 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36530 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36531 {
36532 	USE_OPLINE
36533 	zval *function_name;
36534 	zend_class_entry *ce;
36535 	uint32_t call_info;
36536 	zend_function *fbc;
36537 	zend_execute_data *call;
36538 
36539 	SAVE_OPLINE();
36540 
36541 	if (IS_UNUSED == IS_CONST) {
36542 		/* no function found. try a static method in class */
36543 		ce = CACHED_PTR(opline->result.num);
36544 		if (UNEXPECTED(ce == NULL)) {
36545 			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);
36546 			if (UNEXPECTED(ce == NULL)) {
36547 
36548 				HANDLE_EXCEPTION();
36549 			}
36550 			if (IS_UNUSED != IS_CONST) {
36551 				CACHE_PTR(opline->result.num, ce);
36552 			}
36553 		}
36554 	} else if (IS_UNUSED == IS_UNUSED) {
36555 		ce = zend_fetch_class(NULL, opline->op1.num);
36556 		if (UNEXPECTED(ce == NULL)) {
36557 
36558 			HANDLE_EXCEPTION();
36559 		}
36560 	} else {
36561 		ce = Z_CE_P(EX_VAR(opline->op1.var));
36562 	}
36563 
36564 	if (IS_UNUSED == IS_CONST &&
36565 	    IS_UNUSED == IS_CONST &&
36566 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
36567 		/* nothing to do */
36568 	} else if (IS_UNUSED != IS_CONST &&
36569 	           IS_UNUSED == IS_CONST &&
36570 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
36571 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
36572 	} else if (IS_UNUSED != IS_UNUSED) {
36573 		function_name = NULL;
36574 		if (IS_UNUSED != IS_CONST) {
36575 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
36576 				do {
36577 					if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
36578 						function_name = Z_REFVAL_P(function_name);
36579 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
36580 							break;
36581 						}
36582 					} else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
36583 						ZVAL_UNDEFINED_OP2();
36584 						if (UNEXPECTED(EG(exception) != NULL)) {
36585 							HANDLE_EXCEPTION();
36586 						}
36587 					}
36588 					zend_throw_error(NULL, "Method name must be a string");
36589 
36590 					HANDLE_EXCEPTION();
36591 				} while (0);
36592 			}
36593 		}
36594 
36595 		if (ce->get_static_method) {
36596 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
36597 		} else {
36598 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
36599 		}
36600 		if (UNEXPECTED(fbc == NULL)) {
36601 			if (EXPECTED(!EG(exception))) {
36602 				zend_undefined_method(ce, Z_STR_P(function_name));
36603 			}
36604 
36605 			HANDLE_EXCEPTION();
36606 		}
36607 		if (IS_UNUSED == IS_CONST &&
36608 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
36609 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
36610 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
36611 		}
36612 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
36613 			init_func_run_time_cache(&fbc->op_array);
36614 		}
36615 		if (IS_UNUSED != IS_CONST) {
36616 
36617 		}
36618 	} else {
36619 		if (UNEXPECTED(ce->constructor == NULL)) {
36620 			zend_throw_error(NULL, "Cannot call constructor");
36621 			HANDLE_EXCEPTION();
36622 		}
36623 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
36624 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
36625 			HANDLE_EXCEPTION();
36626 		}
36627 		fbc = ce->constructor;
36628 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
36629 			init_func_run_time_cache(&fbc->op_array);
36630 		}
36631 	}
36632 
36633 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
36634 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
36635 			ce = (zend_class_entry*)Z_OBJ(EX(This));
36636 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
36637 		} else {
36638 			zend_non_static_method_call(fbc);
36639 			HANDLE_EXCEPTION();
36640 		}
36641 	} else {
36642 		/* previous opcode is ZEND_FETCH_CLASS */
36643 		if (IS_UNUSED == IS_UNUSED
36644 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
36645 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
36646 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
36647 				ce = Z_OBJCE(EX(This));
36648 			} else {
36649 				ce = Z_CE(EX(This));
36650 			}
36651 		}
36652 		call_info = ZEND_CALL_NESTED_FUNCTION;
36653 	}
36654 
36655 	call = zend_vm_stack_push_call_frame(call_info,
36656 		fbc, opline->extended_value, ce);
36657 	call->prev_execute_data = EX(call);
36658 	EX(call) = call;
36659 
36660 	ZEND_VM_NEXT_OPCODE();
36661 }
36662 
ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36663 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36664 {
36665 	if (IS_UNUSED == IS_UNUSED) {
36666 		SAVE_OPLINE();
36667 		zend_verify_missing_return_type(EX(func));
36668 		HANDLE_EXCEPTION();
36669 	} else {
36670 /* prevents "undefined variable opline" errors */
36671 #if 0 || (IS_UNUSED != IS_UNUSED)
36672 		USE_OPLINE
36673 		zval *retval_ref, *retval_ptr;
36674 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
36675 		retval_ref = retval_ptr = NULL;
36676 
36677 		if (IS_UNUSED == IS_CONST) {
36678 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
36679 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
36680 		} else if (IS_UNUSED == IS_VAR) {
36681 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
36682 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
36683 			}
36684 			ZVAL_DEREF(retval_ptr);
36685 		} else if (IS_UNUSED == IS_CV) {
36686 			ZVAL_DEREF(retval_ptr);
36687 		}
36688 
36689 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
36690 			ZEND_VM_NEXT_OPCODE();
36691 		}
36692 
36693 		if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
36694 			SAVE_OPLINE();
36695 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
36696 			if (UNEXPECTED(EG(exception))) {
36697 				HANDLE_EXCEPTION();
36698 			}
36699 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
36700 				ZEND_VM_NEXT_OPCODE();
36701 			}
36702 		}
36703 
36704 		zend_reference *ref = NULL;
36705 		void *cache_slot = CACHE_ADDR(opline->op2.num);
36706 		if (UNEXPECTED(retval_ref != retval_ptr)) {
36707 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
36708 				ref = Z_REF_P(retval_ref);
36709 			} else {
36710 				/* A cast might happen - unwrap the reference if this is a by-value return */
36711 				if (Z_REFCOUNT_P(retval_ref) == 1) {
36712 					ZVAL_UNREF(retval_ref);
36713 				} else {
36714 					Z_DELREF_P(retval_ref);
36715 					ZVAL_COPY(retval_ref, retval_ptr);
36716 				}
36717 				retval_ptr = retval_ref;
36718 			}
36719 		}
36720 
36721 		SAVE_OPLINE();
36722 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
36723 			zend_verify_return_error(EX(func), retval_ptr);
36724 			HANDLE_EXCEPTION();
36725 		}
36726 		ZEND_VM_NEXT_OPCODE();
36727 #endif
36728 	}
36729 }
36730 
ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36731 static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36732 {
36733 	SAVE_OPLINE();
36734 	zend_verify_never_error(EX(func));
36735 	HANDLE_EXCEPTION();
36736 }
36737 
ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36738 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36739 {
36740 	USE_OPLINE
36741 	uint32_t arg_num;
36742 
36743 	if (IS_UNUSED == IS_CONST) {
36744 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
36745 		arg_num = zend_get_arg_offset_by_name(
36746 			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
36747 		if (UNEXPECTED(arg_num == 0)) {
36748 			/* Treat this as a by-value argument, and throw an error during SEND. */
36749 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
36750 			ZEND_VM_NEXT_OPCODE();
36751 		}
36752 	} else {
36753 		arg_num = opline->op2.num;
36754 	}
36755 
36756 	if (EXPECTED(0)) {
36757 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
36758 			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
36759 		} else {
36760 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
36761 		}
36762 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
36763 		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
36764 	} else {
36765 		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
36766 	}
36767 	ZEND_VM_NEXT_OPCODE();
36768 }
36769 
ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36770 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36771 {
36772 	USE_OPLINE
36773 	uint32_t arg_num;
36774 
36775 	if (IS_UNUSED == IS_CONST) {
36776 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
36777 		arg_num = zend_get_arg_offset_by_name(
36778 			EX(call)->func, arg_name, CACHE_ADDR(opline->result.num)) + 1;
36779 		if (UNEXPECTED(arg_num == 0)) {
36780 			/* Treat this as a by-value argument, and throw an error during SEND. */
36781 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
36782 			ZEND_VM_NEXT_OPCODE();
36783 		}
36784 	} else {
36785 		arg_num = opline->op2.num;
36786 	}
36787 
36788 	if (EXPECTED(1)) {
36789 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
36790 			ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
36791 		} else {
36792 			ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
36793 		}
36794 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
36795 		ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
36796 	} else {
36797 		ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF);
36798 	}
36799 	ZEND_VM_NEXT_OPCODE();
36800 }
36801 
ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36802 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36803 {
36804 	USE_OPLINE
36805 
36806 	zend_execute_data *call = execute_data->call;
36807 	if (EXPECTED(!(ZEND_CALL_INFO(call) & ZEND_CALL_MAY_HAVE_UNDEF))) {
36808 		ZEND_VM_NEXT_OPCODE();
36809 	}
36810 
36811 	SAVE_OPLINE();
36812 	zend_handle_undef_args(call);
36813 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
36814 }
36815 
ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36816 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36817 {
36818 	USE_OPLINE
36819 	zval *result;
36820 	zend_function *constructor;
36821 	zend_class_entry *ce;
36822 	zend_execute_data *call;
36823 
36824 	SAVE_OPLINE();
36825 	if (IS_UNUSED == IS_CONST) {
36826 		ce = CACHED_PTR(opline->op2.num);
36827 		if (UNEXPECTED(ce == NULL)) {
36828 			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);
36829 			if (UNEXPECTED(ce == NULL)) {
36830 				ZVAL_UNDEF(EX_VAR(opline->result.var));
36831 				HANDLE_EXCEPTION();
36832 			}
36833 			CACHE_PTR(opline->op2.num, ce);
36834 		}
36835 	} else if (IS_UNUSED == IS_UNUSED) {
36836 		ce = zend_fetch_class(NULL, opline->op1.num);
36837 		if (UNEXPECTED(ce == NULL)) {
36838 			ZVAL_UNDEF(EX_VAR(opline->result.var));
36839 			HANDLE_EXCEPTION();
36840 		}
36841 	} else {
36842 		ce = Z_CE_P(EX_VAR(opline->op1.var));
36843 	}
36844 
36845 	result = EX_VAR(opline->result.var);
36846 	if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) {
36847 		ZVAL_UNDEF(result);
36848 		HANDLE_EXCEPTION();
36849 	}
36850 
36851 	constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result));
36852 	if (constructor == NULL) {
36853 		if (UNEXPECTED(EG(exception))) {
36854 			HANDLE_EXCEPTION();
36855 		}
36856 
36857 		/* If there are no arguments, skip over the DO_FCALL opcode. We check if the next
36858 		 * opcode is DO_FCALL in case EXT instructions are used. */
36859 		if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) {
36860 			ZEND_VM_NEXT_OPCODE_EX(1, 2);
36861 		}
36862 
36863 		/* Perform a dummy function call */
36864 		call = zend_vm_stack_push_call_frame(
36865 			ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function,
36866 			opline->extended_value, NULL);
36867 	} else {
36868 		if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&constructor->op_array))) {
36869 			init_func_run_time_cache(&constructor->op_array);
36870 		}
36871 		/* We are not handling overloaded classes right now */
36872 		call = zend_vm_stack_push_call_frame(
36873 			ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_THIS,
36874 			constructor,
36875 			opline->extended_value,
36876 			Z_OBJ_P(result));
36877 		Z_ADDREF_P(result);
36878 	}
36879 
36880 	call->prev_execute_data = EX(call);
36881 	EX(call) = call;
36882 	ZEND_VM_NEXT_OPCODE();
36883 }
36884 
ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36885 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36886 {
36887 	zval *array;
36888 	uint32_t size;
36889 	USE_OPLINE
36890 
36891 	array = EX_VAR(opline->result.var);
36892 	if (IS_UNUSED != IS_UNUSED) {
36893 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
36894 		ZVAL_ARR(array, zend_new_array(size));
36895 		/* Explicitly initialize array as not-packed if flag is set */
36896 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
36897 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
36898 		}
36899 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36900 	} else {
36901 		ZVAL_ARR(array, zend_new_array(0));
36902 		ZEND_VM_NEXT_OPCODE();
36903 	}
36904 }
36905 
ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)36906 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
36907 {
36908 	USE_OPLINE
36909 
36910 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
36911 
36912 	SAVE_OPLINE();
36913 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
36914 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
36915 	}
36916 
36917 	/* Destroy the previously yielded value */
36918 	zval_ptr_dtor(&generator->value);
36919 
36920 	/* Destroy the previously yielded key */
36921 	zval_ptr_dtor(&generator->key);
36922 
36923 	/* Set the new yielded value */
36924 	if (IS_UNUSED != IS_UNUSED) {
36925 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
36926 			/* Constants and temporary variables aren't yieldable by reference,
36927 			 * but we still allow them with a notice. */
36928 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
36929 				zval *value;
36930 
36931 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
36932 
36933 				value = NULL;
36934 				ZVAL_COPY_VALUE(&generator->value, value);
36935 				if (IS_UNUSED == IS_CONST) {
36936 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
36937 						Z_ADDREF(generator->value);
36938 					}
36939 				}
36940 			} else {
36941 				zval *value_ptr = NULL;
36942 
36943 				/* If a function call result is yielded and the function did
36944 				 * not return by reference we throw a notice. */
36945 				do {
36946 					if (IS_UNUSED == IS_VAR) {
36947 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
36948 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
36949 						 && !Z_ISREF_P(value_ptr)) {
36950 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
36951 							ZVAL_COPY(&generator->value, value_ptr);
36952 							break;
36953 						}
36954 					}
36955 					if (Z_ISREF_P(value_ptr)) {
36956 						Z_ADDREF_P(value_ptr);
36957 					} else {
36958 						ZVAL_MAKE_REF_EX(value_ptr, 2);
36959 					}
36960 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
36961 				} while (0);
36962 
36963 			}
36964 		} else {
36965 			zval *value = NULL;
36966 
36967 			/* Consts, temporary variables and references need copying */
36968 			if (IS_UNUSED == IS_CONST) {
36969 				ZVAL_COPY_VALUE(&generator->value, value);
36970 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
36971 					Z_ADDREF(generator->value);
36972 				}
36973 			} else if (IS_UNUSED == IS_TMP_VAR) {
36974 				ZVAL_COPY_VALUE(&generator->value, value);
36975 			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
36976 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
36977 
36978 			} else {
36979 				ZVAL_COPY_VALUE(&generator->value, value);
36980 				if (IS_UNUSED == IS_CV) {
36981 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
36982 				}
36983 			}
36984 		}
36985 	} else {
36986 		/* If no value was specified yield null */
36987 		ZVAL_NULL(&generator->value);
36988 	}
36989 
36990 	/* Set the new yielded key */
36991 	if (IS_UNUSED != IS_UNUSED) {
36992 		zval *key = NULL;
36993 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
36994 			key = Z_REFVAL_P(key);
36995 		}
36996 		ZVAL_COPY(&generator->key, key);
36997 
36998 		if (Z_TYPE(generator->key) == IS_LONG
36999 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
37000 		) {
37001 			generator->largest_used_integer_key = Z_LVAL(generator->key);
37002 		}
37003 	} else {
37004 		/* If no key was specified we use auto-increment keys */
37005 		generator->largest_used_integer_key++;
37006 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
37007 	}
37008 
37009 	if (RETURN_VALUE_USED(opline)) {
37010 		/* If the return value of yield is used set the send
37011 		 * target and initialize it to NULL */
37012 		generator->send_target = EX_VAR(opline->result.var);
37013 		ZVAL_NULL(generator->send_target);
37014 	} else {
37015 		generator->send_target = NULL;
37016 	}
37017 
37018 	/* We increment to the next op, so we are at the correct position when the
37019 	 * generator is resumed. */
37020 	ZEND_VM_INC_OPCODE();
37021 
37022 	/* The GOTO VM uses a local opline variable. We need to set the opline
37023 	 * variable in execute_data so we don't resume at an old position. */
37024 	SAVE_OPLINE();
37025 
37026 	ZEND_VM_RETURN();
37027 }
37028 
ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37029 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37030 {
37031 	USE_OPLINE
37032 
37033 	if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) {
37034 		zval *result = EX_VAR(opline->result.var);
37035 
37036 		ZVAL_OBJ(result, Z_OBJ(EX(This)));
37037 		Z_ADDREF_P(result);
37038 		ZEND_VM_NEXT_OPCODE();
37039 	} else {
37040 		ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37041 	}
37042 }
37043 
ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37044 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37045 {
37046 	USE_OPLINE
37047 
37048 	/* For symbol tables we need to deal with exactly the same problems as for property tables. */
37049 	ZVAL_ARR(EX_VAR(opline->result.var),
37050 		zend_proptable_to_symtable(&EG(symbol_table), /* always_duplicate */ 1));
37051 	ZEND_VM_NEXT_OPCODE();
37052 }
37053 
ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37054 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37055 {
37056 	USE_OPLINE
37057 
37058 	ZVAL_BOOL(EX_VAR(opline->result.var),
37059 		(opline->extended_value & ZEND_ISEMPTY) ^
37060 		 (Z_TYPE(EX(This)) == IS_OBJECT));
37061 	ZEND_VM_NEXT_OPCODE();
37062 }
37063 
ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37064 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37065 {
37066 	USE_OPLINE
37067 
37068 	if (IS_UNUSED == IS_UNUSED) {
37069 		SAVE_OPLINE();
37070 		if (UNEXPECTED(!EX(func)->common.scope)) {
37071 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
37072 			ZVAL_UNDEF(EX_VAR(opline->result.var));
37073 			HANDLE_EXCEPTION();
37074 		} else {
37075 			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
37076 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
37077 			if (UNEXPECTED(EG(exception))) {
37078 				HANDLE_EXCEPTION();
37079 			}
37080 			ZEND_VM_NEXT_OPCODE();
37081 		}
37082 	} else {
37083 		zval *op1;
37084 
37085 		SAVE_OPLINE();
37086 		op1 = NULL;
37087 		while (1) {
37088 			if (Z_TYPE_P(op1) == IS_OBJECT) {
37089 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
37090 			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
37091 				op1 = Z_REFVAL_P(op1);
37092 				continue;
37093 			} else {
37094 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
37095 					ZVAL_UNDEFINED_OP1();
37096 				}
37097 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
37098 				ZVAL_UNDEF(EX_VAR(opline->result.var));
37099 			}
37100 			break;
37101 		}
37102 
37103 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37104 	}
37105 }
37106 
ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37107 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37108 {
37109 	USE_OPLINE
37110 
37111 	if (Z_TYPE(EX(This)) == IS_OBJECT) {
37112 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name);
37113 	} else if (Z_CE(EX(This))) {
37114 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name);
37115 	} else {
37116 		ZEND_ASSERT(!EX(func)->common.scope);
37117 		SAVE_OPLINE();
37118 		zend_throw_error(NULL, "get_called_class() must be called from within a class");
37119 		ZVAL_UNDEF(EX_VAR(opline->result.var));
37120 		HANDLE_EXCEPTION();
37121 	}
37122 	ZEND_VM_NEXT_OPCODE();
37123 }
37124 
ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37125 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37126 {
37127 	USE_OPLINE
37128 
37129 	ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS());
37130 	ZEND_VM_NEXT_OPCODE();
37131 }
37132 
ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37133 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37134 {
37135 	USE_OPLINE
37136 	zend_array *ht;
37137 	uint32_t arg_count, result_size, skip;
37138 
37139 	arg_count = EX_NUM_ARGS();
37140 	if (IS_UNUSED == IS_CONST) {
37141 		skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1));
37142 		if (arg_count < skip) {
37143 			result_size = 0;
37144 		} else {
37145 			result_size = arg_count - skip;
37146 		}
37147 	} else {
37148 		skip = 0;
37149 		result_size = arg_count;
37150 	}
37151 
37152 	if (result_size) {
37153 		SAVE_OPLINE();
37154 		uint32_t first_extra_arg = EX(func)->op_array.num_args;
37155 
37156 		ht = zend_new_array(result_size);
37157 		ZVAL_ARR(EX_VAR(opline->result.var), ht);
37158 		zend_hash_real_init_packed(ht);
37159 		ZEND_HASH_FILL_PACKED(ht) {
37160 			zval *p, *q;
37161 			uint32_t i = skip;
37162 			p = EX_VAR_NUM(i);
37163 			if (arg_count > first_extra_arg) {
37164 				while (i < first_extra_arg) {
37165 					q = p;
37166 					if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
37167 						ZVAL_DEREF(q);
37168 						if (Z_OPT_REFCOUNTED_P(q)) {
37169 							Z_ADDREF_P(q);
37170 						}
37171 						ZEND_HASH_FILL_SET(q);
37172 					} else {
37173 						ZEND_HASH_FILL_SET_NULL();
37174 					}
37175 					ZEND_HASH_FILL_NEXT();
37176 					p++;
37177 					i++;
37178 				}
37179 				if (skip < first_extra_arg) {
37180 					skip = 0;
37181 				} else {
37182 					skip -= first_extra_arg;
37183 				}
37184 				p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip);
37185 			}
37186 			while (i < arg_count) {
37187 				q = p;
37188 				if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) {
37189 					ZVAL_DEREF(q);
37190 					if (Z_OPT_REFCOUNTED_P(q)) {
37191 						Z_ADDREF_P(q);
37192 					}
37193 					ZEND_HASH_FILL_SET(q);
37194 				} else {
37195 					ZEND_HASH_FILL_SET_NULL();
37196 				}
37197 				ZEND_HASH_FILL_NEXT();
37198 				p++;
37199 				i++;
37200 			}
37201 		} ZEND_HASH_FILL_END();
37202 		ht->nNumOfElements = result_size;
37203 	} else {
37204 		ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var));
37205 	}
37206 	ZEND_VM_NEXT_OPCODE();
37207 }
37208 
37209 /* Contrary to what its name indicates, ZEND_COPY_TMP may receive and define references. */
ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37210 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37211 {
37212 	USE_OPLINE
37213 	zend_execute_data *call = EX(call);
37214 
37215 	zend_closure_from_frame(EX_VAR(opline->result.var), call);
37216 
37217 	if (ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS) {
37218 		OBJ_RELEASE(Z_OBJ(call->This));
37219 	}
37220 
37221 	EX(call) = call->prev_execute_data;
37222 
37223 	zend_vm_stack_free_call_frame(call);
37224 
37225 	ZEND_VM_NEXT_OPCODE();
37226 }
37227 
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37228 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37229 {
37230 	USE_OPLINE
37231 	zval *object;
37232 	zval *property;
37233 	zval *value;
37234 	zval *zptr;
37235 	void **cache_slot;
37236 	zend_property_info *prop_info;
37237 	zend_object *zobj;
37238 	zend_string *name, *tmp_name;
37239 
37240 	SAVE_OPLINE();
37241 	object = &EX(This);
37242 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37243 
37244 	do {
37245 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
37246 
37247 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
37248 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
37249 				object = Z_REFVAL_P(object);
37250 				goto assign_op_object;
37251 			}
37252 			if (IS_UNUSED == IS_CV
37253 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
37254 				ZVAL_UNDEFINED_OP1();
37255 			}
37256 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
37257 			break;
37258 		}
37259 
37260 assign_op_object:
37261 		/* here we are sure we are dealing with an object */
37262 		zobj = Z_OBJ_P(object);
37263 		if (IS_CV == IS_CONST) {
37264 			name = Z_STR_P(property);
37265 		} else {
37266 			name = zval_try_get_tmp_string(property, &tmp_name);
37267 			if (UNEXPECTED(!name)) {
37268 				UNDEF_RESULT();
37269 				break;
37270 			}
37271 		}
37272 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
37273 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
37274 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
37275 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37276 					ZVAL_NULL(EX_VAR(opline->result.var));
37277 				}
37278 			} else {
37279 				zval *orig_zptr = zptr;
37280 				zend_reference *ref;
37281 
37282 				do {
37283 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
37284 						ref = Z_REF_P(zptr);
37285 						zptr = Z_REFVAL_P(zptr);
37286 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
37287 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
37288 							break;
37289 						}
37290 					}
37291 
37292 					if (IS_CV == IS_CONST) {
37293 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
37294 					} else {
37295 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
37296 					}
37297 					if (UNEXPECTED(prop_info)) {
37298 						/* special case for typed properties */
37299 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
37300 					} else {
37301 						zend_binary_op(zptr, zptr, value OPLINE_CC);
37302 					}
37303 				} while (0);
37304 
37305 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37306 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
37307 				}
37308 			}
37309 		} else {
37310 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
37311 		}
37312 		if (IS_CV != IS_CONST) {
37313 			zend_tmp_string_release(tmp_name);
37314 		}
37315 	} while (0);
37316 
37317 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
37318 
37319 
37320 	/* assign_obj has two opcodes! */
37321 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
37322 }
37323 
37324 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37325 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37326 {
37327 	USE_OPLINE
37328 	zval *object;
37329 	zval *property;
37330 	zval *zptr;
37331 	void **cache_slot;
37332 	zend_property_info *prop_info;
37333 	zend_object *zobj;
37334 	zend_string *name, *tmp_name;
37335 
37336 	SAVE_OPLINE();
37337 	object = &EX(This);
37338 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37339 
37340 	do {
37341 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
37342 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
37343 				object = Z_REFVAL_P(object);
37344 				goto pre_incdec_object;
37345 			}
37346 			if (IS_UNUSED == IS_CV
37347 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
37348 				ZVAL_UNDEFINED_OP1();
37349 			}
37350 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
37351 			break;
37352 		}
37353 
37354 pre_incdec_object:
37355 		/* here we are sure we are dealing with an object */
37356 		zobj = Z_OBJ_P(object);
37357 		if (IS_CV == IS_CONST) {
37358 			name = Z_STR_P(property);
37359 		} else {
37360 			name = zval_try_get_tmp_string(property, &tmp_name);
37361 			if (UNEXPECTED(!name)) {
37362 				UNDEF_RESULT();
37363 				break;
37364 			}
37365 		}
37366 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
37367 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
37368 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
37369 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37370 					ZVAL_NULL(EX_VAR(opline->result.var));
37371 				}
37372 			} else {
37373 				if (IS_CV == IS_CONST) {
37374 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
37375 				} else {
37376 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
37377 				}
37378 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
37379 			}
37380 		} else {
37381 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
37382 		}
37383 		if (IS_CV != IS_CONST) {
37384 			zend_tmp_string_release(tmp_name);
37385 		}
37386 	} while (0);
37387 
37388 
37389 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37390 }
37391 
ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37392 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37393 {
37394 	USE_OPLINE
37395 	zval *object;
37396 	zval *property;
37397 	zval *zptr;
37398 	void **cache_slot;
37399 	zend_property_info *prop_info;
37400 	zend_object *zobj;
37401 	zend_string *name, *tmp_name;
37402 
37403 	SAVE_OPLINE();
37404 	object = &EX(This);
37405 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37406 
37407 	do {
37408 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
37409 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
37410 				object = Z_REFVAL_P(object);
37411 				goto post_incdec_object;
37412 			}
37413 			if (IS_UNUSED == IS_CV
37414 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
37415 				ZVAL_UNDEFINED_OP1();
37416 			}
37417 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
37418 			break;
37419 		}
37420 
37421 post_incdec_object:
37422 		/* here we are sure we are dealing with an object */
37423 		zobj = Z_OBJ_P(object);
37424 		if (IS_CV == IS_CONST) {
37425 			name = Z_STR_P(property);
37426 		} else {
37427 			name = zval_try_get_tmp_string(property, &tmp_name);
37428 			if (UNEXPECTED(!name)) {
37429 				ZVAL_UNDEF(EX_VAR(opline->result.var));
37430 				break;
37431 			}
37432 		}
37433 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
37434 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
37435 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
37436 				ZVAL_NULL(EX_VAR(opline->result.var));
37437 			} else {
37438 				if (IS_CV == IS_CONST) {
37439 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
37440 				} else {
37441 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
37442 				}
37443 
37444 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
37445 			}
37446 		} else {
37447 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
37448 		}
37449 		if (IS_CV != IS_CONST) {
37450 			zend_tmp_string_release(tmp_name);
37451 		}
37452 	} while (0);
37453 
37454 
37455 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37456 }
37457 
ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37458 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37459 {
37460 	USE_OPLINE
37461 	zval *container;
37462 	void **cache_slot = NULL;
37463 
37464 	SAVE_OPLINE();
37465 	container = &EX(This);
37466 
37467 	if (IS_UNUSED == IS_CONST ||
37468 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
37469 		do {
37470 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
37471 				container = Z_REFVAL_P(container);
37472 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
37473 					break;
37474 				}
37475 			}
37476 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
37477 				ZVAL_UNDEFINED_OP1();
37478 			}
37479 			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37480 			ZVAL_NULL(EX_VAR(opline->result.var));
37481 			goto fetch_obj_r_finish;
37482 		} while (0);
37483 	}
37484 
37485 	/* here we are sure we are dealing with an object */
37486 	do {
37487 		zend_object *zobj = Z_OBJ_P(container);
37488 		zend_string *name, *tmp_name;
37489 		zval *retval;
37490 
37491 		if (IS_CV == IS_CONST) {
37492 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
37493 
37494 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
37495 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
37496 
37497 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
37498 					retval = OBJ_PROP(zobj, prop_offset);
37499 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
37500 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
37501 							goto fetch_obj_r_copy;
37502 						} else {
37503 fetch_obj_r_fast_copy:
37504 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
37505 							ZEND_VM_NEXT_OPCODE();
37506 						}
37507 					}
37508 				} else if (EXPECTED(zobj->properties != NULL)) {
37509 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37510 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
37511 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
37512 
37513 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
37514 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
37515 
37516 							if (EXPECTED(p->key == name) ||
37517 							    (EXPECTED(p->h == ZSTR_H(name)) &&
37518 							     EXPECTED(p->key != NULL) &&
37519 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
37520 								retval = &p->val;
37521 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
37522 									goto fetch_obj_r_copy;
37523 								} else {
37524 									goto fetch_obj_r_fast_copy;
37525 								}
37526 							}
37527 						}
37528 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
37529 					}
37530 					retval = zend_hash_find_known_hash(zobj->properties, name);
37531 					if (EXPECTED(retval)) {
37532 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
37533 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
37534 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
37535 							goto fetch_obj_r_copy;
37536 						} else {
37537 							goto fetch_obj_r_fast_copy;
37538 						}
37539 					}
37540 				}
37541 			}
37542 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37543 		} else {
37544 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
37545 			if (UNEXPECTED(!name)) {
37546 				ZVAL_UNDEF(EX_VAR(opline->result.var));
37547 				break;
37548 			}
37549 		}
37550 
37551 #if ZEND_DEBUG
37552 		/* For non-standard object handlers, verify a declared property type in debug builds.
37553 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
37554 		zend_property_info *prop_info = NULL;
37555 		if (zobj->handlers->read_property != zend_std_read_property) {
37556 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
37557 		}
37558 #endif
37559 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
37560 #if ZEND_DEBUG
37561 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
37562 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
37563 			ZVAL_OPT_DEREF(retval);
37564 			zend_verify_property_type(prop_info, retval, /* strict */ true);
37565 		}
37566 #endif
37567 
37568 		if (IS_CV != IS_CONST) {
37569 			zend_tmp_string_release(tmp_name);
37570 		}
37571 
37572 		if (retval != EX_VAR(opline->result.var)) {
37573 fetch_obj_r_copy:
37574 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
37575 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
37576 			zend_unwrap_reference(retval);
37577 		}
37578 	} while (0);
37579 
37580 fetch_obj_r_finish:
37581 
37582 
37583 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37584 }
37585 
ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37586 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37587 {
37588 	USE_OPLINE
37589 	zval *property, *container, *result;
37590 
37591 	SAVE_OPLINE();
37592 
37593 	container = &EX(This);
37594 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37595 	result = EX_VAR(opline->result.var);
37596 	zend_fetch_property_address(
37597 		result, container, IS_UNUSED, property, IS_CV,
37598 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
37599 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
37600 
37601 	if (IS_UNUSED == IS_VAR) {
37602 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
37603 	}
37604 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37605 }
37606 
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37607 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37608 {
37609 	USE_OPLINE
37610 	zval *property, *container, *result;
37611 
37612 	SAVE_OPLINE();
37613 	container = &EX(This);
37614 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37615 	result = EX_VAR(opline->result.var);
37616 	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
37617 
37618 	if (IS_UNUSED == IS_VAR) {
37619 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
37620 	}
37621 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37622 }
37623 
ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37624 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37625 {
37626 	USE_OPLINE
37627 	zval *container;
37628 	void **cache_slot = NULL;
37629 
37630 	SAVE_OPLINE();
37631 	container = &EX(This);
37632 
37633 	if (IS_UNUSED == IS_CONST ||
37634 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
37635 		do {
37636 			if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
37637 				container = Z_REFVAL_P(container);
37638 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
37639 					break;
37640 				}
37641 			}
37642 			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
37643 				ZVAL_UNDEFINED_OP2();
37644 			}
37645 			ZVAL_NULL(EX_VAR(opline->result.var));
37646 			goto fetch_obj_is_finish;
37647 		} while (0);
37648 	}
37649 
37650 	/* here we are sure we are dealing with an object */
37651 	do {
37652 		zend_object *zobj = Z_OBJ_P(container);
37653 		zend_string *name, *tmp_name;
37654 		zval *retval;
37655 
37656 		if (IS_CV == IS_CONST) {
37657 			cache_slot = CACHE_ADDR(opline->extended_value);
37658 
37659 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
37660 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
37661 
37662 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
37663 					retval = OBJ_PROP(zobj, prop_offset);
37664 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
37665 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
37666 							goto fetch_obj_is_copy;
37667 						} else {
37668 fetch_obj_is_fast_copy:
37669 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
37670 							ZEND_VM_NEXT_OPCODE();
37671 						}
37672 					}
37673 				} else if (EXPECTED(zobj->properties != NULL)) {
37674 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37675 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
37676 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
37677 
37678 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
37679 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
37680 
37681 							if (EXPECTED(p->key == name) ||
37682 							    (EXPECTED(p->h == ZSTR_H(name)) &&
37683 							     EXPECTED(p->key != NULL) &&
37684 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
37685 								retval = &p->val;
37686 								if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
37687 									goto fetch_obj_is_copy;
37688 								} else {
37689 									goto fetch_obj_is_fast_copy;
37690 								}
37691 							}
37692 						}
37693 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
37694 					}
37695 					retval = zend_hash_find_known_hash(zobj->properties, name);
37696 					if (EXPECTED(retval)) {
37697 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
37698 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
37699 						if (0 || (IS_UNUSED & (IS_TMP_VAR|IS_VAR)) != 0) {
37700 							goto fetch_obj_is_copy;
37701 						} else {
37702 							goto fetch_obj_is_fast_copy;
37703 						}
37704 					}
37705 				}
37706 			}
37707 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37708 		} else {
37709 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
37710 			if (UNEXPECTED(!name)) {
37711 				ZVAL_UNDEF(EX_VAR(opline->result.var));
37712 				break;
37713 			}
37714 		}
37715 
37716 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
37717 
37718 		if (IS_CV != IS_CONST) {
37719 			zend_tmp_string_release(tmp_name);
37720 		}
37721 
37722 		if (retval != EX_VAR(opline->result.var)) {
37723 fetch_obj_is_copy:
37724 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
37725 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
37726 			zend_unwrap_reference(retval);
37727 		}
37728 	} while (0);
37729 
37730 fetch_obj_is_finish:
37731 
37732 
37733 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37734 }
37735 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37736 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37737 {
37738 #if 0
37739 	USE_OPLINE
37740 #endif
37741 
37742 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
37743 		/* Behave like FETCH_OBJ_W */
37744 		if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
37745 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37746 		}
37747 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37748 	} else {
37749 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
37750 	}
37751 }
37752 
ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37753 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37754 {
37755 	USE_OPLINE
37756 	zval *container, *property, *result;
37757 
37758 	SAVE_OPLINE();
37759 	container = &EX(This);
37760 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
37761 	result = EX_VAR(opline->result.var);
37762 	zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0 OPLINE_CC EXECUTE_DATA_CC);
37763 
37764 	if (IS_UNUSED == IS_VAR) {
37765 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
37766 	}
37767 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
37768 }
37769 
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)37770 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37771 {
37772 	USE_OPLINE
37773 	zval *object, *value, tmp;
37774 	zend_object *zobj;
37775 	zend_string *name, *tmp_name;
37776 	zend_refcounted *garbage = NULL;
37777 
37778 	SAVE_OPLINE();
37779 	object = &EX(This);
37780 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
37781 
37782 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
37783 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
37784 			object = Z_REFVAL_P(object);
37785 			goto assign_object;
37786 		}
37787 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
37788 		value = &EG(uninitialized_zval);
37789 		goto free_and_exit_assign_obj;
37790 	}
37791 
37792 assign_object:
37793 	zobj = Z_OBJ_P(object);
37794 	if (IS_CV == IS_CONST) {
37795 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
37796 			void **cache_slot = CACHE_ADDR(opline->extended_value);
37797 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
37798 			zval *property_val;
37799 
37800 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
37801 				property_val = OBJ_PROP(zobj, prop_offset);
37802 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
37803 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
37804 
37805 					if (UNEXPECTED(prop_info != NULL)) {
37806 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
37807 						goto free_and_exit_assign_obj;
37808 					} else {
37809 fast_assign_obj:
37810 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
37811 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37812 							ZVAL_COPY(EX_VAR(opline->result.var), value);
37813 						}
37814 						goto exit_assign_obj;
37815 					}
37816 				}
37817 			} else {
37818 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37819 				if (EXPECTED(zobj->properties != NULL)) {
37820 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
37821 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
37822 							GC_DELREF(zobj->properties);
37823 						}
37824 						zobj->properties = zend_array_dup(zobj->properties);
37825 					}
37826 					property_val = zend_hash_find_known_hash(zobj->properties, name);
37827 					if (property_val) {
37828 						goto fast_assign_obj;
37829 					}
37830 				}
37831 
37832 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
37833 					if (EXPECTED(zobj->properties == NULL)) {
37834 						rebuild_object_properties(zobj);
37835 					}
37836 					if (IS_CONST == IS_CONST) {
37837 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
37838 							Z_ADDREF_P(value);
37839 						}
37840 					} else if (IS_CONST != IS_TMP_VAR) {
37841 						if (Z_ISREF_P(value)) {
37842 							if (IS_CONST == IS_VAR) {
37843 								zend_reference *ref = Z_REF_P(value);
37844 								if (GC_DELREF(ref) == 0) {
37845 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
37846 									efree_size(ref, sizeof(zend_reference));
37847 									value = &tmp;
37848 								} else {
37849 									value = Z_REFVAL_P(value);
37850 									Z_TRY_ADDREF_P(value);
37851 								}
37852 							} else {
37853 								value = Z_REFVAL_P(value);
37854 								Z_TRY_ADDREF_P(value);
37855 							}
37856 						} else if (IS_CONST == IS_CV) {
37857 							Z_TRY_ADDREF_P(value);
37858 						}
37859 						}
37860 					zend_hash_add_new(zobj->properties, name, value);
37861 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37862 						ZVAL_COPY(EX_VAR(opline->result.var), value);
37863 					}
37864 					goto exit_assign_obj;
37865 				}
37866 			}
37867 		}
37868 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37869 	} else {
37870 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
37871 		if (UNEXPECTED(!name)) {
37872 
37873 			UNDEF_RESULT();
37874 			goto exit_assign_obj;
37875 		}
37876 	}
37877 
37878 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
37879 		ZVAL_DEREF(value);
37880 	}
37881 
37882 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
37883 
37884 	if (IS_CV != IS_CONST) {
37885 		zend_tmp_string_release(tmp_name);
37886 	}
37887 
37888 free_and_exit_assign_obj:
37889 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
37890 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
37891 	}
37892 
37893 exit_assign_obj:
37894 	if (garbage) {
37895 		GC_DTOR_NO_REF(garbage);
37896 	}
37897 
37898 
37899 	/* assign_obj has two opcodes! */
37900 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
37901 }
37902 
37903 /* 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)37904 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
37905 {
37906 	USE_OPLINE
37907 	zval *object, *value, tmp;
37908 	zend_object *zobj;
37909 	zend_string *name, *tmp_name;
37910 	zend_refcounted *garbage = NULL;
37911 
37912 	SAVE_OPLINE();
37913 	object = &EX(This);
37914 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
37915 
37916 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
37917 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
37918 			object = Z_REFVAL_P(object);
37919 			goto assign_object;
37920 		}
37921 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
37922 		value = &EG(uninitialized_zval);
37923 		goto free_and_exit_assign_obj;
37924 	}
37925 
37926 assign_object:
37927 	zobj = Z_OBJ_P(object);
37928 	if (IS_CV == IS_CONST) {
37929 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
37930 			void **cache_slot = CACHE_ADDR(opline->extended_value);
37931 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
37932 			zval *property_val;
37933 
37934 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
37935 				property_val = OBJ_PROP(zobj, prop_offset);
37936 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
37937 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
37938 
37939 					if (UNEXPECTED(prop_info != NULL)) {
37940 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
37941 						goto free_and_exit_assign_obj;
37942 					} else {
37943 fast_assign_obj:
37944 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
37945 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37946 							ZVAL_COPY(EX_VAR(opline->result.var), value);
37947 						}
37948 						goto exit_assign_obj;
37949 					}
37950 				}
37951 			} else {
37952 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
37953 				if (EXPECTED(zobj->properties != NULL)) {
37954 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
37955 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
37956 							GC_DELREF(zobj->properties);
37957 						}
37958 						zobj->properties = zend_array_dup(zobj->properties);
37959 					}
37960 					property_val = zend_hash_find_known_hash(zobj->properties, name);
37961 					if (property_val) {
37962 						goto fast_assign_obj;
37963 					}
37964 				}
37965 
37966 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
37967 					if (EXPECTED(zobj->properties == NULL)) {
37968 						rebuild_object_properties(zobj);
37969 					}
37970 					if (IS_TMP_VAR == IS_CONST) {
37971 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
37972 							Z_ADDREF_P(value);
37973 						}
37974 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
37975 						if (Z_ISREF_P(value)) {
37976 							if (IS_TMP_VAR == IS_VAR) {
37977 								zend_reference *ref = Z_REF_P(value);
37978 								if (GC_DELREF(ref) == 0) {
37979 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
37980 									efree_size(ref, sizeof(zend_reference));
37981 									value = &tmp;
37982 								} else {
37983 									value = Z_REFVAL_P(value);
37984 									Z_TRY_ADDREF_P(value);
37985 								}
37986 							} else {
37987 								value = Z_REFVAL_P(value);
37988 								Z_TRY_ADDREF_P(value);
37989 							}
37990 						} else if (IS_TMP_VAR == IS_CV) {
37991 							Z_TRY_ADDREF_P(value);
37992 						}
37993 						}
37994 					zend_hash_add_new(zobj->properties, name, value);
37995 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
37996 						ZVAL_COPY(EX_VAR(opline->result.var), value);
37997 					}
37998 					goto exit_assign_obj;
37999 				}
38000 			}
38001 		}
38002 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
38003 	} else {
38004 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
38005 		if (UNEXPECTED(!name)) {
38006 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
38007 			UNDEF_RESULT();
38008 			goto exit_assign_obj;
38009 		}
38010 	}
38011 
38012 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
38013 		ZVAL_DEREF(value);
38014 	}
38015 
38016 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
38017 
38018 	if (IS_CV != IS_CONST) {
38019 		zend_tmp_string_release(tmp_name);
38020 	}
38021 
38022 free_and_exit_assign_obj:
38023 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
38024 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
38025 	}
38026 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
38027 exit_assign_obj:
38028 	if (garbage) {
38029 		GC_DTOR_NO_REF(garbage);
38030 	}
38031 
38032 
38033 	/* assign_obj has two opcodes! */
38034 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38035 }
38036 
38037 /* 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)38038 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38039 {
38040 	USE_OPLINE
38041 	zval *object, *value, tmp;
38042 	zend_object *zobj;
38043 	zend_string *name, *tmp_name;
38044 	zend_refcounted *garbage = NULL;
38045 
38046 	SAVE_OPLINE();
38047 	object = &EX(This);
38048 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
38049 
38050 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
38051 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
38052 			object = Z_REFVAL_P(object);
38053 			goto assign_object;
38054 		}
38055 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
38056 		value = &EG(uninitialized_zval);
38057 		goto free_and_exit_assign_obj;
38058 	}
38059 
38060 assign_object:
38061 	zobj = Z_OBJ_P(object);
38062 	if (IS_CV == IS_CONST) {
38063 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
38064 			void **cache_slot = CACHE_ADDR(opline->extended_value);
38065 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
38066 			zval *property_val;
38067 
38068 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
38069 				property_val = OBJ_PROP(zobj, prop_offset);
38070 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
38071 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
38072 
38073 					if (UNEXPECTED(prop_info != NULL)) {
38074 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
38075 						goto free_and_exit_assign_obj;
38076 					} else {
38077 fast_assign_obj:
38078 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
38079 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38080 							ZVAL_COPY(EX_VAR(opline->result.var), value);
38081 						}
38082 						goto exit_assign_obj;
38083 					}
38084 				}
38085 			} else {
38086 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
38087 				if (EXPECTED(zobj->properties != NULL)) {
38088 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
38089 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
38090 							GC_DELREF(zobj->properties);
38091 						}
38092 						zobj->properties = zend_array_dup(zobj->properties);
38093 					}
38094 					property_val = zend_hash_find_known_hash(zobj->properties, name);
38095 					if (property_val) {
38096 						goto fast_assign_obj;
38097 					}
38098 				}
38099 
38100 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
38101 					if (EXPECTED(zobj->properties == NULL)) {
38102 						rebuild_object_properties(zobj);
38103 					}
38104 					if (IS_VAR == IS_CONST) {
38105 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
38106 							Z_ADDREF_P(value);
38107 						}
38108 					} else if (IS_VAR != IS_TMP_VAR) {
38109 						if (Z_ISREF_P(value)) {
38110 							if (IS_VAR == IS_VAR) {
38111 								zend_reference *ref = Z_REF_P(value);
38112 								if (GC_DELREF(ref) == 0) {
38113 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
38114 									efree_size(ref, sizeof(zend_reference));
38115 									value = &tmp;
38116 								} else {
38117 									value = Z_REFVAL_P(value);
38118 									Z_TRY_ADDREF_P(value);
38119 								}
38120 							} else {
38121 								value = Z_REFVAL_P(value);
38122 								Z_TRY_ADDREF_P(value);
38123 							}
38124 						} else if (IS_VAR == IS_CV) {
38125 							Z_TRY_ADDREF_P(value);
38126 						}
38127 						}
38128 					zend_hash_add_new(zobj->properties, name, value);
38129 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38130 						ZVAL_COPY(EX_VAR(opline->result.var), value);
38131 					}
38132 					goto exit_assign_obj;
38133 				}
38134 			}
38135 		}
38136 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
38137 	} else {
38138 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
38139 		if (UNEXPECTED(!name)) {
38140 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
38141 			UNDEF_RESULT();
38142 			goto exit_assign_obj;
38143 		}
38144 	}
38145 
38146 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
38147 		ZVAL_DEREF(value);
38148 	}
38149 
38150 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
38151 
38152 	if (IS_CV != IS_CONST) {
38153 		zend_tmp_string_release(tmp_name);
38154 	}
38155 
38156 free_and_exit_assign_obj:
38157 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
38158 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
38159 	}
38160 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
38161 exit_assign_obj:
38162 	if (garbage) {
38163 		GC_DTOR_NO_REF(garbage);
38164 	}
38165 
38166 
38167 	/* assign_obj has two opcodes! */
38168 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38169 }
38170 
38171 /* 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)38172 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38173 {
38174 	USE_OPLINE
38175 	zval *object, *value, tmp;
38176 	zend_object *zobj;
38177 	zend_string *name, *tmp_name;
38178 	zend_refcounted *garbage = NULL;
38179 
38180 	SAVE_OPLINE();
38181 	object = &EX(This);
38182 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
38183 
38184 	if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
38185 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
38186 			object = Z_REFVAL_P(object);
38187 			goto assign_object;
38188 		}
38189 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
38190 		value = &EG(uninitialized_zval);
38191 		goto free_and_exit_assign_obj;
38192 	}
38193 
38194 assign_object:
38195 	zobj = Z_OBJ_P(object);
38196 	if (IS_CV == IS_CONST) {
38197 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
38198 			void **cache_slot = CACHE_ADDR(opline->extended_value);
38199 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
38200 			zval *property_val;
38201 
38202 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
38203 				property_val = OBJ_PROP(zobj, prop_offset);
38204 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
38205 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
38206 
38207 					if (UNEXPECTED(prop_info != NULL)) {
38208 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
38209 						goto free_and_exit_assign_obj;
38210 					} else {
38211 fast_assign_obj:
38212 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
38213 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38214 							ZVAL_COPY(EX_VAR(opline->result.var), value);
38215 						}
38216 						goto exit_assign_obj;
38217 					}
38218 				}
38219 			} else {
38220 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
38221 				if (EXPECTED(zobj->properties != NULL)) {
38222 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
38223 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
38224 							GC_DELREF(zobj->properties);
38225 						}
38226 						zobj->properties = zend_array_dup(zobj->properties);
38227 					}
38228 					property_val = zend_hash_find_known_hash(zobj->properties, name);
38229 					if (property_val) {
38230 						goto fast_assign_obj;
38231 					}
38232 				}
38233 
38234 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
38235 					if (EXPECTED(zobj->properties == NULL)) {
38236 						rebuild_object_properties(zobj);
38237 					}
38238 					if (IS_CV == IS_CONST) {
38239 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
38240 							Z_ADDREF_P(value);
38241 						}
38242 					} else if (IS_CV != IS_TMP_VAR) {
38243 						if (Z_ISREF_P(value)) {
38244 							if (IS_CV == IS_VAR) {
38245 								zend_reference *ref = Z_REF_P(value);
38246 								if (GC_DELREF(ref) == 0) {
38247 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
38248 									efree_size(ref, sizeof(zend_reference));
38249 									value = &tmp;
38250 								} else {
38251 									value = Z_REFVAL_P(value);
38252 									Z_TRY_ADDREF_P(value);
38253 								}
38254 							} else {
38255 								value = Z_REFVAL_P(value);
38256 								Z_TRY_ADDREF_P(value);
38257 							}
38258 						} else if (IS_CV == IS_CV) {
38259 							Z_TRY_ADDREF_P(value);
38260 						}
38261 						}
38262 					zend_hash_add_new(zobj->properties, name, value);
38263 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
38264 						ZVAL_COPY(EX_VAR(opline->result.var), value);
38265 					}
38266 					goto exit_assign_obj;
38267 				}
38268 			}
38269 		}
38270 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
38271 	} else {
38272 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
38273 		if (UNEXPECTED(!name)) {
38274 
38275 			UNDEF_RESULT();
38276 			goto exit_assign_obj;
38277 		}
38278 	}
38279 
38280 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
38281 		ZVAL_DEREF(value);
38282 	}
38283 
38284 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
38285 
38286 	if (IS_CV != IS_CONST) {
38287 		zend_tmp_string_release(tmp_name);
38288 	}
38289 
38290 free_and_exit_assign_obj:
38291 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
38292 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
38293 	}
38294 
38295 exit_assign_obj:
38296 	if (garbage) {
38297 		GC_DTOR_NO_REF(garbage);
38298 	}
38299 
38300 
38301 	/* assign_obj has two opcodes! */
38302 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38303 }
38304 
38305 /* 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)38306 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38307 {
38308 	USE_OPLINE
38309 	zval *property, *container, *value_ptr;
38310 
38311 	SAVE_OPLINE();
38312 
38313 	container = &EX(This);
38314 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
38315 
38316 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
38317 
38318 	if (1) {
38319 		if (IS_UNUSED == IS_UNUSED) {
38320 			if (IS_CV == IS_CONST) {
38321 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38322 			} else {
38323 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38324 			}
38325 		} else {
38326 			if (IS_CV == IS_CONST) {
38327 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38328 			} else {
38329 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38330 			}
38331 		}
38332 	} else {
38333 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38334 	}
38335 
38336 
38337 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
38338 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38339 }
38340 
38341 /* 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)38342 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38343 {
38344 	USE_OPLINE
38345 	zval *property, *container, *value_ptr;
38346 
38347 	SAVE_OPLINE();
38348 
38349 	container = &EX(This);
38350 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
38351 
38352 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
38353 
38354 	if (1) {
38355 		if (IS_UNUSED == IS_UNUSED) {
38356 			if (IS_CV == IS_CONST) {
38357 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38358 			} else {
38359 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38360 			}
38361 		} else {
38362 			if (IS_CV == IS_CONST) {
38363 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38364 			} else {
38365 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38366 			}
38367 		}
38368 	} else {
38369 		zend_assign_to_property_reference(container, IS_UNUSED, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
38370 	}
38371 
38372 
38373 
38374 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
38375 }
38376 
38377 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38378 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38379 {
38380 	USE_OPLINE
38381 	zend_string **rope;
38382 	zval *var;
38383 
38384 	/* Compiler allocates the necessary number of zval slots to keep the rope */
38385 	rope = (zend_string**)EX_VAR(opline->result.var);
38386 	if (IS_CV == IS_CONST) {
38387 		var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
38388 		rope[0] = Z_STR_P(var);
38389 		if (UNEXPECTED(Z_REFCOUNTED_P(var))) {
38390 			Z_ADDREF_P(var);
38391 		}
38392 	} else {
38393 		var = EX_VAR(opline->op2.var);
38394 		if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
38395 			if (IS_CV == IS_CV) {
38396 				rope[0] = zend_string_copy(Z_STR_P(var));
38397 			} else {
38398 				rope[0] = Z_STR_P(var);
38399 			}
38400 		} else {
38401 			SAVE_OPLINE();
38402 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
38403 				ZVAL_UNDEFINED_OP2();
38404 			}
38405 			rope[0] = zval_get_string_func(var);
38406 
38407 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38408 		}
38409 	}
38410 	ZEND_VM_NEXT_OPCODE();
38411 }
38412 
ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38413 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38414 {
38415 	zval *class_name;
38416 	USE_OPLINE
38417 
38418 	SAVE_OPLINE();
38419 	if (IS_CV == IS_UNUSED) {
38420 		Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num);
38421 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38422 	} else if (IS_CV == IS_CONST) {
38423 		zend_class_entry *ce = CACHED_PTR(opline->extended_value);
38424 
38425 		if (UNEXPECTED(ce == NULL)) {
38426 			class_name = EX_VAR(opline->op2.var);
38427 			ce = zend_fetch_class_by_name(Z_STR_P(class_name), Z_STR_P(class_name + 1), opline->op1.num);
38428 			CACHE_PTR(opline->extended_value, ce);
38429 		}
38430 		Z_CE_P(EX_VAR(opline->result.var)) = ce;
38431 	} else {
38432 		class_name = EX_VAR(opline->op2.var);
38433 try_class_name:
38434 		if (Z_TYPE_P(class_name) == IS_OBJECT) {
38435 			Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name);
38436 		} else if (Z_TYPE_P(class_name) == IS_STRING) {
38437 			Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num);
38438 		} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) {
38439 			class_name = Z_REFVAL_P(class_name);
38440 			goto try_class_name;
38441 		} else {
38442 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
38443 				ZVAL_UNDEFINED_OP2();
38444 				if (UNEXPECTED(EG(exception) != NULL)) {
38445 					HANDLE_EXCEPTION();
38446 				}
38447 			}
38448 			zend_throw_error(NULL, "Class name must be a valid object or a string");
38449 		}
38450 	}
38451 
38452 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38453 }
38454 
ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38455 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38456 {
38457 	USE_OPLINE
38458 	zval *function_name;
38459 	zval *object;
38460 	zend_function *fbc;
38461 	zend_class_entry *called_scope;
38462 	zend_object *obj;
38463 	zend_execute_data *call;
38464 	uint32_t call_info;
38465 
38466 	SAVE_OPLINE();
38467 
38468 	object = &EX(This);
38469 
38470 	if (IS_CV != IS_CONST) {
38471 		function_name = EX_VAR(opline->op2.var);
38472 	}
38473 
38474 	if (IS_CV != IS_CONST &&
38475 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
38476 		do {
38477 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
38478 				function_name = Z_REFVAL_P(function_name);
38479 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
38480 					break;
38481 				}
38482 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
38483 				ZVAL_UNDEFINED_OP2();
38484 				if (UNEXPECTED(EG(exception) != NULL)) {
38485 
38486 					HANDLE_EXCEPTION();
38487 				}
38488 			}
38489 			zend_throw_error(NULL, "Method name must be a string");
38490 
38491 
38492 			HANDLE_EXCEPTION();
38493 		} while (0);
38494 	}
38495 
38496 	if (IS_UNUSED == IS_UNUSED) {
38497 		obj = Z_OBJ_P(object);
38498 	} else {
38499 		do {
38500 			if (IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
38501 				obj = Z_OBJ_P(object);
38502 			} else {
38503 				if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
38504 					zend_reference *ref = Z_REF_P(object);
38505 
38506 					object = &ref->val;
38507 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
38508 						obj = Z_OBJ_P(object);
38509 						if (IS_UNUSED & IS_VAR) {
38510 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
38511 								efree_size(ref, sizeof(zend_reference));
38512 							} else {
38513 								Z_ADDREF_P(object);
38514 							}
38515 						}
38516 						break;
38517 					}
38518 				}
38519 				if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
38520 					object = ZVAL_UNDEFINED_OP1();
38521 					if (UNEXPECTED(EG(exception) != NULL)) {
38522 						if (IS_CV != IS_CONST) {
38523 
38524 						}
38525 						HANDLE_EXCEPTION();
38526 					}
38527 				}
38528 				if (IS_CV == IS_CONST) {
38529 					function_name = EX_VAR(opline->op2.var);
38530 				}
38531 				zend_invalid_method_call(object, function_name);
38532 
38533 
38534 				HANDLE_EXCEPTION();
38535 			}
38536 		} while (0);
38537 	}
38538 
38539 	called_scope = obj->ce;
38540 
38541 	if (IS_CV == IS_CONST &&
38542 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
38543 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
38544 	} else {
38545 		zend_object *orig_obj = obj;
38546 
38547 		if (IS_CV == IS_CONST) {
38548 			function_name = EX_VAR(opline->op2.var);
38549 		}
38550 
38551 		/* First, locate the function. */
38552 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
38553 		if (UNEXPECTED(fbc == NULL)) {
38554 			if (EXPECTED(!EG(exception))) {
38555 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
38556 			}
38557 
38558 			if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
38559 				zend_objects_store_del(orig_obj);
38560 			}
38561 			HANDLE_EXCEPTION();
38562 		}
38563 		if (IS_CV == IS_CONST &&
38564 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
38565 		    EXPECTED(obj == orig_obj)) {
38566 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
38567 		}
38568 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
38569 			GC_ADDREF(obj); /* For $this pointer */
38570 			if (GC_DELREF(orig_obj) == 0) {
38571 				zend_objects_store_del(orig_obj);
38572 			}
38573 		}
38574 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
38575 			init_func_run_time_cache(&fbc->op_array);
38576 		}
38577 	}
38578 
38579 	if (IS_CV != IS_CONST) {
38580 
38581 	}
38582 
38583 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
38584 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
38585 		if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
38586 			zend_objects_store_del(obj);
38587 			if (UNEXPECTED(EG(exception))) {
38588 				HANDLE_EXCEPTION();
38589 			}
38590 		}
38591 		/* call static method */
38592 		obj = (zend_object*)called_scope;
38593 		call_info = ZEND_CALL_NESTED_FUNCTION;
38594 	} else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) {
38595 		if (IS_UNUSED == IS_CV) {
38596 			GC_ADDREF(obj); /* For $this pointer */
38597 		}
38598 		/* CV may be changed indirectly (e.g. when it's a reference) */
38599 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
38600 	}
38601 
38602 	call = zend_vm_stack_push_call_frame(call_info,
38603 		fbc, opline->extended_value, obj);
38604 	call->prev_execute_data = EX(call);
38605 	EX(call) = call;
38606 
38607 	ZEND_VM_NEXT_OPCODE();
38608 }
38609 
ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38610 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38611 {
38612 	USE_OPLINE
38613 	zval *function_name;
38614 	zend_class_entry *ce;
38615 	uint32_t call_info;
38616 	zend_function *fbc;
38617 	zend_execute_data *call;
38618 
38619 	SAVE_OPLINE();
38620 
38621 	if (IS_UNUSED == IS_CONST) {
38622 		/* no function found. try a static method in class */
38623 		ce = CACHED_PTR(opline->result.num);
38624 		if (UNEXPECTED(ce == NULL)) {
38625 			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);
38626 			if (UNEXPECTED(ce == NULL)) {
38627 
38628 				HANDLE_EXCEPTION();
38629 			}
38630 			if (IS_CV != IS_CONST) {
38631 				CACHE_PTR(opline->result.num, ce);
38632 			}
38633 		}
38634 	} else if (IS_UNUSED == IS_UNUSED) {
38635 		ce = zend_fetch_class(NULL, opline->op1.num);
38636 		if (UNEXPECTED(ce == NULL)) {
38637 
38638 			HANDLE_EXCEPTION();
38639 		}
38640 	} else {
38641 		ce = Z_CE_P(EX_VAR(opline->op1.var));
38642 	}
38643 
38644 	if (IS_UNUSED == IS_CONST &&
38645 	    IS_CV == IS_CONST &&
38646 	    EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) {
38647 		/* nothing to do */
38648 	} else if (IS_UNUSED != IS_CONST &&
38649 	           IS_CV == IS_CONST &&
38650 	           EXPECTED(CACHED_PTR(opline->result.num) == ce)) {
38651 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
38652 	} else if (IS_CV != IS_UNUSED) {
38653 		function_name = EX_VAR(opline->op2.var);
38654 		if (IS_CV != IS_CONST) {
38655 			if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
38656 				do {
38657 					if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) {
38658 						function_name = Z_REFVAL_P(function_name);
38659 						if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
38660 							break;
38661 						}
38662 					} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
38663 						ZVAL_UNDEFINED_OP2();
38664 						if (UNEXPECTED(EG(exception) != NULL)) {
38665 							HANDLE_EXCEPTION();
38666 						}
38667 					}
38668 					zend_throw_error(NULL, "Method name must be a string");
38669 
38670 					HANDLE_EXCEPTION();
38671 				} while (0);
38672 			}
38673 		}
38674 
38675 		if (ce->get_static_method) {
38676 			fbc = ce->get_static_method(ce, Z_STR_P(function_name));
38677 		} else {
38678 			fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
38679 		}
38680 		if (UNEXPECTED(fbc == NULL)) {
38681 			if (EXPECTED(!EG(exception))) {
38682 				zend_undefined_method(ce, Z_STR_P(function_name));
38683 			}
38684 
38685 			HANDLE_EXCEPTION();
38686 		}
38687 		if (IS_CV == IS_CONST &&
38688 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
38689 			EXPECTED(!(fbc->common.scope->ce_flags & ZEND_ACC_TRAIT))) {
38690 			CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc);
38691 		}
38692 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
38693 			init_func_run_time_cache(&fbc->op_array);
38694 		}
38695 		if (IS_CV != IS_CONST) {
38696 
38697 		}
38698 	} else {
38699 		if (UNEXPECTED(ce->constructor == NULL)) {
38700 			zend_throw_error(NULL, "Cannot call constructor");
38701 			HANDLE_EXCEPTION();
38702 		}
38703 		if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
38704 			zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name));
38705 			HANDLE_EXCEPTION();
38706 		}
38707 		fbc = ce->constructor;
38708 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
38709 			init_func_run_time_cache(&fbc->op_array);
38710 		}
38711 	}
38712 
38713 	if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) {
38714 		if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) {
38715 			ce = (zend_class_entry*)Z_OBJ(EX(This));
38716 			call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
38717 		} else {
38718 			zend_non_static_method_call(fbc);
38719 			HANDLE_EXCEPTION();
38720 		}
38721 	} else {
38722 		/* previous opcode is ZEND_FETCH_CLASS */
38723 		if (IS_UNUSED == IS_UNUSED
38724 		 && ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT ||
38725 		     (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF)) {
38726 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
38727 				ce = Z_OBJCE(EX(This));
38728 			} else {
38729 				ce = Z_CE(EX(This));
38730 			}
38731 		}
38732 		call_info = ZEND_CALL_NESTED_FUNCTION;
38733 	}
38734 
38735 	call = zend_vm_stack_push_call_frame(call_info,
38736 		fbc, opline->extended_value, ce);
38737 	call->prev_execute_data = EX(call);
38738 	EX(call) = call;
38739 
38740 	ZEND_VM_NEXT_OPCODE();
38741 }
38742 
ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38743 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38744 {
38745 	zval *array;
38746 	uint32_t size;
38747 	USE_OPLINE
38748 
38749 	array = EX_VAR(opline->result.var);
38750 	if (IS_UNUSED != IS_UNUSED) {
38751 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
38752 		ZVAL_ARR(array, zend_new_array(size));
38753 		/* Explicitly initialize array as not-packed if flag is set */
38754 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
38755 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
38756 		}
38757 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38758 	} else {
38759 		ZVAL_ARR(array, zend_new_array(0));
38760 		ZEND_VM_NEXT_OPCODE();
38761 	}
38762 }
38763 
ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38764 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38765 {
38766 	USE_OPLINE
38767 	zval *container;
38768 	zval *offset;
38769 	zend_string *name, *tmp_name;
38770 
38771 	SAVE_OPLINE();
38772 	container = &EX(This);
38773 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
38774 
38775 	do {
38776 		if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
38777 			if (Z_ISREF_P(container)) {
38778 				container = Z_REFVAL_P(container);
38779 				if (Z_TYPE_P(container) != IS_OBJECT) {
38780 					if (IS_UNUSED == IS_CV
38781 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
38782 						ZVAL_UNDEFINED_OP1();
38783 					}
38784 					break;
38785 				}
38786 			} else {
38787 				break;
38788 			}
38789 		}
38790 		if (IS_CV == IS_CONST) {
38791 			name = Z_STR_P(offset);
38792 		} else {
38793 			name = zval_try_get_tmp_string(offset, &tmp_name);
38794 			if (UNEXPECTED(!name)) {
38795 				break;
38796 			}
38797 		}
38798 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
38799 		if (IS_CV != IS_CONST) {
38800 			zend_tmp_string_release(tmp_name);
38801 		}
38802 	} while (0);
38803 
38804 
38805 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38806 }
38807 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38808 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38809 {
38810 	USE_OPLINE
38811 	zval *container;
38812 	int result;
38813 	zval *offset;
38814 	zend_string *name, *tmp_name;
38815 
38816 	SAVE_OPLINE();
38817 	container = &EX(This);
38818 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
38819 
38820 	if (IS_UNUSED == IS_CONST ||
38821 	    (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
38822 		if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
38823 			container = Z_REFVAL_P(container);
38824 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
38825 				result = (opline->extended_value & ZEND_ISEMPTY);
38826 				goto isset_object_finish;
38827 			}
38828 		} else {
38829 			result = (opline->extended_value & ZEND_ISEMPTY);
38830 			goto isset_object_finish;
38831 		}
38832 	}
38833 
38834 	if (IS_CV == IS_CONST) {
38835 		name = Z_STR_P(offset);
38836 	} else {
38837 		name = zval_try_get_tmp_string(offset, &tmp_name);
38838 		if (UNEXPECTED(!name)) {
38839 			result = 0;
38840 			goto isset_object_finish;
38841 		}
38842 	}
38843 
38844 	result =
38845 		(opline->extended_value & ZEND_ISEMPTY) ^
38846 		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));
38847 
38848 	if (IS_CV != IS_CONST) {
38849 		zend_tmp_string_release(tmp_name);
38850 	}
38851 
38852 isset_object_finish:
38853 
38854 
38855 	ZEND_VM_SMART_BRANCH(result, 1);
38856 }
38857 
ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38858 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38859 {
38860 	USE_OPLINE
38861 
38862 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
38863 
38864 	SAVE_OPLINE();
38865 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
38866 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
38867 	}
38868 
38869 	/* Destroy the previously yielded value */
38870 	zval_ptr_dtor(&generator->value);
38871 
38872 	/* Destroy the previously yielded key */
38873 	zval_ptr_dtor(&generator->key);
38874 
38875 	/* Set the new yielded value */
38876 	if (IS_UNUSED != IS_UNUSED) {
38877 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
38878 			/* Constants and temporary variables aren't yieldable by reference,
38879 			 * but we still allow them with a notice. */
38880 			if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) {
38881 				zval *value;
38882 
38883 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
38884 
38885 				value = NULL;
38886 				ZVAL_COPY_VALUE(&generator->value, value);
38887 				if (IS_UNUSED == IS_CONST) {
38888 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
38889 						Z_ADDREF(generator->value);
38890 					}
38891 				}
38892 			} else {
38893 				zval *value_ptr = NULL;
38894 
38895 				/* If a function call result is yielded and the function did
38896 				 * not return by reference we throw a notice. */
38897 				do {
38898 					if (IS_UNUSED == IS_VAR) {
38899 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
38900 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
38901 						 && !Z_ISREF_P(value_ptr)) {
38902 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
38903 							ZVAL_COPY(&generator->value, value_ptr);
38904 							break;
38905 						}
38906 					}
38907 					if (Z_ISREF_P(value_ptr)) {
38908 						Z_ADDREF_P(value_ptr);
38909 					} else {
38910 						ZVAL_MAKE_REF_EX(value_ptr, 2);
38911 					}
38912 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
38913 				} while (0);
38914 
38915 			}
38916 		} else {
38917 			zval *value = NULL;
38918 
38919 			/* Consts, temporary variables and references need copying */
38920 			if (IS_UNUSED == IS_CONST) {
38921 				ZVAL_COPY_VALUE(&generator->value, value);
38922 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
38923 					Z_ADDREF(generator->value);
38924 				}
38925 			} else if (IS_UNUSED == IS_TMP_VAR) {
38926 				ZVAL_COPY_VALUE(&generator->value, value);
38927 			} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
38928 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
38929 
38930 			} else {
38931 				ZVAL_COPY_VALUE(&generator->value, value);
38932 				if (IS_UNUSED == IS_CV) {
38933 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
38934 				}
38935 			}
38936 		}
38937 	} else {
38938 		/* If no value was specified yield null */
38939 		ZVAL_NULL(&generator->value);
38940 	}
38941 
38942 	/* Set the new yielded key */
38943 	if (IS_CV != IS_UNUSED) {
38944 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
38945 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
38946 			key = Z_REFVAL_P(key);
38947 		}
38948 		ZVAL_COPY(&generator->key, key);
38949 
38950 		if (Z_TYPE(generator->key) == IS_LONG
38951 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
38952 		) {
38953 			generator->largest_used_integer_key = Z_LVAL(generator->key);
38954 		}
38955 	} else {
38956 		/* If no key was specified we use auto-increment keys */
38957 		generator->largest_used_integer_key++;
38958 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
38959 	}
38960 
38961 	if (RETURN_VALUE_USED(opline)) {
38962 		/* If the return value of yield is used set the send
38963 		 * target and initialize it to NULL */
38964 		generator->send_target = EX_VAR(opline->result.var);
38965 		ZVAL_NULL(generator->send_target);
38966 	} else {
38967 		generator->send_target = NULL;
38968 	}
38969 
38970 	/* We increment to the next op, so we are at the correct position when the
38971 	 * generator is resumed. */
38972 	ZEND_VM_INC_OPCODE();
38973 
38974 	/* The GOTO VM uses a local opline variable. We need to set the opline
38975 	 * variable in execute_data so we don't resume at an old position. */
38976 	SAVE_OPLINE();
38977 
38978 	ZEND_VM_RETURN();
38979 }
38980 
ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)38981 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
38982 {
38983 	USE_OPLINE
38984 	zval *val;
38985 
38986 	val = EX_VAR(opline->op1.var);
38987 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
38988 		ZVAL_FALSE(EX_VAR(opline->result.var));
38989 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
38990 		/* The result and op1 can be the same cv zval */
38991 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
38992 		ZVAL_TRUE(EX_VAR(opline->result.var));
38993 		if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
38994 			SAVE_OPLINE();
38995 			ZVAL_UNDEFINED_OP1();
38996 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
38997 		}
38998 	} else {
38999 		SAVE_OPLINE();
39000 		ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val));
39001 
39002 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39003 	}
39004 	ZEND_VM_NEXT_OPCODE();
39005 }
39006 
zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)39007 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
39008 {
39009 	USE_OPLINE
39010 	zval *var_ptr;
39011 
39012 	var_ptr = EX_VAR(opline->op1.var);
39013 
39014 	SAVE_OPLINE();
39015 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
39016 		ZVAL_UNDEFINED_OP1();
39017 		ZVAL_NULL(var_ptr);
39018 	}
39019 
39020 	do {
39021 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
39022 			zend_reference *ref = Z_REF_P(var_ptr);
39023 			var_ptr = Z_REFVAL_P(var_ptr);
39024 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
39025 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
39026 				break;
39027 			}
39028 		}
39029 		increment_function(var_ptr);
39030 	} while (0);
39031 
39032 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39033 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
39034 	}
39035 
39036 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39037 }
39038 
ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39039 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39040 {
39041 	USE_OPLINE
39042 	zval *var_ptr;
39043 
39044 	var_ptr = EX_VAR(opline->op1.var);
39045 
39046 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
39047 		fast_long_increment_function(var_ptr);
39048 		if (UNEXPECTED(0)) {
39049 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39050 		}
39051 		ZEND_VM_NEXT_OPCODE();
39052 	}
39053 
39054 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39055 }
39056 
ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39057 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39058 {
39059 	USE_OPLINE
39060 	zval *var_ptr;
39061 
39062 	var_ptr = EX_VAR(opline->op1.var);
39063 
39064 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
39065 		fast_long_increment_function(var_ptr);
39066 		if (UNEXPECTED(1)) {
39067 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39068 		}
39069 		ZEND_VM_NEXT_OPCODE();
39070 	}
39071 
39072 	ZEND_VM_TAIL_CALL(zend_pre_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39073 }
39074 
zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)39075 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
39076 {
39077 	USE_OPLINE
39078 	zval *var_ptr;
39079 
39080 	var_ptr = EX_VAR(opline->op1.var);
39081 
39082 	SAVE_OPLINE();
39083 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
39084 		ZVAL_UNDEFINED_OP1();
39085 		ZVAL_NULL(var_ptr);
39086 	}
39087 
39088 	do {
39089 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
39090 			zend_reference *ref = Z_REF_P(var_ptr);
39091 			var_ptr = Z_REFVAL_P(var_ptr);
39092 
39093 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
39094 				zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
39095 				break;
39096 			}
39097 		}
39098 		decrement_function(var_ptr);
39099 	} while (0);
39100 
39101 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
39102 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
39103 	}
39104 
39105 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39106 }
39107 
ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39108 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39109 {
39110 	USE_OPLINE
39111 	zval *var_ptr;
39112 
39113 	var_ptr = EX_VAR(opline->op1.var);
39114 
39115 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
39116 		fast_long_decrement_function(var_ptr);
39117 		if (UNEXPECTED(0)) {
39118 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39119 		}
39120 		ZEND_VM_NEXT_OPCODE();
39121 	}
39122 
39123 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39124 }
39125 
ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39126 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39127 {
39128 	USE_OPLINE
39129 	zval *var_ptr;
39130 
39131 	var_ptr = EX_VAR(opline->op1.var);
39132 
39133 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
39134 		fast_long_decrement_function(var_ptr);
39135 		if (UNEXPECTED(1)) {
39136 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
39137 		}
39138 		ZEND_VM_NEXT_OPCODE();
39139 	}
39140 
39141 	ZEND_VM_TAIL_CALL(zend_pre_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39142 }
39143 
zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)39144 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
39145 {
39146 	USE_OPLINE
39147 	zval *var_ptr;
39148 
39149 	var_ptr = EX_VAR(opline->op1.var);
39150 
39151 	SAVE_OPLINE();
39152 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
39153 		ZVAL_UNDEFINED_OP1();
39154 		ZVAL_NULL(var_ptr);
39155 	}
39156 
39157 	do {
39158 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
39159 			zend_reference *ref = Z_REF_P(var_ptr);
39160 			var_ptr = Z_REFVAL_P(var_ptr);
39161 
39162 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
39163 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
39164 				break;
39165 			}
39166 		}
39167 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
39168 
39169 		increment_function(var_ptr);
39170 	} while (0);
39171 
39172 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39173 }
39174 
ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39175 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39176 {
39177 	USE_OPLINE
39178 	zval *var_ptr;
39179 
39180 	var_ptr = EX_VAR(opline->op1.var);
39181 
39182 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
39183 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39184 		fast_long_increment_function(var_ptr);
39185 		ZEND_VM_NEXT_OPCODE();
39186 	}
39187 
39188 	ZEND_VM_TAIL_CALL(zend_post_inc_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39189 }
39190 
zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)39191 static zend_never_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
39192 {
39193 	USE_OPLINE
39194 	zval *var_ptr;
39195 
39196 	var_ptr = EX_VAR(opline->op1.var);
39197 
39198 	SAVE_OPLINE();
39199 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) {
39200 		ZVAL_UNDEFINED_OP1();
39201 		ZVAL_NULL(var_ptr);
39202 	}
39203 
39204 	do {
39205 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
39206 			zend_reference *ref = Z_REF_P(var_ptr);
39207 			var_ptr = Z_REFVAL_P(var_ptr);
39208 
39209 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
39210 				zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
39211 				break;
39212 			}
39213 		}
39214 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
39215 
39216 		decrement_function(var_ptr);
39217 	} while (0);
39218 
39219 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39220 }
39221 
ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39222 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39223 {
39224 	USE_OPLINE
39225 	zval *var_ptr;
39226 
39227 	var_ptr = EX_VAR(opline->op1.var);
39228 
39229 	if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) {
39230 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
39231 		fast_long_decrement_function(var_ptr);
39232 		ZEND_VM_NEXT_OPCODE();
39233 	}
39234 
39235 	ZEND_VM_TAIL_CALL(zend_post_dec_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39236 }
39237 
ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39238 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39239 {
39240 	USE_OPLINE
39241 	zval *z;
39242 
39243 	SAVE_OPLINE();
39244 	z = EX_VAR(opline->op1.var);
39245 
39246 	if (Z_TYPE_P(z) == IS_STRING) {
39247 		zend_string *str = Z_STR_P(z);
39248 
39249 		if (ZSTR_LEN(str) != 0) {
39250 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
39251 		}
39252 	} else {
39253 		zend_string *str = zval_get_string_func(z);
39254 
39255 		if (ZSTR_LEN(str) != 0) {
39256 			zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
39257 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
39258 			ZVAL_UNDEFINED_OP1();
39259 		}
39260 		zend_string_release_ex(str, 0);
39261 	}
39262 
39263 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39264 }
39265 
ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39266 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39267 {
39268 	USE_OPLINE
39269 	zval *val;
39270 	uint8_t op1_type;
39271 
39272 	val = EX_VAR(opline->op1.var);
39273 
39274 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
39275 		ZEND_VM_NEXT_OPCODE();
39276 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
39277 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
39278 			SAVE_OPLINE();
39279 			ZVAL_UNDEFINED_OP1();
39280 			if (UNEXPECTED(EG(exception))) {
39281 				HANDLE_EXCEPTION();
39282 			}
39283 		}
39284 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
39285 	}
39286 
39287 	SAVE_OPLINE();
39288 	op1_type = IS_CV;
39289 	if (i_zend_is_true(val)) {
39290 		opline++;
39291 	} else {
39292 		opline = OP_JMP_ADDR(opline, opline->op2);
39293 	}
39294 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
39295 		zval_ptr_dtor_nogc(val);
39296 	}
39297 	ZEND_VM_JMP(opline);
39298 }
39299 
ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39300 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39301 {
39302 	USE_OPLINE
39303 	zval *val;
39304 	uint8_t op1_type;
39305 
39306 	val = EX_VAR(opline->op1.var);
39307 
39308 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
39309 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
39310 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
39311 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
39312 			SAVE_OPLINE();
39313 			ZVAL_UNDEFINED_OP1();
39314 			if (UNEXPECTED(EG(exception))) {
39315 				HANDLE_EXCEPTION();
39316 			}
39317 		}
39318 		ZEND_VM_NEXT_OPCODE();
39319 	}
39320 
39321 	SAVE_OPLINE();
39322 	op1_type = IS_CV;
39323 	if (i_zend_is_true(val)) {
39324 		opline = OP_JMP_ADDR(opline, opline->op2);
39325 	} else {
39326 		opline++;
39327 	}
39328 	if (op1_type & (IS_TMP_VAR|IS_VAR)) {
39329 		zval_ptr_dtor_nogc(val);
39330 	}
39331 	ZEND_VM_JMP(opline);
39332 }
39333 
ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39334 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39335 {
39336 	USE_OPLINE
39337 	zval *val;
39338 	bool ret;
39339 
39340 	val = EX_VAR(opline->op1.var);
39341 
39342 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
39343 		ZVAL_TRUE(EX_VAR(opline->result.var));
39344 		ZEND_VM_NEXT_OPCODE();
39345 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
39346 		ZVAL_FALSE(EX_VAR(opline->result.var));
39347 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
39348 			SAVE_OPLINE();
39349 			ZVAL_UNDEFINED_OP1();
39350 			if (UNEXPECTED(EG(exception))) {
39351 				HANDLE_EXCEPTION();
39352 			}
39353 		}
39354 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
39355 	}
39356 
39357 	SAVE_OPLINE();
39358 	ret = i_zend_is_true(val);
39359 
39360 	if (ret) {
39361 		ZVAL_TRUE(EX_VAR(opline->result.var));
39362 		opline++;
39363 	} else {
39364 		ZVAL_FALSE(EX_VAR(opline->result.var));
39365 		opline = OP_JMP_ADDR(opline, opline->op2);
39366 	}
39367 	ZEND_VM_JMP(opline);
39368 }
39369 
ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39370 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39371 {
39372 	USE_OPLINE
39373 	zval *val;
39374 	bool ret;
39375 
39376 	val = EX_VAR(opline->op1.var);
39377 
39378 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
39379 		ZVAL_TRUE(EX_VAR(opline->result.var));
39380 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
39381 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
39382 		ZVAL_FALSE(EX_VAR(opline->result.var));
39383 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) {
39384 			SAVE_OPLINE();
39385 			ZVAL_UNDEFINED_OP1();
39386 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39387 		} else {
39388 			ZEND_VM_NEXT_OPCODE();
39389 		}
39390 	}
39391 
39392 	SAVE_OPLINE();
39393 	ret = i_zend_is_true(val);
39394 
39395 	if (ret) {
39396 		ZVAL_TRUE(EX_VAR(opline->result.var));
39397 		opline = OP_JMP_ADDR(opline, opline->op2);
39398 	} else {
39399 		ZVAL_FALSE(EX_VAR(opline->result.var));
39400 		opline++;
39401 	}
39402 	ZEND_VM_JMP(opline);
39403 }
39404 
ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39405 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39406 {
39407 	USE_OPLINE
39408 	zval *retval_ptr;
39409 	zval *return_value;
39410 
39411 	retval_ptr = EX_VAR(opline->op1.var);
39412 	return_value = EX(return_value);
39413 
39414 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
39415 		SAVE_OPLINE();
39416 		retval_ptr = ZVAL_UNDEFINED_OP1();
39417 		if (return_value) {
39418 			ZVAL_NULL(return_value);
39419 		}
39420 	} else if (!return_value) {
39421 		if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
39422 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
39423 				SAVE_OPLINE();
39424 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
39425 			}
39426 		}
39427 	} else {
39428 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
39429 			ZVAL_COPY_VALUE(return_value, retval_ptr);
39430 			if (IS_CV == IS_CONST) {
39431 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
39432 					Z_ADDREF_P(return_value);
39433 				}
39434 			}
39435 		} else if (IS_CV == IS_CV) {
39436 			do {
39437 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
39438 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
39439 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
39440 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
39441 							ZVAL_COPY_VALUE(return_value, retval_ptr);
39442 							if (GC_MAY_LEAK(ref)) {
39443 								SAVE_OPLINE();
39444 								gc_possible_root(ref);
39445 							}
39446 							ZVAL_NULL(retval_ptr);
39447 							break;
39448 						} else {
39449 							Z_ADDREF_P(retval_ptr);
39450 						}
39451 					} else {
39452 						retval_ptr = Z_REFVAL_P(retval_ptr);
39453 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
39454 							Z_ADDREF_P(retval_ptr);
39455 						}
39456 					}
39457 				}
39458 				ZVAL_COPY_VALUE(return_value, retval_ptr);
39459 			} while (0);
39460 		} else /* if (IS_CV == IS_VAR) */ {
39461 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
39462 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
39463 
39464 				retval_ptr = Z_REFVAL_P(retval_ptr);
39465 				ZVAL_COPY_VALUE(return_value, retval_ptr);
39466 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
39467 					efree_size(ref, sizeof(zend_reference));
39468 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
39469 					Z_ADDREF_P(retval_ptr);
39470 				}
39471 			} else {
39472 				ZVAL_COPY_VALUE(return_value, retval_ptr);
39473 			}
39474 		}
39475 	}
39476 
39477 
39478 
39479 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39480 }
39481 
ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39482 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39483 {
39484 	USE_OPLINE
39485 	zval *retval_ptr;
39486 	zval *return_value;
39487 
39488 	SAVE_OPLINE();
39489 
39490 	return_value = EX(return_value);
39491 
39492 	do {
39493 		if ((IS_CV & (IS_CONST|IS_TMP_VAR)) ||
39494 		    (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
39495 			/* Not supposed to happen, but we'll allow it */
39496 			zend_error(E_NOTICE, "Only variable references should be returned by reference");
39497 
39498 			retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39499 			if (!return_value) {
39500 
39501 			} else {
39502 				if (IS_CV == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
39503 					ZVAL_COPY_VALUE(return_value, retval_ptr);
39504 					break;
39505 				}
39506 
39507 				ZVAL_NEW_REF(return_value, retval_ptr);
39508 				if (IS_CV == IS_CONST) {
39509 					Z_TRY_ADDREF_P(retval_ptr);
39510 				}
39511 			}
39512 			break;
39513 		}
39514 
39515 		retval_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
39516 
39517 		if (IS_CV == IS_VAR) {
39518 			ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
39519 			if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
39520 				zend_error(E_NOTICE, "Only variable references should be returned by reference");
39521 				if (return_value) {
39522 					ZVAL_NEW_REF(return_value, retval_ptr);
39523 				} else {
39524 
39525 				}
39526 				break;
39527 			}
39528 		}
39529 
39530 		if (return_value) {
39531 			if (Z_ISREF_P(retval_ptr)) {
39532 				Z_ADDREF_P(retval_ptr);
39533 			} else {
39534 				ZVAL_MAKE_REF_EX(retval_ptr, 2);
39535 			}
39536 			ZVAL_REF(return_value, Z_REF_P(retval_ptr));
39537 		}
39538 
39539 	} while (0);
39540 
39541 
39542 	ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
39543 }
39544 
ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39545 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39546 {
39547 	USE_OPLINE
39548 	zval *retval;
39549 
39550 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
39551 
39552 	SAVE_OPLINE();
39553 	retval = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39554 
39555 	/* Copy return value into generator->retval */
39556 	if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
39557 		ZVAL_COPY_VALUE(&generator->retval, retval);
39558 		if (IS_CV == IS_CONST) {
39559 			if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
39560 				Z_ADDREF(generator->retval);
39561 			}
39562 		}
39563 	} else if (IS_CV == IS_CV) {
39564 		ZVAL_COPY_DEREF(&generator->retval, retval);
39565 	} else /* if (IS_CV == IS_VAR) */ {
39566 		if (UNEXPECTED(Z_ISREF_P(retval))) {
39567 			zend_refcounted *ref = Z_COUNTED_P(retval);
39568 
39569 			retval = Z_REFVAL_P(retval);
39570 			ZVAL_COPY_VALUE(&generator->retval, retval);
39571 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
39572 				efree_size(ref, sizeof(zend_reference));
39573 			} else if (Z_OPT_REFCOUNTED_P(retval)) {
39574 				Z_ADDREF_P(retval);
39575 			}
39576 		} else {
39577 			ZVAL_COPY_VALUE(&generator->retval, retval);
39578 		}
39579 	}
39580 
39581 	EG(current_execute_data) = EX(prev_execute_data);
39582 
39583 	/* Close the generator to free up resources */
39584 	zend_generator_close(generator, 1);
39585 
39586 	/* Pass execution back to handling code */
39587 	ZEND_VM_RETURN();
39588 }
39589 
ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39590 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39591 {
39592 	USE_OPLINE
39593 	zval *value;
39594 
39595 	SAVE_OPLINE();
39596 	value = EX_VAR(opline->op1.var);
39597 
39598 	do {
39599 		if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
39600 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
39601 				value = Z_REFVAL_P(value);
39602 				if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) {
39603 					break;
39604 				}
39605 			}
39606 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
39607 				ZVAL_UNDEFINED_OP1();
39608 				if (UNEXPECTED(EG(exception) != NULL)) {
39609 					HANDLE_EXCEPTION();
39610 				}
39611 			}
39612 			zend_throw_error(NULL, "Can only throw objects");
39613 
39614 			HANDLE_EXCEPTION();
39615 		}
39616 	} while (0);
39617 
39618 	zend_exception_save();
39619 	Z_TRY_ADDREF_P(value);
39620 	zend_throw_exception_object(value);
39621 	zend_exception_restore();
39622 
39623 	HANDLE_EXCEPTION();
39624 }
39625 
ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39626 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39627 {
39628 	USE_OPLINE
39629 	zval *arg, *param;
39630 
39631 	SAVE_OPLINE();
39632 
39633 	arg = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39634 	param = ZEND_CALL_VAR(EX(call), opline->result.var);
39635 	if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) {
39636 		zend_param_must_be_ref(EX(call)->func, opline->op2.num);
39637 		Z_TRY_ADDREF_P(arg);
39638 		ZVAL_NEW_REF(param, arg);
39639 	} else {
39640 		ZVAL_COPY(param, arg);
39641 	}
39642 
39643 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39644 }
39645 
ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39646 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39647 {
39648 	USE_OPLINE
39649 	zval *val;
39650 
39651 	val = EX_VAR(opline->op1.var);
39652 	if (Z_TYPE_INFO_P(val) == IS_TRUE) {
39653 		ZVAL_TRUE(EX_VAR(opline->result.var));
39654 	} else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) {
39655 		/* The result and op1 can be the same cv zval */
39656 		const uint32_t orig_val_type = Z_TYPE_INFO_P(val);
39657 		ZVAL_FALSE(EX_VAR(opline->result.var));
39658 		if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) {
39659 			SAVE_OPLINE();
39660 			ZVAL_UNDEFINED_OP1();
39661 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39662 		}
39663 	} else {
39664 		SAVE_OPLINE();
39665 		ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val));
39666 
39667 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39668 	}
39669 	ZEND_VM_NEXT_OPCODE();
39670 }
39671 
ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39672 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39673 {
39674 	USE_OPLINE
39675 	zval *obj;
39676 	zend_object *zobj;
39677 	zend_class_entry *ce, *scope;
39678 	zend_function *clone;
39679 	zend_object_clone_obj_t clone_call;
39680 
39681 	SAVE_OPLINE();
39682 	obj = EX_VAR(opline->op1.var);
39683 
39684 	do {
39685 		if (IS_CV == IS_CONST ||
39686 		    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) {
39687 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) {
39688 				obj = Z_REFVAL_P(obj);
39689 				if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
39690 					break;
39691 				}
39692 			}
39693 			ZVAL_UNDEF(EX_VAR(opline->result.var));
39694 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
39695 				ZVAL_UNDEFINED_OP1();
39696 				if (UNEXPECTED(EG(exception) != NULL)) {
39697 					HANDLE_EXCEPTION();
39698 				}
39699 			}
39700 			zend_throw_error(NULL, "__clone method called on non-object");
39701 
39702 			HANDLE_EXCEPTION();
39703 		}
39704 	} while (0);
39705 
39706 	zobj = Z_OBJ_P(obj);
39707 	ce = zobj->ce;
39708 	clone = ce->clone;
39709 	clone_call = zobj->handlers->clone_obj;
39710 	if (UNEXPECTED(clone_call == NULL)) {
39711 		zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name));
39712 
39713 		ZVAL_UNDEF(EX_VAR(opline->result.var));
39714 		HANDLE_EXCEPTION();
39715 	}
39716 
39717 	if (clone && !(clone->common.fn_flags & ZEND_ACC_PUBLIC)) {
39718 		scope = EX(func)->op_array.scope;
39719 		if (clone->common.scope != scope) {
39720 			if (UNEXPECTED(clone->common.fn_flags & ZEND_ACC_PRIVATE)
39721 			 || UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) {
39722 				zend_wrong_clone_call(clone, scope);
39723 
39724 				ZVAL_UNDEF(EX_VAR(opline->result.var));
39725 				HANDLE_EXCEPTION();
39726 			}
39727 		}
39728 	}
39729 
39730 	ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(zobj));
39731 
39732 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39733 }
39734 
ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39735 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39736 {
39737 	USE_OPLINE
39738 	zval *expr;
39739 	zval *result = EX_VAR(opline->result.var);
39740 	HashTable *ht;
39741 
39742 	SAVE_OPLINE();
39743 	expr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39744 
39745 	switch (opline->extended_value) {
39746 		case IS_LONG:
39747 			ZVAL_LONG(result, zval_get_long(expr));
39748 			break;
39749 		case IS_DOUBLE:
39750 			ZVAL_DOUBLE(result, zval_get_double(expr));
39751 			break;
39752 		case IS_STRING:
39753 			ZVAL_STR(result, zval_get_string(expr));
39754 			break;
39755 		default:
39756 			ZEND_ASSERT(opline->extended_value != _IS_BOOL && "Must use ZEND_BOOL instead");
39757 			if (IS_CV & (IS_VAR|IS_CV)) {
39758 				ZVAL_DEREF(expr);
39759 			}
39760 			/* If value is already of correct type, return it directly */
39761 			if (Z_TYPE_P(expr) == opline->extended_value) {
39762 				ZVAL_COPY_VALUE(result, expr);
39763 				if (IS_CV == IS_CONST) {
39764 					if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
39765 				} else if (IS_CV != IS_TMP_VAR) {
39766 					if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
39767 				}
39768 
39769 				ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39770 			}
39771 
39772 			if (opline->extended_value == IS_ARRAY) {
39773 				if (IS_CV == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) {
39774 					if (Z_TYPE_P(expr) != IS_NULL) {
39775 						ZVAL_ARR(result, zend_new_array(1));
39776 						expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
39777 						if (IS_CV == IS_CONST) {
39778 							if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
39779 						} else {
39780 							if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
39781 						}
39782 					} else {
39783 						ZVAL_EMPTY_ARRAY(result);
39784 					}
39785 				} else if (Z_OBJ_P(expr)->properties == NULL
39786 				 && Z_OBJ_HT_P(expr)->get_properties_for == NULL
39787 				 && Z_OBJ_HT_P(expr)->get_properties == zend_std_get_properties) {
39788 					/* Optimized version without rebuilding properties HashTable */
39789 					ZVAL_ARR(result, zend_std_build_object_properties_array(Z_OBJ_P(expr)));
39790 				} else {
39791 					HashTable *obj_ht = zend_get_properties_for(expr, ZEND_PROP_PURPOSE_ARRAY_CAST);
39792 					if (obj_ht) {
39793 						/* fast copy */
39794 						ZVAL_ARR(result, zend_proptable_to_symtable(obj_ht,
39795 							(Z_OBJCE_P(expr)->default_properties_count ||
39796 							 Z_OBJ_P(expr)->handlers != &std_object_handlers ||
39797 							 GC_IS_RECURSIVE(obj_ht))));
39798 						zend_release_properties(obj_ht);
39799 					} else {
39800 						ZVAL_EMPTY_ARRAY(result);
39801 					}
39802 				}
39803 			} else {
39804 				ZEND_ASSERT(opline->extended_value == IS_OBJECT);
39805 				ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
39806 				if (Z_TYPE_P(expr) == IS_ARRAY) {
39807 					ht = zend_symtable_to_proptable(Z_ARR_P(expr));
39808 					if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
39809 						/* TODO: try not to duplicate immutable arrays as well ??? */
39810 						ht = zend_array_dup(ht);
39811 					}
39812 					Z_OBJ_P(result)->properties = ht;
39813 				} else if (Z_TYPE_P(expr) != IS_NULL) {
39814 					Z_OBJ_P(result)->properties = ht = zend_new_array(1);
39815 					expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
39816 					if (IS_CV == IS_CONST) {
39817 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
39818 					} else {
39819 						if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
39820 					}
39821 				}
39822 			}
39823 	}
39824 
39825 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39826 }
39827 
ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39828 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39829 {
39830 	USE_OPLINE
39831 	zend_op_array *new_op_array;
39832 	zval *inc_filename;
39833 
39834 	SAVE_OPLINE();
39835 	inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39836 	new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
39837 	if (UNEXPECTED(EG(exception) != NULL)) {
39838 
39839 		if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
39840 			destroy_op_array(new_op_array);
39841 			efree_size(new_op_array, sizeof(zend_op_array));
39842 		}
39843 		UNDEF_RESULT();
39844 		HANDLE_EXCEPTION();
39845 	} else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
39846 		if (RETURN_VALUE_USED(opline)) {
39847 			ZVAL_TRUE(EX_VAR(opline->result.var));
39848 		}
39849 	} else if (UNEXPECTED(new_op_array == NULL)) {
39850 		if (RETURN_VALUE_USED(opline)) {
39851 			ZVAL_FALSE(EX_VAR(opline->result.var));
39852 		}
39853 	} else if (new_op_array->last == 1
39854 			&& new_op_array->opcodes[0].opcode == ZEND_RETURN
39855 			&& new_op_array->opcodes[0].op1_type == IS_CONST
39856 			&& EXPECTED(zend_execute_ex == execute_ex)) {
39857 		if (RETURN_VALUE_USED(opline)) {
39858 			const zend_op *op = new_op_array->opcodes;
39859 
39860 			ZVAL_COPY(EX_VAR(opline->result.var), RT_CONSTANT(op, op->op1));
39861 		}
39862 		zend_destroy_static_vars(new_op_array);
39863 		destroy_op_array(new_op_array);
39864 		efree_size(new_op_array, sizeof(zend_op_array));
39865 	} else {
39866 		zval *return_value = NULL;
39867 		zend_execute_data *call;
39868 		if (RETURN_VALUE_USED(opline)) {
39869 			return_value = EX_VAR(opline->result.var);
39870 		}
39871 
39872 		new_op_array->scope = EX(func)->op_array.scope;
39873 
39874 		call = zend_vm_stack_push_call_frame(
39875 			(Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
39876 			(zend_function*)new_op_array, 0,
39877 			Z_PTR(EX(This)));
39878 
39879 		if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
39880 			call->symbol_table = EX(symbol_table);
39881 		} else {
39882 			call->symbol_table = zend_rebuild_symbol_table();
39883 		}
39884 
39885 		call->prev_execute_data = execute_data;
39886 		i_init_code_execute_data(call, new_op_array, return_value);
39887 
39888 		if (EXPECTED(zend_execute_ex == execute_ex)) {
39889 
39890 			ZEND_VM_ENTER();
39891 		} else {
39892 			ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
39893 			zend_execute_ex(call);
39894 			zend_vm_stack_free_call_frame(call);
39895 		}
39896 
39897 		zend_destroy_static_vars(new_op_array);
39898 		destroy_op_array(new_op_array);
39899 		efree_size(new_op_array, sizeof(zend_op_array));
39900 		if (UNEXPECTED(EG(exception) != NULL)) {
39901 			zend_rethrow_exception(execute_data);
39902 
39903 			UNDEF_RESULT();
39904 			HANDLE_EXCEPTION();
39905 		}
39906 	}
39907 
39908 	ZEND_VM_NEXT_OPCODE();
39909 }
39910 
ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39911 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39912 {
39913 	USE_OPLINE
39914 	zval *array_ptr, *result;
39915 
39916 	SAVE_OPLINE();
39917 
39918 	array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39919 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
39920 		result = EX_VAR(opline->result.var);
39921 		ZVAL_COPY_VALUE(result, array_ptr);
39922 		if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) {
39923 			Z_ADDREF_P(array_ptr);
39924 		}
39925 		Z_FE_POS_P(result) = 0;
39926 
39927 		ZEND_VM_NEXT_OPCODE();
39928 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
39929 		zend_object *zobj = Z_OBJ_P(array_ptr);
39930 		if (!zobj->ce->get_iterator) {
39931 			HashTable *properties = zobj->properties;
39932 			if (properties) {
39933 				if (UNEXPECTED(GC_REFCOUNT(properties) > 1)) {
39934 					if (EXPECTED(!(GC_FLAGS(properties) & IS_ARRAY_IMMUTABLE))) {
39935 						GC_DELREF(properties);
39936 					}
39937 					properties = zobj->properties = zend_array_dup(properties);
39938 				}
39939 			} else {
39940 				properties = zobj->handlers->get_properties(zobj);
39941 			}
39942 
39943 			result = EX_VAR(opline->result.var);
39944 			ZVAL_COPY_VALUE(result, array_ptr);
39945 			if (IS_CV != IS_TMP_VAR) {
39946 				Z_ADDREF_P(array_ptr);
39947 			}
39948 
39949 			if (zend_hash_num_elements(properties) == 0) {
39950 				Z_FE_ITER_P(result) = (uint32_t) -1;
39951 
39952 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
39953 			}
39954 
39955 			Z_FE_ITER_P(result) = zend_hash_iterator_add(properties, 0);
39956 
39957 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
39958 		} else {
39959 			bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC);
39960 
39961 			if (UNEXPECTED(EG(exception))) {
39962 				HANDLE_EXCEPTION();
39963 			} else if (is_empty) {
39964 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
39965 			} else {
39966 				ZEND_VM_NEXT_OPCODE();
39967 			}
39968 		}
39969 	} else {
39970 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
39971 		ZVAL_UNDEF(EX_VAR(opline->result.var));
39972 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
39973 
39974 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
39975 	}
39976 }
39977 
ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)39978 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
39979 {
39980 	USE_OPLINE
39981 	zval *array_ptr, *array_ref;
39982 
39983 	SAVE_OPLINE();
39984 
39985 	if (IS_CV == IS_VAR || IS_CV == IS_CV) {
39986 		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39987 		if (Z_ISREF_P(array_ref)) {
39988 			array_ptr = Z_REFVAL_P(array_ref);
39989 		}
39990 	} else {
39991 		array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
39992 	}
39993 
39994 	if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) {
39995 		if (IS_CV == IS_VAR || IS_CV == IS_CV) {
39996 			if (array_ptr == array_ref) {
39997 				ZVAL_NEW_REF(array_ref, array_ref);
39998 				array_ptr = Z_REFVAL_P(array_ref);
39999 			}
40000 			Z_ADDREF_P(array_ref);
40001 			ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
40002 		} else {
40003 			array_ref = EX_VAR(opline->result.var);
40004 			ZVAL_NEW_REF(array_ref, array_ptr);
40005 			array_ptr = Z_REFVAL_P(array_ref);
40006 		}
40007 		if (IS_CV == IS_CONST) {
40008 			ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
40009 		} else {
40010 			SEPARATE_ARRAY(array_ptr);
40011 		}
40012 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0);
40013 
40014 		ZEND_VM_NEXT_OPCODE();
40015 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) {
40016 		if (!Z_OBJCE_P(array_ptr)->get_iterator) {
40017 			HashTable *properties;
40018 			if (IS_CV == IS_VAR || IS_CV == IS_CV) {
40019 				if (array_ptr == array_ref) {
40020 					ZVAL_NEW_REF(array_ref, array_ref);
40021 					array_ptr = Z_REFVAL_P(array_ref);
40022 				}
40023 				Z_ADDREF_P(array_ref);
40024 				ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref);
40025 			} else {
40026 				array_ptr = EX_VAR(opline->result.var);
40027 				ZVAL_COPY_VALUE(array_ptr, array_ref);
40028 			}
40029 			if (Z_OBJ_P(array_ptr)->properties
40030 			 && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) {
40031 				if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) {
40032 					GC_DELREF(Z_OBJ_P(array_ptr)->properties);
40033 				}
40034 				Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties);
40035 			}
40036 
40037 			properties = Z_OBJPROP_P(array_ptr);
40038 			if (zend_hash_num_elements(properties) == 0) {
40039 				Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t) -1;
40040 
40041 				ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
40042 			}
40043 
40044 			Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(properties, 0);
40045 
40046 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40047 		} else {
40048 			bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC);
40049 
40050 			if (UNEXPECTED(EG(exception))) {
40051 				HANDLE_EXCEPTION();
40052 			} else if (is_empty) {
40053 				ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
40054 			} else {
40055 				ZEND_VM_NEXT_OPCODE();
40056 			}
40057 		}
40058 	} else {
40059 		zend_error(E_WARNING, "foreach() argument must be of type array|object, %s given", zend_zval_value_name(array_ptr));
40060 		ZVAL_UNDEF(EX_VAR(opline->result.var));
40061 		Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1;
40062 
40063 		ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2));
40064 	}
40065 }
40066 
ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40067 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40068 {
40069 	USE_OPLINE
40070 	zval *value;
40071 	zend_reference *ref = NULL;
40072 	bool ret;
40073 
40074 	SAVE_OPLINE();
40075 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40076 
40077 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) {
40078 		if (IS_CV == IS_VAR) {
40079 			ref = Z_REF_P(value);
40080 		}
40081 		value = Z_REFVAL_P(value);
40082 	}
40083 
40084 	ret = i_zend_is_true(value);
40085 
40086 	if (UNEXPECTED(EG(exception))) {
40087 
40088 		ZVAL_UNDEF(EX_VAR(opline->result.var));
40089 		HANDLE_EXCEPTION();
40090 	}
40091 
40092 	if (ret) {
40093 		zval *result = EX_VAR(opline->result.var);
40094 
40095 		ZVAL_COPY_VALUE(result, value);
40096 		if (IS_CV == IS_CONST) {
40097 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
40098 		} else if (IS_CV == IS_CV) {
40099 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
40100 		} else if (IS_CV == IS_VAR && ref) {
40101 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
40102 				efree_size(ref, sizeof(zend_reference));
40103 			} else if (Z_OPT_REFCOUNTED_P(result)) {
40104 				Z_ADDREF_P(result);
40105 			}
40106 		}
40107 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
40108 	}
40109 
40110 	ZEND_VM_NEXT_OPCODE();
40111 }
40112 
ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40113 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40114 {
40115 	USE_OPLINE
40116 	zval *value;
40117 	zend_reference *ref = NULL;
40118 
40119 	SAVE_OPLINE();
40120 	value = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
40121 
40122 	if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
40123 		if (IS_CV & IS_VAR) {
40124 			ref = Z_REF_P(value);
40125 		}
40126 		value = Z_REFVAL_P(value);
40127 	}
40128 
40129 	if (Z_TYPE_P(value) > IS_NULL) {
40130 		zval *result = EX_VAR(opline->result.var);
40131 		ZVAL_COPY_VALUE(result, value);
40132 		if (IS_CV == IS_CONST) {
40133 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
40134 		} else if (IS_CV == IS_CV) {
40135 			if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
40136 		} else if ((IS_CV & IS_VAR) && ref) {
40137 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
40138 				efree_size(ref, sizeof(zend_reference));
40139 			} else if (Z_OPT_REFCOUNTED_P(result)) {
40140 				Z_ADDREF_P(result);
40141 			}
40142 		}
40143 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
40144 	}
40145 
40146 	if ((IS_CV & IS_VAR) && ref) {
40147 		if (UNEXPECTED(GC_DELREF(ref) == 0)) {
40148 			efree_size(ref, sizeof(zend_reference));
40149 		}
40150 	}
40151 	ZEND_VM_NEXT_OPCODE();
40152 }
40153 
ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40154 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40155 {
40156 	USE_OPLINE
40157 	zval *val, *result;
40158 
40159 	val = EX_VAR(opline->op1.var);
40160 
40161 	if (Z_TYPE_P(val) > IS_NULL) {
40162 		do {
40163 			if ((IS_CV == IS_CV || IS_CV == IS_VAR) && Z_TYPE_P(val) == IS_REFERENCE) {
40164 				val = Z_REFVAL_P(val);
40165 				if (Z_TYPE_P(val) <= IS_NULL) {
40166 
40167 					break;
40168 				}
40169 			}
40170 			ZEND_VM_NEXT_OPCODE();
40171 		} while (0);
40172 	}
40173 
40174 	result = EX_VAR(opline->result.var);
40175 	uint32_t short_circuiting_type = opline->extended_value & ZEND_SHORT_CIRCUITING_CHAIN_MASK;
40176 	if (EXPECTED(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EXPR)) {
40177 		ZVAL_NULL(result);
40178 		if (IS_CV == IS_CV
40179 			&& UNEXPECTED(Z_TYPE_P(val) == IS_UNDEF)
40180 			&& (opline->extended_value & ZEND_JMP_NULL_BP_VAR_IS) == 0
40181 		) {
40182 			SAVE_OPLINE();
40183 			ZVAL_UNDEFINED_OP1();
40184 			if (UNEXPECTED(EG(exception) != NULL)) {
40185 				HANDLE_EXCEPTION();
40186 			}
40187 		}
40188 	} else if (short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_ISSET) {
40189 		ZVAL_FALSE(result);
40190 	} else {
40191 		ZEND_ASSERT(short_circuiting_type == ZEND_SHORT_CIRCUITING_CHAIN_EMPTY);
40192 		ZVAL_TRUE(result);
40193 	}
40194 
40195 	ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
40196 }
40197 
ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40198 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40199 {
40200 	USE_OPLINE
40201 	zval *value;
40202 	zval *result = EX_VAR(opline->result.var);
40203 
40204 	value = EX_VAR(opline->op1.var);
40205 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
40206 		SAVE_OPLINE();
40207 		ZVAL_UNDEFINED_OP1();
40208 		ZVAL_NULL(result);
40209 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40210 	}
40211 
40212 	if (IS_CV == IS_CV) {
40213 		ZVAL_COPY_DEREF(result, value);
40214 	} else if (IS_CV == IS_VAR) {
40215 		if (UNEXPECTED(Z_ISREF_P(value))) {
40216 			ZVAL_COPY_VALUE(result, Z_REFVAL_P(value));
40217 			if (UNEXPECTED(Z_DELREF_P(value) == 0)) {
40218 				efree_size(Z_REF_P(value), sizeof(zend_reference));
40219 			} else if (Z_OPT_REFCOUNTED_P(result)) {
40220 				Z_ADDREF_P(result);
40221 			}
40222 		} else {
40223 			ZVAL_COPY_VALUE(result, value);
40224 		}
40225 	} else {
40226 		ZVAL_COPY_VALUE(result, value);
40227 		if (IS_CV == IS_CONST) {
40228 			if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) {
40229 				Z_ADDREF_P(result);
40230 			}
40231 		}
40232 	}
40233 	ZEND_VM_NEXT_OPCODE();
40234 }
40235 
ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40236 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40237 {
40238 	USE_OPLINE
40239 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
40240 	zval *val;
40241 
40242 	SAVE_OPLINE();
40243 	val = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40244 
40245 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
40246 		zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator");
40247 
40248 		UNDEF_RESULT();
40249 		HANDLE_EXCEPTION();
40250 	}
40251 
40252 yield_from_try_again:
40253 	if (Z_TYPE_P(val) == IS_ARRAY) {
40254 		ZVAL_COPY_VALUE(&generator->values, val);
40255 		if (Z_OPT_REFCOUNTED_P(val)) {
40256 			Z_ADDREF_P(val);
40257 		}
40258 		Z_FE_POS(generator->values) = 0;
40259 
40260 	} else if (IS_CV != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) {
40261 		zend_class_entry *ce = Z_OBJCE_P(val);
40262 		if (ce == zend_ce_generator) {
40263 			zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val);
40264 
40265 			Z_ADDREF_P(val);
40266 
40267 			if (UNEXPECTED(new_gen->execute_data == NULL)) {
40268 				zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue");
40269 				zval_ptr_dtor(val);
40270 				UNDEF_RESULT();
40271 				HANDLE_EXCEPTION();
40272 			} else if (Z_ISUNDEF(new_gen->retval)) {
40273 				if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) {
40274 					zend_throw_error(NULL, "Impossible to yield from the Generator being currently run");
40275 					zval_ptr_dtor(val);
40276 					UNDEF_RESULT();
40277 					HANDLE_EXCEPTION();
40278 				} else {
40279 					zend_generator_yield_from(generator, new_gen);
40280 				}
40281 			} else {
40282 				if (RETURN_VALUE_USED(opline)) {
40283 					ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval);
40284 				}
40285 				ZEND_VM_NEXT_OPCODE();
40286 			}
40287 		} else {
40288 			zend_object_iterator *iter = ce->get_iterator(ce, val, 0);
40289 
40290 			if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) {
40291 				if (!EG(exception)) {
40292 					zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name));
40293 				}
40294 				UNDEF_RESULT();
40295 				HANDLE_EXCEPTION();
40296 			}
40297 
40298 			iter->index = 0;
40299 			if (iter->funcs->rewind) {
40300 				iter->funcs->rewind(iter);
40301 				if (UNEXPECTED(EG(exception) != NULL)) {
40302 					OBJ_RELEASE(&iter->std);
40303 					UNDEF_RESULT();
40304 					HANDLE_EXCEPTION();
40305 				}
40306 			}
40307 
40308 			ZVAL_OBJ(&generator->values, &iter->std);
40309 		}
40310 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(val) == IS_REFERENCE) {
40311 		val = Z_REFVAL_P(val);
40312 		goto yield_from_try_again;
40313 	} else {
40314 		zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables");
40315 
40316 		UNDEF_RESULT();
40317 		HANDLE_EXCEPTION();
40318 	}
40319 
40320 	/* This is the default return value
40321 	 * when the expression is a Generator, it will be overwritten in zend_generator_resume() */
40322 	if (RETURN_VALUE_USED(opline)) {
40323 		ZVAL_NULL(EX_VAR(opline->result.var));
40324 	}
40325 
40326 	/* This generator has no send target (though the generator we delegate to might have one) */
40327 	generator->send_target = NULL;
40328 
40329 	/* We increment to the next op, so we are at the correct position when the
40330 	 * generator is resumed. */
40331 	ZEND_VM_INC_OPCODE();
40332 
40333 	/* The GOTO VM uses a local opline variable. We need to set the opline
40334 	 * variable in execute_data so we don't resume at an old position. */
40335 	SAVE_OPLINE();
40336 
40337 	ZEND_VM_RETURN();
40338 }
40339 
ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40340 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40341 {
40342 	USE_OPLINE
40343 	zval *value;
40344 
40345 	value = EX_VAR(opline->op1.var);
40346 	if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
40347 		ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
40348 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
40349 			zval_ptr_dtor_str(value);
40350 		}
40351 		ZEND_VM_NEXT_OPCODE();
40352 	} else {
40353 		bool strict;
40354 
40355 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
40356 			value = Z_REFVAL_P(value);
40357 			if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
40358 				ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
40359 
40360 				ZEND_VM_NEXT_OPCODE();
40361 			}
40362 		}
40363 
40364 		SAVE_OPLINE();
40365 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
40366 			value = ZVAL_UNDEFINED_OP1();
40367 		}
40368 		strict = EX_USES_STRICT_TYPES();
40369 		do {
40370 			if (EXPECTED(!strict)) {
40371 				zend_string *str;
40372 				zval tmp;
40373 
40374 				if (UNEXPECTED(Z_TYPE_P(value) == IS_NULL)) {
40375 					zend_error(E_DEPRECATED,
40376 						"strlen(): Passing null to parameter #1 ($string) of type string is deprecated");
40377 					ZVAL_LONG(EX_VAR(opline->result.var), 0);
40378 					if (UNEXPECTED(EG(exception))) {
40379 						HANDLE_EXCEPTION();
40380 					}
40381 					break;
40382 				}
40383 
40384 				ZVAL_COPY(&tmp, value);
40385 				if (zend_parse_arg_str_weak(&tmp, &str, 1)) {
40386 					ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str));
40387 					zval_ptr_dtor(&tmp);
40388 					break;
40389 				}
40390 				zval_ptr_dtor(&tmp);
40391 			}
40392 			if (!EG(exception)) {
40393 				zend_type_error("strlen(): Argument #1 ($string) must be of type string, %s given", zend_zval_value_name(value));
40394 			}
40395 			ZVAL_UNDEF(EX_VAR(opline->result.var));
40396 		} while (0);
40397 	}
40398 
40399 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40400 }
40401 
ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40402 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40403 {
40404 	USE_OPLINE
40405 	zval *value;
40406 	int result = 0;
40407 
40408 	value = EX_VAR(opline->op1.var);
40409 	if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
40410 type_check_resource:
40411 		if (opline->extended_value != MAY_BE_RESOURCE
40412 		 || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) {
40413 			result = 1;
40414 		}
40415 	} else if ((IS_CV & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) {
40416 		value = Z_REFVAL_P(value);
40417 		if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) {
40418 			goto type_check_resource;
40419 		}
40420 	} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
40421 		result = ((1 << IS_NULL) & opline->extended_value) != 0;
40422 		SAVE_OPLINE();
40423 		ZVAL_UNDEFINED_OP1();
40424 		if (UNEXPECTED(EG(exception))) {
40425 			ZVAL_UNDEF(EX_VAR(opline->result.var));
40426 			HANDLE_EXCEPTION();
40427 		}
40428 	}
40429 	if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
40430 		SAVE_OPLINE();
40431 
40432 		ZEND_VM_SMART_BRANCH(result, 1);
40433 	} else {
40434 		ZEND_VM_SMART_BRANCH(result, 0);
40435 	}
40436 }
40437 
ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40438 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40439 {
40440 	uint32_t fetch_type;
40441 	zend_class_entry *called_scope, *scope;
40442 	USE_OPLINE
40443 
40444 	if (IS_CV != IS_UNUSED) {
40445 		SAVE_OPLINE();
40446 		zval *op = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40447 		if (UNEXPECTED(Z_TYPE_P(op) != IS_OBJECT)) {
40448 			ZVAL_DEREF(op);
40449 			if (Z_TYPE_P(op) != IS_OBJECT) {
40450 				zend_type_error("Cannot use \"::class\" on %s", zend_zval_value_name(op));
40451 				ZVAL_UNDEF(EX_VAR(opline->result.var));
40452 
40453 				HANDLE_EXCEPTION();
40454 			}
40455 		}
40456 
40457 		ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op)->name);
40458 
40459 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40460 	}
40461 
40462 	fetch_type = opline->op1.num;
40463 	scope = EX(func)->op_array.scope;
40464 	if (UNEXPECTED(scope == NULL)) {
40465 		SAVE_OPLINE();
40466 		zend_throw_error(NULL, "Cannot use \"%s\" in the global scope",
40467 			fetch_type == ZEND_FETCH_CLASS_SELF ? "self" :
40468 			fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static");
40469 		ZVAL_UNDEF(EX_VAR(opline->result.var));
40470 		HANDLE_EXCEPTION();
40471 	}
40472 
40473 	switch (fetch_type) {
40474 		case ZEND_FETCH_CLASS_SELF:
40475 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name);
40476 			break;
40477 		case ZEND_FETCH_CLASS_PARENT:
40478 			if (UNEXPECTED(scope->parent == NULL)) {
40479 				SAVE_OPLINE();
40480 				zend_throw_error(NULL,
40481 					"Cannot use \"parent\" when current class scope has no parent");
40482 				ZVAL_UNDEF(EX_VAR(opline->result.var));
40483 				HANDLE_EXCEPTION();
40484 			}
40485 			ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name);
40486 			break;
40487 		case ZEND_FETCH_CLASS_STATIC:
40488 			if (Z_TYPE(EX(This)) == IS_OBJECT) {
40489 				called_scope = Z_OBJCE(EX(This));
40490 			} else {
40491 				called_scope = Z_CE(EX(This));
40492 			}
40493 			ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name);
40494 			break;
40495 		EMPTY_SWITCH_DEFAULT_CASE()
40496 	}
40497 	ZEND_VM_NEXT_OPCODE();
40498 }
40499 
ZEND_BIND_STATIC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40500 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40501 {
40502 	USE_OPLINE
40503 	HashTable *ht;
40504 	zval *value;
40505 	zval *variable_ptr;
40506 
40507 	variable_ptr = EX_VAR(opline->op1.var);
40508 
40509 	SAVE_OPLINE();
40510 
40511 	ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
40512 	if (!ht) {
40513 		ht = zend_array_dup(EX(func)->op_array.static_variables);
40514 		ZEND_MAP_PTR_SET(EX(func)->op_array.static_variables_ptr, ht);
40515 	}
40516 	ZEND_ASSERT(GC_REFCOUNT(ht) == 1);
40517 
40518 	value = (zval*)((char*)ht->arData + (opline->extended_value & ~(ZEND_BIND_REF|ZEND_BIND_IMPLICIT|ZEND_BIND_EXPLICIT)));
40519 
40520 	if (opline->extended_value & ZEND_BIND_REF) {
40521 		i_zval_ptr_dtor(variable_ptr);
40522 		if (UNEXPECTED(!Z_ISREF_P(value))) {
40523 			zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference));
40524 			GC_SET_REFCOUNT(ref, 2);
40525 			GC_TYPE_INFO(ref) = GC_REFERENCE;
40526 			if (opline->op2_type == IS_UNUSED) {
40527 				ZVAL_COPY_VALUE(&ref->val, value);
40528 			} else {
40529 				ZEND_ASSERT(!Z_REFCOUNTED_P(value));
40530 				ZVAL_COPY(&ref->val, get_zval_ptr_deref(opline->op2_type, opline->op2, BP_VAR_R));
40531 				FREE_OP(opline->op2_type, opline->op2.var);
40532 			}
40533 			ref->sources.ptr = NULL;
40534 			Z_REF_P(value) = ref;
40535 			Z_TYPE_INFO_P(value) = IS_REFERENCE_EX;
40536 			ZVAL_REF(variable_ptr, ref);
40537 		} else {
40538 			Z_ADDREF_P(value);
40539 			ZVAL_REF(variable_ptr, Z_REF_P(value));
40540 			if (opline->op2_type != IS_UNUSED) {
40541 				FREE_OP(opline->op2_type, opline->op2.var);
40542 			}
40543 		}
40544 	} else {
40545 		i_zval_ptr_dtor(variable_ptr);
40546 		ZVAL_COPY(variable_ptr, value);
40547 	}
40548 
40549 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40550 }
40551 
ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40552 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40553 {
40554 	USE_OPLINE
40555 	HashTable *ht;
40556 	zval *value;
40557 	zval *variable_ptr;
40558 
40559 	variable_ptr = EX_VAR(opline->op1.var);
40560 
40561 	ht = ZEND_MAP_PTR_GET(EX(func)->op_array.static_variables_ptr);
40562 	if (!ht) {
40563 		ZEND_VM_NEXT_OPCODE();
40564 	}
40565 	ZEND_ASSERT(GC_REFCOUNT(ht) == 1);
40566 
40567 	value = (zval*)((char*)ht->arData + opline->extended_value);
40568 	if (Z_TYPE_EXTRA_P(value) & IS_STATIC_VAR_UNINITIALIZED) {
40569 		ZEND_VM_NEXT_OPCODE();
40570 	} else {
40571 		SAVE_OPLINE();
40572 		zval_ptr_dtor(variable_ptr);
40573 		ZEND_ASSERT(Z_TYPE_P(value) == IS_REFERENCE);
40574 		Z_ADDREF_P(value);
40575 		ZVAL_REF(variable_ptr, Z_REF_P(value));
40576 		ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 1);
40577 	}
40578 }
40579 
ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40580 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)
40581 {
40582 	USE_OPLINE
40583 	zval *var_ptr;
40584 
40585 	var_ptr = EX_VAR(opline->op1.var);
40586 	Z_LVAL_P(var_ptr)++;
40587 	if (UNEXPECTED(0)) {
40588 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
40589 	}
40590 	ZEND_VM_NEXT_OPCODE();
40591 }
40592 
ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40593 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)
40594 {
40595 	USE_OPLINE
40596 	zval *var_ptr;
40597 
40598 	var_ptr = EX_VAR(opline->op1.var);
40599 	Z_LVAL_P(var_ptr)++;
40600 	if (UNEXPECTED(1)) {
40601 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
40602 	}
40603 	ZEND_VM_NEXT_OPCODE();
40604 }
40605 
ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40606 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40607 {
40608 	USE_OPLINE
40609 	zval *var_ptr;
40610 
40611 	var_ptr = EX_VAR(opline->op1.var);
40612 	fast_long_increment_function(var_ptr);
40613 	if (UNEXPECTED(0)) {
40614 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
40615 	}
40616 	ZEND_VM_NEXT_OPCODE();
40617 }
40618 
ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40619 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40620 {
40621 	USE_OPLINE
40622 	zval *var_ptr;
40623 
40624 	var_ptr = EX_VAR(opline->op1.var);
40625 	fast_long_increment_function(var_ptr);
40626 	if (UNEXPECTED(1)) {
40627 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
40628 	}
40629 	ZEND_VM_NEXT_OPCODE();
40630 }
40631 
ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40632 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)
40633 {
40634 	USE_OPLINE
40635 	zval *var_ptr;
40636 
40637 	var_ptr = EX_VAR(opline->op1.var);
40638 	Z_LVAL_P(var_ptr)--;
40639 	if (UNEXPECTED(0)) {
40640 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
40641 	}
40642 	ZEND_VM_NEXT_OPCODE();
40643 }
40644 
ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40645 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)
40646 {
40647 	USE_OPLINE
40648 	zval *var_ptr;
40649 
40650 	var_ptr = EX_VAR(opline->op1.var);
40651 	Z_LVAL_P(var_ptr)--;
40652 	if (UNEXPECTED(1)) {
40653 		ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
40654 	}
40655 	ZEND_VM_NEXT_OPCODE();
40656 }
40657 
ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40658 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40659 {
40660 	USE_OPLINE
40661 	zval *var_ptr;
40662 
40663 	var_ptr = EX_VAR(opline->op1.var);
40664 	fast_long_decrement_function(var_ptr);
40665 	if (UNEXPECTED(0)) {
40666 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
40667 	}
40668 	ZEND_VM_NEXT_OPCODE();
40669 }
40670 
ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40671 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40672 {
40673 	USE_OPLINE
40674 	zval *var_ptr;
40675 
40676 	var_ptr = EX_VAR(opline->op1.var);
40677 	fast_long_decrement_function(var_ptr);
40678 	if (UNEXPECTED(1)) {
40679 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr);
40680 	}
40681 	ZEND_VM_NEXT_OPCODE();
40682 }
40683 
ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40684 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40685 {
40686 	USE_OPLINE
40687 	zval *var_ptr;
40688 
40689 	var_ptr = EX_VAR(opline->op1.var);
40690 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
40691 	Z_LVAL_P(var_ptr)++;
40692 	ZEND_VM_NEXT_OPCODE();
40693 }
40694 
ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40695 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40696 {
40697 	USE_OPLINE
40698 	zval *var_ptr;
40699 
40700 	var_ptr = EX_VAR(opline->op1.var);
40701 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
40702 	fast_long_increment_function(var_ptr);
40703 	ZEND_VM_NEXT_OPCODE();
40704 }
40705 
ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40706 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40707 {
40708 	USE_OPLINE
40709 	zval *var_ptr;
40710 
40711 	var_ptr = EX_VAR(opline->op1.var);
40712 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
40713 	Z_LVAL_P(var_ptr)--;
40714 	ZEND_VM_NEXT_OPCODE();
40715 }
40716 
ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40717 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40718 {
40719 	USE_OPLINE
40720 	zval *var_ptr;
40721 
40722 	var_ptr = EX_VAR(opline->op1.var);
40723 	ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr));
40724 	fast_long_decrement_function(var_ptr);
40725 	ZEND_VM_NEXT_OPCODE();
40726 }
40727 
ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40728 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40729 {
40730 	USE_OPLINE
40731 	zval *varptr, *arg;
40732 
40733 	varptr = EX_VAR(opline->op1.var);
40734 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
40735 
40736 	if (IS_CV == IS_CV) {
40737 		ZVAL_COPY(arg, varptr);
40738 	} else /* if (IS_CV == IS_VAR) */ {
40739 		ZVAL_COPY_VALUE(arg, varptr);
40740 	}
40741 
40742 	ZEND_VM_NEXT_OPCODE();
40743 }
40744 
ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40745 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40746 {
40747 	USE_OPLINE
40748 	zval *op1, *op2;
40749 
40750 	SAVE_OPLINE();
40751 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40752 	op2 = RT_CONSTANT(opline, opline->op2);
40753 	div_function(EX_VAR(opline->result.var), op1, op2);
40754 
40755 
40756 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40757 }
40758 
ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40759 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40760 {
40761 	USE_OPLINE
40762 	zval *op1, *op2;
40763 
40764 	SAVE_OPLINE();
40765 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40766 	op2 = RT_CONSTANT(opline, opline->op2);
40767 	pow_function(EX_VAR(opline->result.var), op1, op2);
40768 
40769 
40770 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40771 }
40772 
ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40773 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40774 {
40775 	USE_OPLINE
40776 	zval *op1, *op2;
40777 
40778 	op1 = EX_VAR(opline->op1.var);
40779 	op2 = RT_CONSTANT(opline, opline->op2);
40780 
40781 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
40782 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
40783 		zend_string *op1_str = Z_STR_P(op1);
40784 		zend_string *op2_str = Z_STR_P(op2);
40785 		zend_string *str;
40786 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
40787 
40788 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
40789 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
40790 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
40791 			} else {
40792 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
40793 			}
40794 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
40795 				zend_string_release_ex(op1_str, 0);
40796 			}
40797 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
40798 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
40799 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
40800 			} else {
40801 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
40802 			}
40803 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
40804 				zend_string_release_ex(op2_str, 0);
40805 			}
40806 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
40807 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
40808 			size_t len = ZSTR_LEN(op1_str);
40809 
40810 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
40811 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
40812 			}
40813 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
40814 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
40815 			GC_ADD_FLAGS(str, flags);
40816 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
40817 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
40818 				zend_string_release_ex(op2_str, 0);
40819 			}
40820 		} else {
40821 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
40822 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
40823 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
40824 			GC_ADD_FLAGS(str, flags);
40825 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
40826 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
40827 				zend_string_release_ex(op1_str, 0);
40828 			}
40829 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
40830 				zend_string_release_ex(op2_str, 0);
40831 			}
40832 		}
40833 		ZEND_VM_NEXT_OPCODE();
40834 	} else {
40835 		SAVE_OPLINE();
40836 
40837 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
40838 			op1 = ZVAL_UNDEFINED_OP1();
40839 		}
40840 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
40841 			op2 = ZVAL_UNDEFINED_OP2();
40842 		}
40843 		concat_function(EX_VAR(opline->result.var), op1, op2);
40844 
40845 
40846 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
40847 	}
40848 }
40849 
ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40850 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40851 {
40852 	USE_OPLINE
40853 	zval *op1, *op2;
40854 	bool result;
40855 
40856 	SAVE_OPLINE();
40857 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40858 	op2 = RT_CONSTANT(opline, opline->op2);
40859 	result = fast_is_identical_function(op1, op2);
40860 
40861 
40862 	ZEND_VM_SMART_BRANCH(result, 1);
40863 }
40864 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40865 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40866 {
40867 	USE_OPLINE
40868 	zval *op1, *op2;
40869 	bool result;
40870 
40871 	SAVE_OPLINE();
40872 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
40873 	op2 = RT_CONSTANT(opline, opline->op2);
40874 	result = fast_is_not_identical_function(op1, op2);
40875 
40876 
40877 	ZEND_VM_SMART_BRANCH(result, 1);
40878 }
40879 
ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40880 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40881 {
40882 	USE_OPLINE
40883 	zval *op1, *op2;
40884 	double d1, d2;
40885 
40886 	op1 = EX_VAR(opline->op1.var);
40887 	op2 = RT_CONSTANT(opline, opline->op2);
40888 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
40889 		/* pass */
40890 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
40891 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
40892 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
40893 is_equal_true:
40894 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
40895 			} else {
40896 is_equal_false:
40897 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
40898 			}
40899 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
40900 			d1 = (double)Z_LVAL_P(op1);
40901 			d2 = Z_DVAL_P(op2);
40902 			goto is_equal_double;
40903 		}
40904 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
40905 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
40906 			d1 = Z_DVAL_P(op1);
40907 			d2 = Z_DVAL_P(op2);
40908 is_equal_double:
40909 			if (d1 == d2) {
40910 				goto is_equal_true;
40911 			} else {
40912 				goto is_equal_false;
40913 			}
40914 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
40915 			d1 = Z_DVAL_P(op1);
40916 			d2 = (double)Z_LVAL_P(op2);
40917 			goto is_equal_double;
40918 		}
40919 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
40920 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
40921 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
40922 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
40923 				zval_ptr_dtor_str(op1);
40924 			}
40925 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
40926 				zval_ptr_dtor_str(op2);
40927 			}
40928 			if (result) {
40929 				goto is_equal_true;
40930 			} else {
40931 				goto is_equal_false;
40932 			}
40933 		}
40934 	}
40935 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
40936 }
40937 
ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40938 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40939 {
40940 	USE_OPLINE
40941 	zval *op1, *op2;
40942 	double d1, d2;
40943 
40944 	op1 = EX_VAR(opline->op1.var);
40945 	op2 = RT_CONSTANT(opline, opline->op2);
40946 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
40947 		/* pass */
40948 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
40949 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
40950 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
40951 is_equal_true:
40952 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
40953 			} else {
40954 is_equal_false:
40955 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
40956 			}
40957 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
40958 			d1 = (double)Z_LVAL_P(op1);
40959 			d2 = Z_DVAL_P(op2);
40960 			goto is_equal_double;
40961 		}
40962 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
40963 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
40964 			d1 = Z_DVAL_P(op1);
40965 			d2 = Z_DVAL_P(op2);
40966 is_equal_double:
40967 			if (d1 == d2) {
40968 				goto is_equal_true;
40969 			} else {
40970 				goto is_equal_false;
40971 			}
40972 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
40973 			d1 = Z_DVAL_P(op1);
40974 			d2 = (double)Z_LVAL_P(op2);
40975 			goto is_equal_double;
40976 		}
40977 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
40978 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
40979 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
40980 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
40981 				zval_ptr_dtor_str(op1);
40982 			}
40983 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
40984 				zval_ptr_dtor_str(op2);
40985 			}
40986 			if (result) {
40987 				goto is_equal_true;
40988 			} else {
40989 				goto is_equal_false;
40990 			}
40991 		}
40992 	}
40993 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
40994 }
40995 
ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)40996 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
40997 {
40998 	USE_OPLINE
40999 	zval *op1, *op2;
41000 	double d1, d2;
41001 
41002 	op1 = EX_VAR(opline->op1.var);
41003 	op2 = RT_CONSTANT(opline, opline->op2);
41004 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
41005 		/* pass */
41006 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41007 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41008 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
41009 is_equal_true:
41010 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
41011 			} else {
41012 is_equal_false:
41013 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
41014 			}
41015 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41016 			d1 = (double)Z_LVAL_P(op1);
41017 			d2 = Z_DVAL_P(op2);
41018 			goto is_equal_double;
41019 		}
41020 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
41021 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41022 			d1 = Z_DVAL_P(op1);
41023 			d2 = Z_DVAL_P(op2);
41024 is_equal_double:
41025 			if (d1 == d2) {
41026 				goto is_equal_true;
41027 			} else {
41028 				goto is_equal_false;
41029 			}
41030 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41031 			d1 = Z_DVAL_P(op1);
41032 			d2 = (double)Z_LVAL_P(op2);
41033 			goto is_equal_double;
41034 		}
41035 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41036 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41037 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
41038 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41039 				zval_ptr_dtor_str(op1);
41040 			}
41041 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41042 				zval_ptr_dtor_str(op2);
41043 			}
41044 			if (result) {
41045 				goto is_equal_true;
41046 			} else {
41047 				goto is_equal_false;
41048 			}
41049 		}
41050 	}
41051 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41052 }
41053 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41054 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41055 {
41056 	USE_OPLINE
41057 	zval *op1, *op2;
41058 	double d1, d2;
41059 
41060 	op1 = EX_VAR(opline->op1.var);
41061 	op2 = RT_CONSTANT(opline, opline->op2);
41062 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
41063 		/* pass */
41064 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41065 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41066 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
41067 is_not_equal_true:
41068 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
41069 			} else {
41070 is_not_equal_false:
41071 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
41072 			}
41073 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41074 			d1 = (double)Z_LVAL_P(op1);
41075 			d2 = Z_DVAL_P(op2);
41076 			goto is_not_equal_double;
41077 		}
41078 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
41079 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41080 			d1 = Z_DVAL_P(op1);
41081 			d2 = Z_DVAL_P(op2);
41082 is_not_equal_double:
41083 			if (d1 != d2) {
41084 				goto is_not_equal_true;
41085 			} else {
41086 				goto is_not_equal_false;
41087 			}
41088 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41089 			d1 = Z_DVAL_P(op1);
41090 			d2 = (double)Z_LVAL_P(op2);
41091 			goto is_not_equal_double;
41092 		}
41093 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41094 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41095 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
41096 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41097 				zval_ptr_dtor_str(op1);
41098 			}
41099 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41100 				zval_ptr_dtor_str(op2);
41101 			}
41102 			if (!result) {
41103 				goto is_not_equal_true;
41104 			} else {
41105 				goto is_not_equal_false;
41106 			}
41107 		}
41108 	}
41109 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41110 }
41111 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41112 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41113 {
41114 	USE_OPLINE
41115 	zval *op1, *op2;
41116 	double d1, d2;
41117 
41118 	op1 = EX_VAR(opline->op1.var);
41119 	op2 = RT_CONSTANT(opline, opline->op2);
41120 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
41121 		/* pass */
41122 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41123 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41124 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
41125 is_not_equal_true:
41126 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
41127 			} else {
41128 is_not_equal_false:
41129 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
41130 			}
41131 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41132 			d1 = (double)Z_LVAL_P(op1);
41133 			d2 = Z_DVAL_P(op2);
41134 			goto is_not_equal_double;
41135 		}
41136 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
41137 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41138 			d1 = Z_DVAL_P(op1);
41139 			d2 = Z_DVAL_P(op2);
41140 is_not_equal_double:
41141 			if (d1 != d2) {
41142 				goto is_not_equal_true;
41143 			} else {
41144 				goto is_not_equal_false;
41145 			}
41146 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41147 			d1 = Z_DVAL_P(op1);
41148 			d2 = (double)Z_LVAL_P(op2);
41149 			goto is_not_equal_double;
41150 		}
41151 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41152 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41153 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
41154 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41155 				zval_ptr_dtor_str(op1);
41156 			}
41157 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41158 				zval_ptr_dtor_str(op2);
41159 			}
41160 			if (!result) {
41161 				goto is_not_equal_true;
41162 			} else {
41163 				goto is_not_equal_false;
41164 			}
41165 		}
41166 	}
41167 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41168 }
41169 
ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41170 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41171 {
41172 	USE_OPLINE
41173 	zval *op1, *op2;
41174 	double d1, d2;
41175 
41176 	op1 = EX_VAR(opline->op1.var);
41177 	op2 = RT_CONSTANT(opline, opline->op2);
41178 	if (1 && IS_CV == IS_CONST && IS_CONST == IS_CONST) {
41179 		/* pass */
41180 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
41181 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41182 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
41183 is_not_equal_true:
41184 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
41185 			} else {
41186 is_not_equal_false:
41187 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
41188 			}
41189 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41190 			d1 = (double)Z_LVAL_P(op1);
41191 			d2 = Z_DVAL_P(op2);
41192 			goto is_not_equal_double;
41193 		}
41194 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
41195 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
41196 			d1 = Z_DVAL_P(op1);
41197 			d2 = Z_DVAL_P(op2);
41198 is_not_equal_double:
41199 			if (d1 != d2) {
41200 				goto is_not_equal_true;
41201 			} else {
41202 				goto is_not_equal_false;
41203 			}
41204 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
41205 			d1 = Z_DVAL_P(op1);
41206 			d2 = (double)Z_LVAL_P(op2);
41207 			goto is_not_equal_double;
41208 		}
41209 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
41210 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
41211 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
41212 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
41213 				zval_ptr_dtor_str(op1);
41214 			}
41215 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
41216 				zval_ptr_dtor_str(op2);
41217 			}
41218 			if (!result) {
41219 				goto is_not_equal_true;
41220 			} else {
41221 				goto is_not_equal_false;
41222 			}
41223 		}
41224 	}
41225 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
41226 }
41227 
ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41228 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41229 {
41230 	USE_OPLINE
41231 	zval *op1, *op2;
41232 
41233 	SAVE_OPLINE();
41234 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
41235 	op2 = RT_CONSTANT(opline, opline->op2);
41236 	compare_function(EX_VAR(opline->result.var), op1, op2);
41237 
41238 
41239 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41240 }
41241 
ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41242 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41243 {
41244 	USE_OPLINE
41245 	zval *op1, *op2;
41246 
41247 	SAVE_OPLINE();
41248 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
41249 	op2 = RT_CONSTANT(opline, opline->op2);
41250 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
41251 
41252 
41253 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41254 }
41255 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41256 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41257 {
41258 	USE_OPLINE
41259 	zval *object;
41260 	zval *property;
41261 	zval *value;
41262 	zval *zptr;
41263 	void **cache_slot;
41264 	zend_property_info *prop_info;
41265 	zend_object *zobj;
41266 	zend_string *name, *tmp_name;
41267 
41268 	SAVE_OPLINE();
41269 	object = EX_VAR(opline->op1.var);
41270 	property = RT_CONSTANT(opline, opline->op2);
41271 
41272 	do {
41273 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
41274 
41275 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
41276 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
41277 				object = Z_REFVAL_P(object);
41278 				goto assign_op_object;
41279 			}
41280 			if (IS_CV == IS_CV
41281 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
41282 				ZVAL_UNDEFINED_OP1();
41283 			}
41284 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
41285 			break;
41286 		}
41287 
41288 assign_op_object:
41289 		/* here we are sure we are dealing with an object */
41290 		zobj = Z_OBJ_P(object);
41291 		if (IS_CONST == IS_CONST) {
41292 			name = Z_STR_P(property);
41293 		} else {
41294 			name = zval_try_get_tmp_string(property, &tmp_name);
41295 			if (UNEXPECTED(!name)) {
41296 				UNDEF_RESULT();
41297 				break;
41298 			}
41299 		}
41300 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
41301 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
41302 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
41303 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41304 					ZVAL_NULL(EX_VAR(opline->result.var));
41305 				}
41306 			} else {
41307 				zval *orig_zptr = zptr;
41308 				zend_reference *ref;
41309 
41310 				do {
41311 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
41312 						ref = Z_REF_P(zptr);
41313 						zptr = Z_REFVAL_P(zptr);
41314 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
41315 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
41316 							break;
41317 						}
41318 					}
41319 
41320 					if (IS_CONST == IS_CONST) {
41321 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
41322 					} else {
41323 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
41324 					}
41325 					if (UNEXPECTED(prop_info)) {
41326 						/* special case for typed properties */
41327 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
41328 					} else {
41329 						zend_binary_op(zptr, zptr, value OPLINE_CC);
41330 					}
41331 				} while (0);
41332 
41333 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41334 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
41335 				}
41336 			}
41337 		} else {
41338 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
41339 		}
41340 		if (IS_CONST != IS_CONST) {
41341 			zend_tmp_string_release(tmp_name);
41342 		}
41343 	} while (0);
41344 
41345 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
41346 
41347 
41348 	/* assign_obj has two opcodes! */
41349 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41350 }
41351 
41352 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41353 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41354 {
41355 	USE_OPLINE
41356 	zval *var_ptr;
41357 	zval *value, *container, *dim;
41358 	HashTable *ht;
41359 
41360 	SAVE_OPLINE();
41361 	container = EX_VAR(opline->op1.var);
41362 
41363 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41364 assign_dim_op_array:
41365 		SEPARATE_ARRAY(container);
41366 		ht = Z_ARRVAL_P(container);
41367 assign_dim_op_new_array:
41368 		dim = RT_CONSTANT(opline, opline->op2);
41369 		if (IS_CONST == IS_UNUSED) {
41370 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
41371 			if (UNEXPECTED(!var_ptr)) {
41372 				zend_cannot_add_element();
41373 				goto assign_dim_op_ret_null;
41374 			}
41375 		} else {
41376 			if (IS_CONST == IS_CONST) {
41377 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
41378 			} else {
41379 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
41380 			}
41381 			if (UNEXPECTED(!var_ptr)) {
41382 				goto assign_dim_op_ret_null;
41383 			}
41384 		}
41385 
41386 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
41387 
41388 		do {
41389 			if (IS_CONST != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
41390 				zend_reference *ref = Z_REF_P(var_ptr);
41391 				var_ptr = Z_REFVAL_P(var_ptr);
41392 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
41393 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
41394 					break;
41395 				}
41396 			}
41397 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
41398 		} while (0);
41399 
41400 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41401 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
41402 		}
41403 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
41404 	} else {
41405 		if (EXPECTED(Z_ISREF_P(container))) {
41406 			container = Z_REFVAL_P(container);
41407 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41408 				goto assign_dim_op_array;
41409 			}
41410 		}
41411 
41412 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
41413 			zend_object *obj = Z_OBJ_P(container);
41414 
41415 			dim = RT_CONSTANT(opline, opline->op2);
41416 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
41417 				dim++;
41418 			}
41419 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
41420 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
41421 			uint8_t old_type;
41422 
41423 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
41424 				ZVAL_UNDEFINED_OP1();
41425 			}
41426 			ht = zend_new_array(8);
41427 			old_type = Z_TYPE_P(container);
41428 			ZVAL_ARR(container, ht);
41429 			if (UNEXPECTED(old_type == IS_FALSE)) {
41430 				GC_ADDREF(ht);
41431 				zend_false_to_array_deprecated();
41432 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
41433 					zend_array_destroy(ht);
41434 					goto assign_dim_op_ret_null;
41435 				}
41436 			}
41437 			goto assign_dim_op_new_array;
41438 		} else {
41439 			dim = RT_CONSTANT(opline, opline->op2);
41440 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
41441 assign_dim_op_ret_null:
41442 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
41443 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41444 				ZVAL_NULL(EX_VAR(opline->result.var));
41445 			}
41446 		}
41447 	}
41448 
41449 
41450 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
41451 }
41452 
ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41453 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41454 {
41455 	USE_OPLINE
41456 	zval *var_ptr;
41457 	zval *value;
41458 
41459 	SAVE_OPLINE();
41460 	value = RT_CONSTANT(opline, opline->op2);
41461 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
41462 
41463 	do {
41464 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
41465 			zend_reference *ref = Z_REF_P(var_ptr);
41466 			var_ptr = Z_REFVAL_P(var_ptr);
41467 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
41468 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
41469 				break;
41470 			}
41471 		}
41472 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
41473 	} while (0);
41474 
41475 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41476 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
41477 	}
41478 
41479 
41480 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41481 }
41482 
ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41483 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41484 {
41485 	USE_OPLINE
41486 	zval *object;
41487 	zval *property;
41488 	zval *zptr;
41489 	void **cache_slot;
41490 	zend_property_info *prop_info;
41491 	zend_object *zobj;
41492 	zend_string *name, *tmp_name;
41493 
41494 	SAVE_OPLINE();
41495 	object = EX_VAR(opline->op1.var);
41496 	property = RT_CONSTANT(opline, opline->op2);
41497 
41498 	do {
41499 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
41500 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
41501 				object = Z_REFVAL_P(object);
41502 				goto pre_incdec_object;
41503 			}
41504 			if (IS_CV == IS_CV
41505 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
41506 				ZVAL_UNDEFINED_OP1();
41507 			}
41508 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
41509 			break;
41510 		}
41511 
41512 pre_incdec_object:
41513 		/* here we are sure we are dealing with an object */
41514 		zobj = Z_OBJ_P(object);
41515 		if (IS_CONST == IS_CONST) {
41516 			name = Z_STR_P(property);
41517 		} else {
41518 			name = zval_try_get_tmp_string(property, &tmp_name);
41519 			if (UNEXPECTED(!name)) {
41520 				UNDEF_RESULT();
41521 				break;
41522 			}
41523 		}
41524 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
41525 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
41526 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
41527 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
41528 					ZVAL_NULL(EX_VAR(opline->result.var));
41529 				}
41530 			} else {
41531 				if (IS_CONST == IS_CONST) {
41532 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
41533 				} else {
41534 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
41535 				}
41536 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
41537 			}
41538 		} else {
41539 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
41540 		}
41541 		if (IS_CONST != IS_CONST) {
41542 			zend_tmp_string_release(tmp_name);
41543 		}
41544 	} while (0);
41545 
41546 
41547 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41548 }
41549 
ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41550 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41551 {
41552 	USE_OPLINE
41553 	zval *object;
41554 	zval *property;
41555 	zval *zptr;
41556 	void **cache_slot;
41557 	zend_property_info *prop_info;
41558 	zend_object *zobj;
41559 	zend_string *name, *tmp_name;
41560 
41561 	SAVE_OPLINE();
41562 	object = EX_VAR(opline->op1.var);
41563 	property = RT_CONSTANT(opline, opline->op2);
41564 
41565 	do {
41566 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
41567 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
41568 				object = Z_REFVAL_P(object);
41569 				goto post_incdec_object;
41570 			}
41571 			if (IS_CV == IS_CV
41572 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
41573 				ZVAL_UNDEFINED_OP1();
41574 			}
41575 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
41576 			break;
41577 		}
41578 
41579 post_incdec_object:
41580 		/* here we are sure we are dealing with an object */
41581 		zobj = Z_OBJ_P(object);
41582 		if (IS_CONST == IS_CONST) {
41583 			name = Z_STR_P(property);
41584 		} else {
41585 			name = zval_try_get_tmp_string(property, &tmp_name);
41586 			if (UNEXPECTED(!name)) {
41587 				ZVAL_UNDEF(EX_VAR(opline->result.var));
41588 				break;
41589 			}
41590 		}
41591 		cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
41592 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
41593 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
41594 				ZVAL_NULL(EX_VAR(opline->result.var));
41595 			} else {
41596 				if (IS_CONST == IS_CONST) {
41597 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
41598 				} else {
41599 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
41600 				}
41601 
41602 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
41603 			}
41604 		} else {
41605 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
41606 		}
41607 		if (IS_CONST != IS_CONST) {
41608 			zend_tmp_string_release(tmp_name);
41609 		}
41610 	} while (0);
41611 
41612 
41613 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41614 }
41615 
ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41616 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41617 {
41618 	USE_OPLINE
41619 	zval *container, *dim, *value;
41620 
41621 	SAVE_OPLINE();
41622 	container = EX_VAR(opline->op1.var);
41623 	dim = RT_CONSTANT(opline, opline->op2);
41624 	if (IS_CV != IS_CONST) {
41625 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41626 fetch_dim_r_array:
41627 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC);
41628 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
41629 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
41630 			container = Z_REFVAL_P(container);
41631 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
41632 				goto fetch_dim_r_array;
41633 			} else {
41634 				goto fetch_dim_r_slow;
41635 			}
41636 		} else {
41637 fetch_dim_r_slow:
41638 			if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
41639 				dim++;
41640 			}
41641 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
41642 		}
41643 	} else {
41644 		zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
41645 	}
41646 
41647 
41648 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41649 }
41650 
ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41651 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41652 {
41653 	USE_OPLINE
41654 	zval *container;
41655 
41656 	SAVE_OPLINE();
41657 	container = EX_VAR(opline->op1.var);
41658 	zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
41659 
41660 	if (IS_CV == IS_VAR) {
41661 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
41662 	}
41663 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41664 }
41665 
ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41666 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41667 {
41668 	USE_OPLINE
41669 	zval *container;
41670 
41671 	SAVE_OPLINE();
41672 	container = EX_VAR(opline->op1.var);
41673 	zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
41674 
41675 	if (IS_CV == IS_VAR) {
41676 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
41677 	}
41678 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41679 }
41680 
ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41681 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41682 {
41683 	USE_OPLINE
41684 	zval *container;
41685 
41686 	SAVE_OPLINE();
41687 	container = EX_VAR(opline->op1.var);
41688 	zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
41689 
41690 
41691 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41692 }
41693 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41694 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41695 {
41696 #if 0
41697 	USE_OPLINE
41698 #endif
41699 
41700 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
41701 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
41702 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
41703 		}
41704 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
41705 	} else {
41706 		if (IS_CONST == IS_UNUSED) {
41707 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
41708 		}
41709 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
41710 	}
41711 }
41712 
ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41713 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41714 {
41715 	USE_OPLINE
41716 	zval *container;
41717 
41718 	SAVE_OPLINE();
41719 	container = EX_VAR(opline->op1.var);
41720 	zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC);
41721 
41722 	if (IS_CV == IS_VAR) {
41723 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
41724 	}
41725 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41726 }
41727 
ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41728 static zend_always_inline ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41729 {
41730 	USE_OPLINE
41731 	zval *container;
41732 	void **cache_slot = NULL;
41733 
41734 	SAVE_OPLINE();
41735 	container = EX_VAR(opline->op1.var);
41736 
41737 	if (IS_CV == IS_CONST ||
41738 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
41739 		do {
41740 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
41741 				container = Z_REFVAL_P(container);
41742 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
41743 					break;
41744 				}
41745 			}
41746 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
41747 				ZVAL_UNDEFINED_OP1();
41748 			}
41749 			zend_wrong_property_read(container, RT_CONSTANT(opline, opline->op2));
41750 			ZVAL_NULL(EX_VAR(opline->result.var));
41751 			goto fetch_obj_r_finish;
41752 		} while (0);
41753 	}
41754 
41755 	/* here we are sure we are dealing with an object */
41756 	do {
41757 		zend_object *zobj = Z_OBJ_P(container);
41758 		zend_string *name, *tmp_name;
41759 		zval *retval;
41760 
41761 		if (IS_CONST == IS_CONST) {
41762 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
41763 
41764 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
41765 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
41766 
41767 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
41768 					retval = OBJ_PROP(zobj, prop_offset);
41769 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
41770 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
41771 							goto fetch_obj_r_copy;
41772 						} else {
41773 fetch_obj_r_fast_copy:
41774 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
41775 							ZEND_VM_NEXT_OPCODE();
41776 						}
41777 					}
41778 				} else if (EXPECTED(zobj->properties != NULL)) {
41779 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
41780 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
41781 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
41782 
41783 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
41784 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
41785 
41786 							if (EXPECTED(p->key == name) ||
41787 							    (EXPECTED(p->h == ZSTR_H(name)) &&
41788 							     EXPECTED(p->key != NULL) &&
41789 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
41790 								retval = &p->val;
41791 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
41792 									goto fetch_obj_r_copy;
41793 								} else {
41794 									goto fetch_obj_r_fast_copy;
41795 								}
41796 							}
41797 						}
41798 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
41799 					}
41800 					retval = zend_hash_find_known_hash(zobj->properties, name);
41801 					if (EXPECTED(retval)) {
41802 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
41803 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
41804 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
41805 							goto fetch_obj_r_copy;
41806 						} else {
41807 							goto fetch_obj_r_fast_copy;
41808 						}
41809 					}
41810 				}
41811 			}
41812 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
41813 		} else {
41814 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
41815 			if (UNEXPECTED(!name)) {
41816 				ZVAL_UNDEF(EX_VAR(opline->result.var));
41817 				break;
41818 			}
41819 		}
41820 
41821 #if ZEND_DEBUG
41822 		/* For non-standard object handlers, verify a declared property type in debug builds.
41823 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
41824 		zend_property_info *prop_info = NULL;
41825 		if (zobj->handlers->read_property != zend_std_read_property) {
41826 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
41827 		}
41828 #endif
41829 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
41830 #if ZEND_DEBUG
41831 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
41832 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
41833 			ZVAL_OPT_DEREF(retval);
41834 			zend_verify_property_type(prop_info, retval, /* strict */ true);
41835 		}
41836 #endif
41837 
41838 		if (IS_CONST != IS_CONST) {
41839 			zend_tmp_string_release(tmp_name);
41840 		}
41841 
41842 		if (retval != EX_VAR(opline->result.var)) {
41843 fetch_obj_r_copy:
41844 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
41845 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
41846 			zend_unwrap_reference(retval);
41847 		}
41848 	} while (0);
41849 
41850 fetch_obj_r_finish:
41851 
41852 
41853 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41854 }
41855 
ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41856 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41857 {
41858 	ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
41859 }
41860 
ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41861 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41862 {
41863 	USE_OPLINE
41864 	zval *property, *container, *result;
41865 
41866 	SAVE_OPLINE();
41867 
41868 	container = EX_VAR(opline->op1.var);
41869 	property = RT_CONSTANT(opline, opline->op2);
41870 	result = EX_VAR(opline->result.var);
41871 	zend_fetch_property_address(
41872 		result, container, IS_CV, property, IS_CONST,
41873 		((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
41874 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
41875 
41876 	if (IS_CV == IS_VAR) {
41877 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
41878 	}
41879 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41880 }
41881 
ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41882 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41883 {
41884 	USE_OPLINE
41885 	zval *property, *container, *result;
41886 
41887 	SAVE_OPLINE();
41888 	container = EX_VAR(opline->op1.var);
41889 	property = RT_CONSTANT(opline, opline->op2);
41890 	result = EX_VAR(opline->result.var);
41891 	zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
41892 
41893 	if (IS_CV == IS_VAR) {
41894 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
41895 	}
41896 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
41897 }
41898 
ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)41899 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
41900 {
41901 	USE_OPLINE
41902 	zval *container;
41903 	void **cache_slot = NULL;
41904 
41905 	SAVE_OPLINE();
41906 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
41907 
41908 	if (IS_CV == IS_CONST ||
41909 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
41910 		do {
41911 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
41912 				container = Z_REFVAL_P(container);
41913 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
41914 					break;
41915 				}
41916 			}
41917 			if (IS_CONST == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
41918 				ZVAL_UNDEFINED_OP2();
41919 			}
41920 			ZVAL_NULL(EX_VAR(opline->result.var));
41921 			goto fetch_obj_is_finish;
41922 		} while (0);
41923 	}
41924 
41925 	/* here we are sure we are dealing with an object */
41926 	do {
41927 		zend_object *zobj = Z_OBJ_P(container);
41928 		zend_string *name, *tmp_name;
41929 		zval *retval;
41930 
41931 		if (IS_CONST == IS_CONST) {
41932 			cache_slot = CACHE_ADDR(opline->extended_value);
41933 
41934 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
41935 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
41936 
41937 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
41938 					retval = OBJ_PROP(zobj, prop_offset);
41939 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
41940 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
41941 							goto fetch_obj_is_copy;
41942 						} else {
41943 fetch_obj_is_fast_copy:
41944 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
41945 							ZEND_VM_NEXT_OPCODE();
41946 						}
41947 					}
41948 				} else if (EXPECTED(zobj->properties != NULL)) {
41949 					name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
41950 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
41951 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
41952 
41953 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
41954 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
41955 
41956 							if (EXPECTED(p->key == name) ||
41957 							    (EXPECTED(p->h == ZSTR_H(name)) &&
41958 							     EXPECTED(p->key != NULL) &&
41959 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
41960 								retval = &p->val;
41961 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
41962 									goto fetch_obj_is_copy;
41963 								} else {
41964 									goto fetch_obj_is_fast_copy;
41965 								}
41966 							}
41967 						}
41968 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
41969 					}
41970 					retval = zend_hash_find_known_hash(zobj->properties, name);
41971 					if (EXPECTED(retval)) {
41972 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
41973 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
41974 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
41975 							goto fetch_obj_is_copy;
41976 						} else {
41977 							goto fetch_obj_is_fast_copy;
41978 						}
41979 					}
41980 				}
41981 			}
41982 			name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
41983 		} else {
41984 			name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
41985 			if (UNEXPECTED(!name)) {
41986 				ZVAL_UNDEF(EX_VAR(opline->result.var));
41987 				break;
41988 			}
41989 		}
41990 
41991 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
41992 
41993 		if (IS_CONST != IS_CONST) {
41994 			zend_tmp_string_release(tmp_name);
41995 		}
41996 
41997 		if (retval != EX_VAR(opline->result.var)) {
41998 fetch_obj_is_copy:
41999 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
42000 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
42001 			zend_unwrap_reference(retval);
42002 		}
42003 	} while (0);
42004 
42005 fetch_obj_is_finish:
42006 
42007 
42008 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42009 }
42010 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42011 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42012 {
42013 #if 0
42014 	USE_OPLINE
42015 #endif
42016 
42017 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
42018 		/* Behave like FETCH_OBJ_W */
42019 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
42020 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42021 		}
42022 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42023 	} else {
42024 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
42025 	}
42026 }
42027 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42028 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42029 {
42030 	USE_OPLINE
42031 	zval *container, *property, *result;
42032 
42033 	SAVE_OPLINE();
42034 	container = EX_VAR(opline->op1.var);
42035 	property = RT_CONSTANT(opline, opline->op2);
42036 	result = EX_VAR(opline->result.var);
42037 	zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0 OPLINE_CC EXECUTE_DATA_CC);
42038 
42039 	if (IS_CV == IS_VAR) {
42040 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
42041 	}
42042 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
42043 }
42044 
ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42045 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42046 {
42047 	USE_OPLINE
42048 	zval *object, *value, tmp;
42049 	zend_object *zobj;
42050 	zend_string *name, *tmp_name;
42051 	zend_refcounted *garbage = NULL;
42052 
42053 	SAVE_OPLINE();
42054 	object = EX_VAR(opline->op1.var);
42055 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
42056 
42057 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
42058 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
42059 			object = Z_REFVAL_P(object);
42060 			goto assign_object;
42061 		}
42062 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
42063 		value = &EG(uninitialized_zval);
42064 		goto free_and_exit_assign_obj;
42065 	}
42066 
42067 assign_object:
42068 	zobj = Z_OBJ_P(object);
42069 	if (IS_CONST == IS_CONST) {
42070 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
42071 			void **cache_slot = CACHE_ADDR(opline->extended_value);
42072 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
42073 			zval *property_val;
42074 
42075 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
42076 				property_val = OBJ_PROP(zobj, prop_offset);
42077 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
42078 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
42079 
42080 					if (UNEXPECTED(prop_info != NULL)) {
42081 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
42082 						goto free_and_exit_assign_obj;
42083 					} else {
42084 fast_assign_obj:
42085 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
42086 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42087 							ZVAL_COPY(EX_VAR(opline->result.var), value);
42088 						}
42089 						goto exit_assign_obj;
42090 					}
42091 				}
42092 			} else {
42093 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42094 				if (EXPECTED(zobj->properties != NULL)) {
42095 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
42096 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
42097 							GC_DELREF(zobj->properties);
42098 						}
42099 						zobj->properties = zend_array_dup(zobj->properties);
42100 					}
42101 					property_val = zend_hash_find_known_hash(zobj->properties, name);
42102 					if (property_val) {
42103 						goto fast_assign_obj;
42104 					}
42105 				}
42106 
42107 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
42108 					if (EXPECTED(zobj->properties == NULL)) {
42109 						rebuild_object_properties(zobj);
42110 					}
42111 					if (IS_CONST == IS_CONST) {
42112 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
42113 							Z_ADDREF_P(value);
42114 						}
42115 					} else if (IS_CONST != IS_TMP_VAR) {
42116 						if (Z_ISREF_P(value)) {
42117 							if (IS_CONST == IS_VAR) {
42118 								zend_reference *ref = Z_REF_P(value);
42119 								if (GC_DELREF(ref) == 0) {
42120 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
42121 									efree_size(ref, sizeof(zend_reference));
42122 									value = &tmp;
42123 								} else {
42124 									value = Z_REFVAL_P(value);
42125 									Z_TRY_ADDREF_P(value);
42126 								}
42127 							} else {
42128 								value = Z_REFVAL_P(value);
42129 								Z_TRY_ADDREF_P(value);
42130 							}
42131 						} else if (IS_CONST == IS_CV) {
42132 							Z_TRY_ADDREF_P(value);
42133 						}
42134 						}
42135 					zend_hash_add_new(zobj->properties, name, value);
42136 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42137 						ZVAL_COPY(EX_VAR(opline->result.var), value);
42138 					}
42139 					goto exit_assign_obj;
42140 				}
42141 			}
42142 		}
42143 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42144 	} else {
42145 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
42146 		if (UNEXPECTED(!name)) {
42147 
42148 			UNDEF_RESULT();
42149 			goto exit_assign_obj;
42150 		}
42151 	}
42152 
42153 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
42154 		ZVAL_DEREF(value);
42155 	}
42156 
42157 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
42158 
42159 	if (IS_CONST != IS_CONST) {
42160 		zend_tmp_string_release(tmp_name);
42161 	}
42162 
42163 free_and_exit_assign_obj:
42164 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
42165 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
42166 	}
42167 
42168 exit_assign_obj:
42169 	if (garbage) {
42170 		GC_DTOR_NO_REF(garbage);
42171 	}
42172 
42173 
42174 	/* assign_obj has two opcodes! */
42175 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42176 }
42177 
42178 /* 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)42179 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42180 {
42181 	USE_OPLINE
42182 	zval *object, *value, tmp;
42183 	zend_object *zobj;
42184 	zend_string *name, *tmp_name;
42185 	zend_refcounted *garbage = NULL;
42186 
42187 	SAVE_OPLINE();
42188 	object = EX_VAR(opline->op1.var);
42189 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
42190 
42191 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
42192 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
42193 			object = Z_REFVAL_P(object);
42194 			goto assign_object;
42195 		}
42196 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
42197 		value = &EG(uninitialized_zval);
42198 		goto free_and_exit_assign_obj;
42199 	}
42200 
42201 assign_object:
42202 	zobj = Z_OBJ_P(object);
42203 	if (IS_CONST == IS_CONST) {
42204 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
42205 			void **cache_slot = CACHE_ADDR(opline->extended_value);
42206 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
42207 			zval *property_val;
42208 
42209 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
42210 				property_val = OBJ_PROP(zobj, prop_offset);
42211 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
42212 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
42213 
42214 					if (UNEXPECTED(prop_info != NULL)) {
42215 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
42216 						goto free_and_exit_assign_obj;
42217 					} else {
42218 fast_assign_obj:
42219 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
42220 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42221 							ZVAL_COPY(EX_VAR(opline->result.var), value);
42222 						}
42223 						goto exit_assign_obj;
42224 					}
42225 				}
42226 			} else {
42227 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42228 				if (EXPECTED(zobj->properties != NULL)) {
42229 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
42230 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
42231 							GC_DELREF(zobj->properties);
42232 						}
42233 						zobj->properties = zend_array_dup(zobj->properties);
42234 					}
42235 					property_val = zend_hash_find_known_hash(zobj->properties, name);
42236 					if (property_val) {
42237 						goto fast_assign_obj;
42238 					}
42239 				}
42240 
42241 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
42242 					if (EXPECTED(zobj->properties == NULL)) {
42243 						rebuild_object_properties(zobj);
42244 					}
42245 					if (IS_TMP_VAR == IS_CONST) {
42246 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
42247 							Z_ADDREF_P(value);
42248 						}
42249 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
42250 						if (Z_ISREF_P(value)) {
42251 							if (IS_TMP_VAR == IS_VAR) {
42252 								zend_reference *ref = Z_REF_P(value);
42253 								if (GC_DELREF(ref) == 0) {
42254 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
42255 									efree_size(ref, sizeof(zend_reference));
42256 									value = &tmp;
42257 								} else {
42258 									value = Z_REFVAL_P(value);
42259 									Z_TRY_ADDREF_P(value);
42260 								}
42261 							} else {
42262 								value = Z_REFVAL_P(value);
42263 								Z_TRY_ADDREF_P(value);
42264 							}
42265 						} else if (IS_TMP_VAR == IS_CV) {
42266 							Z_TRY_ADDREF_P(value);
42267 						}
42268 						}
42269 					zend_hash_add_new(zobj->properties, name, value);
42270 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42271 						ZVAL_COPY(EX_VAR(opline->result.var), value);
42272 					}
42273 					goto exit_assign_obj;
42274 				}
42275 			}
42276 		}
42277 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42278 	} else {
42279 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
42280 		if (UNEXPECTED(!name)) {
42281 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42282 			UNDEF_RESULT();
42283 			goto exit_assign_obj;
42284 		}
42285 	}
42286 
42287 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
42288 		ZVAL_DEREF(value);
42289 	}
42290 
42291 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
42292 
42293 	if (IS_CONST != IS_CONST) {
42294 		zend_tmp_string_release(tmp_name);
42295 	}
42296 
42297 free_and_exit_assign_obj:
42298 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
42299 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
42300 	}
42301 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42302 exit_assign_obj:
42303 	if (garbage) {
42304 		GC_DTOR_NO_REF(garbage);
42305 	}
42306 
42307 
42308 	/* assign_obj has two opcodes! */
42309 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42310 }
42311 
42312 /* 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)42313 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42314 {
42315 	USE_OPLINE
42316 	zval *object, *value, tmp;
42317 	zend_object *zobj;
42318 	zend_string *name, *tmp_name;
42319 	zend_refcounted *garbage = NULL;
42320 
42321 	SAVE_OPLINE();
42322 	object = EX_VAR(opline->op1.var);
42323 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
42324 
42325 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
42326 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
42327 			object = Z_REFVAL_P(object);
42328 			goto assign_object;
42329 		}
42330 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
42331 		value = &EG(uninitialized_zval);
42332 		goto free_and_exit_assign_obj;
42333 	}
42334 
42335 assign_object:
42336 	zobj = Z_OBJ_P(object);
42337 	if (IS_CONST == IS_CONST) {
42338 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
42339 			void **cache_slot = CACHE_ADDR(opline->extended_value);
42340 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
42341 			zval *property_val;
42342 
42343 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
42344 				property_val = OBJ_PROP(zobj, prop_offset);
42345 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
42346 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
42347 
42348 					if (UNEXPECTED(prop_info != NULL)) {
42349 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
42350 						goto free_and_exit_assign_obj;
42351 					} else {
42352 fast_assign_obj:
42353 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
42354 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42355 							ZVAL_COPY(EX_VAR(opline->result.var), value);
42356 						}
42357 						goto exit_assign_obj;
42358 					}
42359 				}
42360 			} else {
42361 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42362 				if (EXPECTED(zobj->properties != NULL)) {
42363 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
42364 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
42365 							GC_DELREF(zobj->properties);
42366 						}
42367 						zobj->properties = zend_array_dup(zobj->properties);
42368 					}
42369 					property_val = zend_hash_find_known_hash(zobj->properties, name);
42370 					if (property_val) {
42371 						goto fast_assign_obj;
42372 					}
42373 				}
42374 
42375 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
42376 					if (EXPECTED(zobj->properties == NULL)) {
42377 						rebuild_object_properties(zobj);
42378 					}
42379 					if (IS_VAR == IS_CONST) {
42380 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
42381 							Z_ADDREF_P(value);
42382 						}
42383 					} else if (IS_VAR != IS_TMP_VAR) {
42384 						if (Z_ISREF_P(value)) {
42385 							if (IS_VAR == IS_VAR) {
42386 								zend_reference *ref = Z_REF_P(value);
42387 								if (GC_DELREF(ref) == 0) {
42388 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
42389 									efree_size(ref, sizeof(zend_reference));
42390 									value = &tmp;
42391 								} else {
42392 									value = Z_REFVAL_P(value);
42393 									Z_TRY_ADDREF_P(value);
42394 								}
42395 							} else {
42396 								value = Z_REFVAL_P(value);
42397 								Z_TRY_ADDREF_P(value);
42398 							}
42399 						} else if (IS_VAR == IS_CV) {
42400 							Z_TRY_ADDREF_P(value);
42401 						}
42402 						}
42403 					zend_hash_add_new(zobj->properties, name, value);
42404 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42405 						ZVAL_COPY(EX_VAR(opline->result.var), value);
42406 					}
42407 					goto exit_assign_obj;
42408 				}
42409 			}
42410 		}
42411 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42412 	} else {
42413 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
42414 		if (UNEXPECTED(!name)) {
42415 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42416 			UNDEF_RESULT();
42417 			goto exit_assign_obj;
42418 		}
42419 	}
42420 
42421 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
42422 		ZVAL_DEREF(value);
42423 	}
42424 
42425 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
42426 
42427 	if (IS_CONST != IS_CONST) {
42428 		zend_tmp_string_release(tmp_name);
42429 	}
42430 
42431 free_and_exit_assign_obj:
42432 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
42433 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
42434 	}
42435 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42436 exit_assign_obj:
42437 	if (garbage) {
42438 		GC_DTOR_NO_REF(garbage);
42439 	}
42440 
42441 
42442 	/* assign_obj has two opcodes! */
42443 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42444 }
42445 
42446 /* 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)42447 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42448 {
42449 	USE_OPLINE
42450 	zval *object, *value, tmp;
42451 	zend_object *zobj;
42452 	zend_string *name, *tmp_name;
42453 	zend_refcounted *garbage = NULL;
42454 
42455 	SAVE_OPLINE();
42456 	object = EX_VAR(opline->op1.var);
42457 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
42458 
42459 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
42460 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
42461 			object = Z_REFVAL_P(object);
42462 			goto assign_object;
42463 		}
42464 		zend_throw_non_object_error(object, RT_CONSTANT(opline, opline->op2) OPLINE_CC EXECUTE_DATA_CC);
42465 		value = &EG(uninitialized_zval);
42466 		goto free_and_exit_assign_obj;
42467 	}
42468 
42469 assign_object:
42470 	zobj = Z_OBJ_P(object);
42471 	if (IS_CONST == IS_CONST) {
42472 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
42473 			void **cache_slot = CACHE_ADDR(opline->extended_value);
42474 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
42475 			zval *property_val;
42476 
42477 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
42478 				property_val = OBJ_PROP(zobj, prop_offset);
42479 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
42480 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
42481 
42482 					if (UNEXPECTED(prop_info != NULL)) {
42483 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
42484 						goto free_and_exit_assign_obj;
42485 					} else {
42486 fast_assign_obj:
42487 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
42488 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42489 							ZVAL_COPY(EX_VAR(opline->result.var), value);
42490 						}
42491 						goto exit_assign_obj;
42492 					}
42493 				}
42494 			} else {
42495 				name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42496 				if (EXPECTED(zobj->properties != NULL)) {
42497 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
42498 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
42499 							GC_DELREF(zobj->properties);
42500 						}
42501 						zobj->properties = zend_array_dup(zobj->properties);
42502 					}
42503 					property_val = zend_hash_find_known_hash(zobj->properties, name);
42504 					if (property_val) {
42505 						goto fast_assign_obj;
42506 					}
42507 				}
42508 
42509 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
42510 					if (EXPECTED(zobj->properties == NULL)) {
42511 						rebuild_object_properties(zobj);
42512 					}
42513 					if (IS_CV == IS_CONST) {
42514 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
42515 							Z_ADDREF_P(value);
42516 						}
42517 					} else if (IS_CV != IS_TMP_VAR) {
42518 						if (Z_ISREF_P(value)) {
42519 							if (IS_CV == IS_VAR) {
42520 								zend_reference *ref = Z_REF_P(value);
42521 								if (GC_DELREF(ref) == 0) {
42522 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
42523 									efree_size(ref, sizeof(zend_reference));
42524 									value = &tmp;
42525 								} else {
42526 									value = Z_REFVAL_P(value);
42527 									Z_TRY_ADDREF_P(value);
42528 								}
42529 							} else {
42530 								value = Z_REFVAL_P(value);
42531 								Z_TRY_ADDREF_P(value);
42532 							}
42533 						} else if (IS_CV == IS_CV) {
42534 							Z_TRY_ADDREF_P(value);
42535 						}
42536 						}
42537 					zend_hash_add_new(zobj->properties, name, value);
42538 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42539 						ZVAL_COPY(EX_VAR(opline->result.var), value);
42540 					}
42541 					goto exit_assign_obj;
42542 				}
42543 			}
42544 		}
42545 		name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
42546 	} else {
42547 		name = zval_try_get_tmp_string(RT_CONSTANT(opline, opline->op2), &tmp_name);
42548 		if (UNEXPECTED(!name)) {
42549 
42550 			UNDEF_RESULT();
42551 			goto exit_assign_obj;
42552 		}
42553 	}
42554 
42555 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
42556 		ZVAL_DEREF(value);
42557 	}
42558 
42559 	value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
42560 
42561 	if (IS_CONST != IS_CONST) {
42562 		zend_tmp_string_release(tmp_name);
42563 	}
42564 
42565 free_and_exit_assign_obj:
42566 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
42567 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
42568 	}
42569 
42570 exit_assign_obj:
42571 	if (garbage) {
42572 		GC_DTOR_NO_REF(garbage);
42573 	}
42574 
42575 
42576 	/* assign_obj has two opcodes! */
42577 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42578 }
42579 
42580 /* 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)42581 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42582 {
42583 	USE_OPLINE
42584 	zval *object_ptr, *orig_object_ptr;
42585 	zval *value;
42586 	zval *variable_ptr;
42587 	zval *dim;
42588 	zend_refcounted *garbage = NULL;
42589 
42590 	SAVE_OPLINE();
42591 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
42592 
42593 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42594 try_assign_dim_array:
42595 		SEPARATE_ARRAY(object_ptr);
42596 		if (IS_CONST == IS_UNUSED) {
42597 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
42598 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
42599 				HashTable *ht = Z_ARRVAL_P(object_ptr);
42600 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
42601 					GC_ADDREF(ht);
42602 				}
42603 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
42604 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
42605 					zend_array_destroy(ht);
42606 					goto assign_dim_error;
42607 				}
42608 			}
42609 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
42610 				ZVAL_DEREF(value);
42611 			}
42612 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
42613 			if (UNEXPECTED(value == NULL)) {
42614 				zend_cannot_add_element();
42615 				goto assign_dim_error;
42616 			} else if (IS_CONST == IS_CV) {
42617 				if (Z_REFCOUNTED_P(value)) {
42618 					Z_ADDREF_P(value);
42619 				}
42620 			} else if (IS_CONST == IS_VAR) {
42621 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
42622 				if (Z_ISREF_P(free_op_data)) {
42623 					if (Z_REFCOUNTED_P(value)) {
42624 						Z_ADDREF_P(value);
42625 					}
42626 					zval_ptr_dtor_nogc(free_op_data);
42627 				}
42628 			} else if (IS_CONST == IS_CONST) {
42629 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
42630 					Z_ADDREF_P(value);
42631 				}
42632 			}
42633 		} else {
42634 			dim = RT_CONSTANT(opline, opline->op2);
42635 			if (IS_CONST == IS_CONST) {
42636 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
42637 			} else {
42638 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
42639 			}
42640 			if (UNEXPECTED(variable_ptr == NULL)) {
42641 				goto assign_dim_error;
42642 			}
42643 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
42644 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
42645 		}
42646 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42647 			ZVAL_COPY(EX_VAR(opline->result.var), value);
42648 		}
42649 		if (garbage) {
42650 			GC_DTOR_NO_REF(garbage);
42651 		}
42652 	} else {
42653 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
42654 			object_ptr = Z_REFVAL_P(object_ptr);
42655 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42656 				goto try_assign_dim_array;
42657 			}
42658 		}
42659 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
42660 			zend_object *obj = Z_OBJ_P(object_ptr);
42661 
42662 			GC_ADDREF(obj);
42663 			dim = RT_CONSTANT(opline, opline->op2);
42664 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
42665 				dim = ZVAL_UNDEFINED_OP2();
42666 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
42667 				dim++;
42668 			}
42669 
42670 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
42671 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
42672 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
42673 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
42674 				ZVAL_DEREF(value);
42675 			}
42676 
42677 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
42678 
42679 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
42680 				zend_objects_store_del(obj);
42681 			}
42682 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
42683 			if (IS_CONST == IS_UNUSED) {
42684 				zend_use_new_element_for_string();
42685 
42686 				UNDEF_RESULT();
42687 			} else {
42688 				dim = RT_CONSTANT(opline, opline->op2);
42689 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
42690 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
42691 
42692 			}
42693 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
42694 			if (Z_ISREF_P(orig_object_ptr)
42695 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
42696 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
42697 				dim = RT_CONSTANT(opline, opline->op2);
42698 
42699 				UNDEF_RESULT();
42700 			} else {
42701 				HashTable *ht = zend_new_array(8);
42702 				uint8_t old_type = Z_TYPE_P(object_ptr);
42703 
42704 				ZVAL_ARR(object_ptr, ht);
42705 				if (UNEXPECTED(old_type == IS_FALSE)) {
42706 					GC_ADDREF(ht);
42707 					zend_false_to_array_deprecated();
42708 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
42709 						zend_array_destroy(ht);
42710 						goto assign_dim_error;
42711 					}
42712 				}
42713 				goto try_assign_dim_array;
42714 			}
42715 		} else {
42716 			zend_use_scalar_as_array();
42717 			dim = RT_CONSTANT(opline, opline->op2);
42718 assign_dim_error:
42719 
42720 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42721 				ZVAL_NULL(EX_VAR(opline->result.var));
42722 			}
42723 		}
42724 	}
42725 	if (IS_CONST != IS_UNUSED) {
42726 
42727 	}
42728 
42729 	/* assign_dim has two opcodes! */
42730 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42731 }
42732 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42733 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42734 {
42735 	USE_OPLINE
42736 	zval *object_ptr, *orig_object_ptr;
42737 	zval *value;
42738 	zval *variable_ptr;
42739 	zval *dim;
42740 	zend_refcounted *garbage = NULL;
42741 
42742 	SAVE_OPLINE();
42743 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
42744 
42745 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42746 try_assign_dim_array:
42747 		SEPARATE_ARRAY(object_ptr);
42748 		if (IS_CONST == IS_UNUSED) {
42749 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
42750 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
42751 				HashTable *ht = Z_ARRVAL_P(object_ptr);
42752 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
42753 					GC_ADDREF(ht);
42754 				}
42755 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
42756 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
42757 					zend_array_destroy(ht);
42758 					goto assign_dim_error;
42759 				}
42760 			}
42761 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
42762 				ZVAL_DEREF(value);
42763 			}
42764 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
42765 			if (UNEXPECTED(value == NULL)) {
42766 				zend_cannot_add_element();
42767 				goto assign_dim_error;
42768 			} else if (IS_TMP_VAR == IS_CV) {
42769 				if (Z_REFCOUNTED_P(value)) {
42770 					Z_ADDREF_P(value);
42771 				}
42772 			} else if (IS_TMP_VAR == IS_VAR) {
42773 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
42774 				if (Z_ISREF_P(free_op_data)) {
42775 					if (Z_REFCOUNTED_P(value)) {
42776 						Z_ADDREF_P(value);
42777 					}
42778 					zval_ptr_dtor_nogc(free_op_data);
42779 				}
42780 			} else if (IS_TMP_VAR == IS_CONST) {
42781 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
42782 					Z_ADDREF_P(value);
42783 				}
42784 			}
42785 		} else {
42786 			dim = RT_CONSTANT(opline, opline->op2);
42787 			if (IS_CONST == IS_CONST) {
42788 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
42789 			} else {
42790 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
42791 			}
42792 			if (UNEXPECTED(variable_ptr == NULL)) {
42793 				goto assign_dim_error;
42794 			}
42795 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
42796 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
42797 		}
42798 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42799 			ZVAL_COPY(EX_VAR(opline->result.var), value);
42800 		}
42801 		if (garbage) {
42802 			GC_DTOR_NO_REF(garbage);
42803 		}
42804 	} else {
42805 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
42806 			object_ptr = Z_REFVAL_P(object_ptr);
42807 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42808 				goto try_assign_dim_array;
42809 			}
42810 		}
42811 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
42812 			zend_object *obj = Z_OBJ_P(object_ptr);
42813 
42814 			GC_ADDREF(obj);
42815 			dim = RT_CONSTANT(opline, opline->op2);
42816 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
42817 				dim = ZVAL_UNDEFINED_OP2();
42818 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
42819 				dim++;
42820 			}
42821 
42822 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
42823 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
42824 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
42825 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
42826 				ZVAL_DEREF(value);
42827 			}
42828 
42829 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
42830 
42831 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42832 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
42833 				zend_objects_store_del(obj);
42834 			}
42835 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
42836 			if (IS_CONST == IS_UNUSED) {
42837 				zend_use_new_element_for_string();
42838 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42839 				UNDEF_RESULT();
42840 			} else {
42841 				dim = RT_CONSTANT(opline, opline->op2);
42842 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
42843 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
42844 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42845 			}
42846 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
42847 			if (Z_ISREF_P(orig_object_ptr)
42848 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
42849 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
42850 				dim = RT_CONSTANT(opline, opline->op2);
42851 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42852 				UNDEF_RESULT();
42853 			} else {
42854 				HashTable *ht = zend_new_array(8);
42855 				uint8_t old_type = Z_TYPE_P(object_ptr);
42856 
42857 				ZVAL_ARR(object_ptr, ht);
42858 				if (UNEXPECTED(old_type == IS_FALSE)) {
42859 					GC_ADDREF(ht);
42860 					zend_false_to_array_deprecated();
42861 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
42862 						zend_array_destroy(ht);
42863 						goto assign_dim_error;
42864 					}
42865 				}
42866 				goto try_assign_dim_array;
42867 			}
42868 		} else {
42869 			zend_use_scalar_as_array();
42870 			dim = RT_CONSTANT(opline, opline->op2);
42871 assign_dim_error:
42872 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42873 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42874 				ZVAL_NULL(EX_VAR(opline->result.var));
42875 			}
42876 		}
42877 	}
42878 	if (IS_CONST != IS_UNUSED) {
42879 
42880 	}
42881 
42882 	/* assign_dim has two opcodes! */
42883 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
42884 }
42885 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)42886 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
42887 {
42888 	USE_OPLINE
42889 	zval *object_ptr, *orig_object_ptr;
42890 	zval *value;
42891 	zval *variable_ptr;
42892 	zval *dim;
42893 	zend_refcounted *garbage = NULL;
42894 
42895 	SAVE_OPLINE();
42896 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
42897 
42898 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42899 try_assign_dim_array:
42900 		SEPARATE_ARRAY(object_ptr);
42901 		if (IS_CONST == IS_UNUSED) {
42902 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
42903 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
42904 				HashTable *ht = Z_ARRVAL_P(object_ptr);
42905 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
42906 					GC_ADDREF(ht);
42907 				}
42908 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
42909 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
42910 					zend_array_destroy(ht);
42911 					goto assign_dim_error;
42912 				}
42913 			}
42914 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
42915 				ZVAL_DEREF(value);
42916 			}
42917 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
42918 			if (UNEXPECTED(value == NULL)) {
42919 				zend_cannot_add_element();
42920 				goto assign_dim_error;
42921 			} else if (IS_VAR == IS_CV) {
42922 				if (Z_REFCOUNTED_P(value)) {
42923 					Z_ADDREF_P(value);
42924 				}
42925 			} else if (IS_VAR == IS_VAR) {
42926 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
42927 				if (Z_ISREF_P(free_op_data)) {
42928 					if (Z_REFCOUNTED_P(value)) {
42929 						Z_ADDREF_P(value);
42930 					}
42931 					zval_ptr_dtor_nogc(free_op_data);
42932 				}
42933 			} else if (IS_VAR == IS_CONST) {
42934 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
42935 					Z_ADDREF_P(value);
42936 				}
42937 			}
42938 		} else {
42939 			dim = RT_CONSTANT(opline, opline->op2);
42940 			if (IS_CONST == IS_CONST) {
42941 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
42942 			} else {
42943 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
42944 			}
42945 			if (UNEXPECTED(variable_ptr == NULL)) {
42946 				goto assign_dim_error;
42947 			}
42948 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
42949 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
42950 		}
42951 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
42952 			ZVAL_COPY(EX_VAR(opline->result.var), value);
42953 		}
42954 		if (garbage) {
42955 			GC_DTOR_NO_REF(garbage);
42956 		}
42957 	} else {
42958 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
42959 			object_ptr = Z_REFVAL_P(object_ptr);
42960 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
42961 				goto try_assign_dim_array;
42962 			}
42963 		}
42964 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
42965 			zend_object *obj = Z_OBJ_P(object_ptr);
42966 
42967 			GC_ADDREF(obj);
42968 			dim = RT_CONSTANT(opline, opline->op2);
42969 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
42970 				dim = ZVAL_UNDEFINED_OP2();
42971 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
42972 				dim++;
42973 			}
42974 
42975 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
42976 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
42977 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
42978 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
42979 				ZVAL_DEREF(value);
42980 			}
42981 
42982 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
42983 
42984 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42985 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
42986 				zend_objects_store_del(obj);
42987 			}
42988 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
42989 			if (IS_CONST == IS_UNUSED) {
42990 				zend_use_new_element_for_string();
42991 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42992 				UNDEF_RESULT();
42993 			} else {
42994 				dim = RT_CONSTANT(opline, opline->op2);
42995 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
42996 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
42997 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
42998 			}
42999 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
43000 			if (Z_ISREF_P(orig_object_ptr)
43001 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
43002 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
43003 				dim = RT_CONSTANT(opline, opline->op2);
43004 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43005 				UNDEF_RESULT();
43006 			} else {
43007 				HashTable *ht = zend_new_array(8);
43008 				uint8_t old_type = Z_TYPE_P(object_ptr);
43009 
43010 				ZVAL_ARR(object_ptr, ht);
43011 				if (UNEXPECTED(old_type == IS_FALSE)) {
43012 					GC_ADDREF(ht);
43013 					zend_false_to_array_deprecated();
43014 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
43015 						zend_array_destroy(ht);
43016 						goto assign_dim_error;
43017 					}
43018 				}
43019 				goto try_assign_dim_array;
43020 			}
43021 		} else {
43022 			zend_use_scalar_as_array();
43023 			dim = RT_CONSTANT(opline, opline->op2);
43024 assign_dim_error:
43025 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43026 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43027 				ZVAL_NULL(EX_VAR(opline->result.var));
43028 			}
43029 		}
43030 	}
43031 	if (IS_CONST != IS_UNUSED) {
43032 
43033 	}
43034 
43035 	/* assign_dim has two opcodes! */
43036 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43037 }
43038 
ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43039 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43040 {
43041 	USE_OPLINE
43042 	zval *object_ptr, *orig_object_ptr;
43043 	zval *value;
43044 	zval *variable_ptr;
43045 	zval *dim;
43046 	zend_refcounted *garbage = NULL;
43047 
43048 	SAVE_OPLINE();
43049 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
43050 
43051 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43052 try_assign_dim_array:
43053 		SEPARATE_ARRAY(object_ptr);
43054 		if (IS_CONST == IS_UNUSED) {
43055 			value = EX_VAR((opline+1)->op1.var);
43056 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
43057 				HashTable *ht = Z_ARRVAL_P(object_ptr);
43058 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
43059 					GC_ADDREF(ht);
43060 				}
43061 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
43062 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
43063 					zend_array_destroy(ht);
43064 					goto assign_dim_error;
43065 				}
43066 			}
43067 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
43068 				ZVAL_DEREF(value);
43069 			}
43070 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
43071 			if (UNEXPECTED(value == NULL)) {
43072 				zend_cannot_add_element();
43073 				goto assign_dim_error;
43074 			} else if (IS_CV == IS_CV) {
43075 				if (Z_REFCOUNTED_P(value)) {
43076 					Z_ADDREF_P(value);
43077 				}
43078 			} else if (IS_CV == IS_VAR) {
43079 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
43080 				if (Z_ISREF_P(free_op_data)) {
43081 					if (Z_REFCOUNTED_P(value)) {
43082 						Z_ADDREF_P(value);
43083 					}
43084 					zval_ptr_dtor_nogc(free_op_data);
43085 				}
43086 			} else if (IS_CV == IS_CONST) {
43087 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
43088 					Z_ADDREF_P(value);
43089 				}
43090 			}
43091 		} else {
43092 			dim = RT_CONSTANT(opline, opline->op2);
43093 			if (IS_CONST == IS_CONST) {
43094 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43095 			} else {
43096 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
43097 			}
43098 			if (UNEXPECTED(variable_ptr == NULL)) {
43099 				goto assign_dim_error;
43100 			}
43101 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
43102 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
43103 		}
43104 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43105 			ZVAL_COPY(EX_VAR(opline->result.var), value);
43106 		}
43107 		if (garbage) {
43108 			GC_DTOR_NO_REF(garbage);
43109 		}
43110 	} else {
43111 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
43112 			object_ptr = Z_REFVAL_P(object_ptr);
43113 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
43114 				goto try_assign_dim_array;
43115 			}
43116 		}
43117 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
43118 			zend_object *obj = Z_OBJ_P(object_ptr);
43119 
43120 			GC_ADDREF(obj);
43121 			dim = RT_CONSTANT(opline, opline->op2);
43122 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
43123 				dim = ZVAL_UNDEFINED_OP2();
43124 			} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
43125 				dim++;
43126 			}
43127 
43128 			value = EX_VAR((opline+1)->op1.var);
43129 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
43130 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
43131 			} else if (IS_CV & (IS_CV|IS_VAR)) {
43132 				ZVAL_DEREF(value);
43133 			}
43134 
43135 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
43136 
43137 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
43138 				zend_objects_store_del(obj);
43139 			}
43140 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
43141 			if (IS_CONST == IS_UNUSED) {
43142 				zend_use_new_element_for_string();
43143 
43144 				UNDEF_RESULT();
43145 			} else {
43146 				dim = RT_CONSTANT(opline, opline->op2);
43147 				value = EX_VAR((opline+1)->op1.var);
43148 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
43149 
43150 			}
43151 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
43152 			if (Z_ISREF_P(orig_object_ptr)
43153 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
43154 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
43155 				dim = RT_CONSTANT(opline, opline->op2);
43156 
43157 				UNDEF_RESULT();
43158 			} else {
43159 				HashTable *ht = zend_new_array(8);
43160 				uint8_t old_type = Z_TYPE_P(object_ptr);
43161 
43162 				ZVAL_ARR(object_ptr, ht);
43163 				if (UNEXPECTED(old_type == IS_FALSE)) {
43164 					GC_ADDREF(ht);
43165 					zend_false_to_array_deprecated();
43166 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
43167 						zend_array_destroy(ht);
43168 						goto assign_dim_error;
43169 					}
43170 				}
43171 				goto try_assign_dim_array;
43172 			}
43173 		} else {
43174 			zend_use_scalar_as_array();
43175 			dim = RT_CONSTANT(opline, opline->op2);
43176 assign_dim_error:
43177 
43178 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
43179 				ZVAL_NULL(EX_VAR(opline->result.var));
43180 			}
43181 		}
43182 	}
43183 	if (IS_CONST != IS_UNUSED) {
43184 
43185 	}
43186 
43187 	/* assign_dim has two opcodes! */
43188 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43189 }
43190 
ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43191 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43192 {
43193 	USE_OPLINE
43194 	zval *value;
43195 	zval *variable_ptr;
43196 
43197 	SAVE_OPLINE();
43198 	value = RT_CONSTANT(opline, opline->op2);
43199 	variable_ptr = EX_VAR(opline->op1.var);
43200 
43201 	if (0 || UNEXPECTED(0)) {
43202 		zend_refcounted *garbage = NULL;
43203 
43204 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
43205 		if (UNEXPECTED(0)) {
43206 			ZVAL_COPY(EX_VAR(opline->result.var), value);
43207 		}
43208 		if (garbage) {
43209 			GC_DTOR_NO_REF(garbage);
43210 		}
43211 	} else {
43212 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
43213 	}
43214 
43215 	/* zend_assign_to_variable() always takes care of op2, never free it! */
43216 
43217 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43218 }
43219 
ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43220 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43221 {
43222 	USE_OPLINE
43223 	zval *value;
43224 	zval *variable_ptr;
43225 
43226 	SAVE_OPLINE();
43227 	value = RT_CONSTANT(opline, opline->op2);
43228 	variable_ptr = EX_VAR(opline->op1.var);
43229 
43230 	if (0 || UNEXPECTED(1)) {
43231 		zend_refcounted *garbage = NULL;
43232 
43233 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
43234 		if (UNEXPECTED(1)) {
43235 			ZVAL_COPY(EX_VAR(opline->result.var), value);
43236 		}
43237 		if (garbage) {
43238 			GC_DTOR_NO_REF(garbage);
43239 		}
43240 	} else {
43241 		value = zend_assign_to_variable(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES());
43242 	}
43243 
43244 	/* zend_assign_to_variable() always takes care of op2, never free it! */
43245 
43246 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43247 }
43248 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43249 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43250 {
43251 	USE_OPLINE
43252 	zval *property, *container, *value_ptr;
43253 
43254 	SAVE_OPLINE();
43255 
43256 	container = EX_VAR(opline->op1.var);
43257 	property = RT_CONSTANT(opline, opline->op2);
43258 
43259 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
43260 
43261 	if (1) {
43262 		if (IS_CV == IS_UNUSED) {
43263 			if (IS_CONST == IS_CONST) {
43264 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43265 			} else {
43266 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43267 			}
43268 		} else {
43269 			if (IS_CONST == IS_CONST) {
43270 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43271 			} else {
43272 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43273 			}
43274 		}
43275 	} else {
43276 		zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43277 	}
43278 
43279 
43280 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
43281 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43282 }
43283 
43284 /* 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)43285 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43286 {
43287 	USE_OPLINE
43288 	zval *property, *container, *value_ptr;
43289 
43290 	SAVE_OPLINE();
43291 
43292 	container = EX_VAR(opline->op1.var);
43293 	property = RT_CONSTANT(opline, opline->op2);
43294 
43295 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
43296 
43297 	if (1) {
43298 		if (IS_CV == IS_UNUSED) {
43299 			if (IS_CONST == IS_CONST) {
43300 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43301 			} else {
43302 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43303 			}
43304 		} else {
43305 			if (IS_CONST == IS_CONST) {
43306 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43307 			} else {
43308 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43309 			}
43310 		}
43311 	} else {
43312 		zend_assign_to_property_reference(container, IS_CV, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
43313 	}
43314 
43315 
43316 
43317 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
43318 }
43319 
43320 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43321 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43322 {
43323 	USE_OPLINE
43324 	zval *op1, *op2;
43325 	zend_string *op1_str, *op2_str, *str;
43326 
43327 
43328 	op1 = EX_VAR(opline->op1.var);
43329 	op2 = RT_CONSTANT(opline, opline->op2);
43330 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
43331 	    (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
43332 		zend_string *op1_str = Z_STR_P(op1);
43333 		zend_string *op2_str = Z_STR_P(op2);
43334 		zend_string *str;
43335 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
43336 
43337 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
43338 			if (IS_CONST == IS_CONST || IS_CONST == IS_CV) {
43339 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
43340 			} else {
43341 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
43342 			}
43343 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43344 				zend_string_release_ex(op1_str, 0);
43345 			}
43346 		} else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
43347 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
43348 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
43349 			} else {
43350 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
43351 			}
43352 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
43353 				zend_string_release_ex(op2_str, 0);
43354 			}
43355 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
43356 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
43357 			size_t len = ZSTR_LEN(op1_str);
43358 
43359 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
43360 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
43361 			GC_ADD_FLAGS(str, flags);
43362 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
43363 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
43364 				zend_string_release_ex(op2_str, 0);
43365 			}
43366 		} else {
43367 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
43368 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
43369 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
43370 			GC_ADD_FLAGS(str, flags);
43371 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
43372 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
43373 				zend_string_release_ex(op1_str, 0);
43374 			}
43375 			if (IS_CONST & (IS_TMP_VAR|IS_VAR)) {
43376 				zend_string_release_ex(op2_str, 0);
43377 			}
43378 		}
43379 		ZEND_VM_NEXT_OPCODE();
43380 	}
43381 
43382 	SAVE_OPLINE();
43383 	if (IS_CV == IS_CONST) {
43384 		op1_str = Z_STR_P(op1);
43385 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
43386 		op1_str = zend_string_copy(Z_STR_P(op1));
43387 	} else {
43388 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
43389 			ZVAL_UNDEFINED_OP1();
43390 		}
43391 		op1_str = zval_get_string_func(op1);
43392 	}
43393 	if (IS_CONST == IS_CONST) {
43394 		op2_str = Z_STR_P(op2);
43395 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
43396 		op2_str = zend_string_copy(Z_STR_P(op2));
43397 	} else {
43398 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
43399 			ZVAL_UNDEFINED_OP2();
43400 		}
43401 		op2_str = zval_get_string_func(op2);
43402 	}
43403 	do {
43404 		if (IS_CV != IS_CONST) {
43405 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
43406 				if (IS_CONST == IS_CONST) {
43407 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
43408 						GC_ADDREF(op2_str);
43409 					}
43410 				}
43411 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
43412 				zend_string_release_ex(op1_str, 0);
43413 				break;
43414 			}
43415 		}
43416 		if (IS_CONST != IS_CONST) {
43417 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
43418 				if (IS_CV == IS_CONST) {
43419 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
43420 						GC_ADDREF(op1_str);
43421 					}
43422 				}
43423 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
43424 				zend_string_release_ex(op2_str, 0);
43425 				break;
43426 			}
43427 		}
43428 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
43429 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
43430 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
43431 
43432 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
43433 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
43434 		if (IS_CV != IS_CONST) {
43435 			zend_string_release_ex(op1_str, 0);
43436 		}
43437 		if (IS_CONST != IS_CONST) {
43438 			zend_string_release_ex(op2_str, 0);
43439 		}
43440 	} while (0);
43441 
43442 
43443 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43444 }
43445 
ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43446 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43447 {
43448 	USE_OPLINE
43449 	zval *function_name;
43450 	zval *object;
43451 	zend_function *fbc;
43452 	zend_class_entry *called_scope;
43453 	zend_object *obj;
43454 	zend_execute_data *call;
43455 	uint32_t call_info;
43456 
43457 	SAVE_OPLINE();
43458 
43459 	object = EX_VAR(opline->op1.var);
43460 
43461 	if (IS_CONST != IS_CONST) {
43462 		function_name = RT_CONSTANT(opline, opline->op2);
43463 	}
43464 
43465 	if (IS_CONST != IS_CONST &&
43466 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
43467 		do {
43468 			if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
43469 				function_name = Z_REFVAL_P(function_name);
43470 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
43471 					break;
43472 				}
43473 			} else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
43474 				ZVAL_UNDEFINED_OP2();
43475 				if (UNEXPECTED(EG(exception) != NULL)) {
43476 
43477 					HANDLE_EXCEPTION();
43478 				}
43479 			}
43480 			zend_throw_error(NULL, "Method name must be a string");
43481 
43482 
43483 			HANDLE_EXCEPTION();
43484 		} while (0);
43485 	}
43486 
43487 	if (IS_CV == IS_UNUSED) {
43488 		obj = Z_OBJ_P(object);
43489 	} else {
43490 		do {
43491 			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
43492 				obj = Z_OBJ_P(object);
43493 			} else {
43494 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
43495 					zend_reference *ref = Z_REF_P(object);
43496 
43497 					object = &ref->val;
43498 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
43499 						obj = Z_OBJ_P(object);
43500 						if (IS_CV & IS_VAR) {
43501 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
43502 								efree_size(ref, sizeof(zend_reference));
43503 							} else {
43504 								Z_ADDREF_P(object);
43505 							}
43506 						}
43507 						break;
43508 					}
43509 				}
43510 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
43511 					object = ZVAL_UNDEFINED_OP1();
43512 					if (UNEXPECTED(EG(exception) != NULL)) {
43513 						if (IS_CONST != IS_CONST) {
43514 
43515 						}
43516 						HANDLE_EXCEPTION();
43517 					}
43518 				}
43519 				if (IS_CONST == IS_CONST) {
43520 					function_name = RT_CONSTANT(opline, opline->op2);
43521 				}
43522 				zend_invalid_method_call(object, function_name);
43523 
43524 
43525 				HANDLE_EXCEPTION();
43526 			}
43527 		} while (0);
43528 	}
43529 
43530 	called_scope = obj->ce;
43531 
43532 	if (IS_CONST == IS_CONST &&
43533 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
43534 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
43535 	} else {
43536 		zend_object *orig_obj = obj;
43537 
43538 		if (IS_CONST == IS_CONST) {
43539 			function_name = RT_CONSTANT(opline, opline->op2);
43540 		}
43541 
43542 		/* First, locate the function. */
43543 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
43544 		if (UNEXPECTED(fbc == NULL)) {
43545 			if (EXPECTED(!EG(exception))) {
43546 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
43547 			}
43548 
43549 			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
43550 				zend_objects_store_del(orig_obj);
43551 			}
43552 			HANDLE_EXCEPTION();
43553 		}
43554 		if (IS_CONST == IS_CONST &&
43555 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
43556 		    EXPECTED(obj == orig_obj)) {
43557 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
43558 		}
43559 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
43560 			GC_ADDREF(obj); /* For $this pointer */
43561 			if (GC_DELREF(orig_obj) == 0) {
43562 				zend_objects_store_del(orig_obj);
43563 			}
43564 		}
43565 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
43566 			init_func_run_time_cache(&fbc->op_array);
43567 		}
43568 	}
43569 
43570 	if (IS_CONST != IS_CONST) {
43571 
43572 	}
43573 
43574 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
43575 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
43576 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
43577 			zend_objects_store_del(obj);
43578 			if (UNEXPECTED(EG(exception))) {
43579 				HANDLE_EXCEPTION();
43580 			}
43581 		}
43582 		/* call static method */
43583 		obj = (zend_object*)called_scope;
43584 		call_info = ZEND_CALL_NESTED_FUNCTION;
43585 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
43586 		if (IS_CV == IS_CV) {
43587 			GC_ADDREF(obj); /* For $this pointer */
43588 		}
43589 		/* CV may be changed indirectly (e.g. when it's a reference) */
43590 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
43591 	}
43592 
43593 	call = zend_vm_stack_push_call_frame(call_info,
43594 		fbc, opline->extended_value, obj);
43595 	call->prev_execute_data = EX(call);
43596 	EX(call) = call;
43597 
43598 	ZEND_VM_NEXT_OPCODE();
43599 }
43600 
ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43601 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43602 {
43603 	USE_OPLINE
43604 	zval *varptr, *arg;
43605 
43606 	if (IS_CONST == IS_CONST) {
43607 		SAVE_OPLINE();
43608 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
43609 		uint32_t arg_num;
43610 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
43611 		if (UNEXPECTED(!arg)) {
43612 
43613 			HANDLE_EXCEPTION();
43614 		}
43615 	} else {
43616 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
43617 	}
43618 
43619 	varptr = EX_VAR(opline->op1.var);
43620 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
43621 		SAVE_OPLINE();
43622 		ZVAL_UNDEFINED_OP1();
43623 		ZVAL_NULL(arg);
43624 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43625 	}
43626 
43627 	if (IS_CV == IS_CV) {
43628 		ZVAL_COPY_DEREF(arg, varptr);
43629 	} else /* if (IS_CV == IS_VAR) */ {
43630 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
43631 			zend_refcounted *ref = Z_COUNTED_P(varptr);
43632 
43633 			varptr = Z_REFVAL_P(varptr);
43634 			ZVAL_COPY_VALUE(arg, varptr);
43635 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
43636 				efree_size(ref, sizeof(zend_reference));
43637 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
43638 				Z_ADDREF_P(arg);
43639 			}
43640 		} else {
43641 			ZVAL_COPY_VALUE(arg, varptr);
43642 		}
43643 	}
43644 
43645 	ZEND_VM_NEXT_OPCODE();
43646 }
43647 
ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43648 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43649 {
43650 	USE_OPLINE
43651 	zval *varptr, *arg;
43652 
43653 	SAVE_OPLINE();
43654 	if (IS_CONST == IS_CONST) {
43655 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
43656 		uint32_t arg_num;
43657 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
43658 		if (UNEXPECTED(!arg)) {
43659 
43660 			HANDLE_EXCEPTION();
43661 		}
43662 	} else {
43663 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
43664 	}
43665 
43666 	varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
43667 	if (Z_ISREF_P(varptr)) {
43668 		Z_ADDREF_P(varptr);
43669 	} else {
43670 		ZVAL_MAKE_REF_EX(varptr, 2);
43671 	}
43672 	ZVAL_REF(arg, Z_REF_P(varptr));
43673 
43674 	ZEND_VM_NEXT_OPCODE();
43675 }
43676 
ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43677 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43678 {
43679 	USE_OPLINE
43680 	zval *varptr, *arg;
43681 	uint32_t arg_num;
43682 
43683 	if (IS_CONST == IS_CONST) {
43684 		SAVE_OPLINE();
43685 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
43686 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
43687 		if (UNEXPECTED(!arg)) {
43688 
43689 			HANDLE_EXCEPTION();
43690 		}
43691 	} else {
43692 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
43693 		arg_num = opline->op2.num;
43694 	}
43695 
43696 	if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
43697 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
43698 			goto send_var_by_ref;
43699 		}
43700 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
43701 send_var_by_ref:
43702 		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
43703 		if (Z_ISREF_P(varptr)) {
43704 			Z_ADDREF_P(varptr);
43705 		} else {
43706 			ZVAL_MAKE_REF_EX(varptr, 2);
43707 		}
43708 		ZVAL_REF(arg, Z_REF_P(varptr));
43709 
43710 		ZEND_VM_NEXT_OPCODE();
43711 	}
43712 
43713 	varptr = EX_VAR(opline->op1.var);
43714 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
43715 		SAVE_OPLINE();
43716 		ZVAL_UNDEFINED_OP1();
43717 		ZVAL_NULL(arg);
43718 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43719 	}
43720 
43721 	if (IS_CV == IS_CV) {
43722 		ZVAL_COPY_DEREF(arg, varptr);
43723 	} else /* if (IS_CV == IS_VAR) */ {
43724 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
43725 			zend_refcounted *ref = Z_COUNTED_P(varptr);
43726 
43727 			varptr = Z_REFVAL_P(varptr);
43728 			ZVAL_COPY_VALUE(arg, varptr);
43729 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
43730 				efree_size(ref, sizeof(zend_reference));
43731 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
43732 				Z_ADDREF_P(arg);
43733 			}
43734 		} else {
43735 			ZVAL_COPY_VALUE(arg, varptr);
43736 		}
43737 	}
43738 
43739 	ZEND_VM_NEXT_OPCODE();
43740 }
43741 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43742 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43743 {
43744 	USE_OPLINE
43745 	zval *expr_ptr, new_expr;
43746 
43747 	SAVE_OPLINE();
43748 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
43749 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
43750 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
43751 		if (Z_ISREF_P(expr_ptr)) {
43752 			Z_ADDREF_P(expr_ptr);
43753 		} else {
43754 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
43755 		}
43756 
43757 	} else {
43758 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
43759 		if (IS_CV == IS_TMP_VAR) {
43760 			/* pass */
43761 		} else if (IS_CV == IS_CONST) {
43762 			Z_TRY_ADDREF_P(expr_ptr);
43763 		} else if (IS_CV == IS_CV) {
43764 			ZVAL_DEREF(expr_ptr);
43765 			Z_TRY_ADDREF_P(expr_ptr);
43766 		} else /* if (IS_CV == IS_VAR) */ {
43767 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
43768 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
43769 
43770 				expr_ptr = Z_REFVAL_P(expr_ptr);
43771 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
43772 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
43773 					expr_ptr = &new_expr;
43774 					efree_size(ref, sizeof(zend_reference));
43775 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
43776 					Z_ADDREF_P(expr_ptr);
43777 				}
43778 			}
43779 		}
43780 	}
43781 
43782 	if (IS_CONST != IS_UNUSED) {
43783 		zval *offset = RT_CONSTANT(opline, opline->op2);
43784 		zend_string *str;
43785 		zend_ulong hval;
43786 
43787 add_again:
43788 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
43789 			str = Z_STR_P(offset);
43790 			if (IS_CONST != IS_CONST) {
43791 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
43792 					goto num_index;
43793 				}
43794 			}
43795 str_index:
43796 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
43797 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
43798 			hval = Z_LVAL_P(offset);
43799 num_index:
43800 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
43801 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
43802 			offset = Z_REFVAL_P(offset);
43803 			goto add_again;
43804 		} else if (Z_TYPE_P(offset) == IS_NULL) {
43805 			str = ZSTR_EMPTY_ALLOC();
43806 			goto str_index;
43807 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
43808 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
43809 			goto num_index;
43810 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
43811 			hval = 0;
43812 			goto num_index;
43813 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
43814 			hval = 1;
43815 			goto num_index;
43816 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
43817 			zend_use_resource_as_offset(offset);
43818 			hval = Z_RES_HANDLE_P(offset);
43819 			goto num_index;
43820 		} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
43821 			ZVAL_UNDEFINED_OP2();
43822 			str = ZSTR_EMPTY_ALLOC();
43823 			goto str_index;
43824 		} else {
43825 			zend_illegal_array_offset_access(offset);
43826 			zval_ptr_dtor_nogc(expr_ptr);
43827 		}
43828 
43829 	} else {
43830 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
43831 			zend_cannot_add_element();
43832 			zval_ptr_dtor_nogc(expr_ptr);
43833 		}
43834 	}
43835 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43836 }
43837 
ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43838 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43839 {
43840 	zval *array;
43841 	uint32_t size;
43842 	USE_OPLINE
43843 
43844 	array = EX_VAR(opline->result.var);
43845 	if (IS_CV != IS_UNUSED) {
43846 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
43847 		ZVAL_ARR(array, zend_new_array(size));
43848 		/* Explicitly initialize array as not-packed if flag is set */
43849 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
43850 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
43851 		}
43852 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
43853 	} else {
43854 		ZVAL_ARR(array, zend_new_array(0));
43855 		ZEND_VM_NEXT_OPCODE();
43856 	}
43857 }
43858 
ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43859 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43860 {
43861 	USE_OPLINE
43862 	zval *container;
43863 	zval *offset;
43864 	zend_ulong hval;
43865 	zend_string *key;
43866 
43867 	SAVE_OPLINE();
43868 	container = EX_VAR(opline->op1.var);
43869 	offset = RT_CONSTANT(opline, opline->op2);
43870 
43871 	do {
43872 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
43873 			HashTable *ht;
43874 
43875 unset_dim_array:
43876 			SEPARATE_ARRAY(container);
43877 			ht = Z_ARRVAL_P(container);
43878 offset_again:
43879 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
43880 				key = Z_STR_P(offset);
43881 				if (IS_CONST != IS_CONST) {
43882 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
43883 						goto num_index_dim;
43884 					}
43885 				}
43886 str_index_dim:
43887 				ZEND_ASSERT(ht != &EG(symbol_table));
43888 				zend_hash_del(ht, key);
43889 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
43890 				hval = Z_LVAL_P(offset);
43891 num_index_dim:
43892 				zend_hash_index_del(ht, hval);
43893 			} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
43894 				offset = Z_REFVAL_P(offset);
43895 				goto offset_again;
43896 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
43897 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
43898 				goto num_index_dim;
43899 			} else if (Z_TYPE_P(offset) == IS_NULL) {
43900 				key = ZSTR_EMPTY_ALLOC();
43901 				goto str_index_dim;
43902 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
43903 				hval = 0;
43904 				goto num_index_dim;
43905 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
43906 				hval = 1;
43907 				goto num_index_dim;
43908 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
43909 				zend_use_resource_as_offset(offset);
43910 				hval = Z_RES_HANDLE_P(offset);
43911 				goto num_index_dim;
43912 			} else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
43913 				ZVAL_UNDEFINED_OP2();
43914 				key = ZSTR_EMPTY_ALLOC();
43915 				goto str_index_dim;
43916 			} else {
43917 				zend_illegal_array_offset_unset(offset);
43918 			}
43919 			break;
43920 		} else if (Z_ISREF_P(container)) {
43921 			container = Z_REFVAL_P(container);
43922 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
43923 				goto unset_dim_array;
43924 			}
43925 		}
43926 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
43927 			container = ZVAL_UNDEFINED_OP1();
43928 		}
43929 		if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
43930 			offset = ZVAL_UNDEFINED_OP2();
43931 		}
43932 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
43933 			if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
43934 				offset++;
43935 			}
43936 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
43937 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
43938 			zend_throw_error(NULL, "Cannot unset string offsets");
43939 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
43940 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
43941 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
43942 			zend_false_to_array_deprecated();
43943 		}
43944 	} while (0);
43945 
43946 
43947 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43948 }
43949 
ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43950 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43951 {
43952 	USE_OPLINE
43953 	zval *container;
43954 	zval *offset;
43955 	zend_string *name, *tmp_name;
43956 
43957 	SAVE_OPLINE();
43958 	container = EX_VAR(opline->op1.var);
43959 	offset = RT_CONSTANT(opline, opline->op2);
43960 
43961 	do {
43962 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
43963 			if (Z_ISREF_P(container)) {
43964 				container = Z_REFVAL_P(container);
43965 				if (Z_TYPE_P(container) != IS_OBJECT) {
43966 					if (IS_CV == IS_CV
43967 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
43968 						ZVAL_UNDEFINED_OP1();
43969 					}
43970 					break;
43971 				}
43972 			} else {
43973 				break;
43974 			}
43975 		}
43976 		if (IS_CONST == IS_CONST) {
43977 			name = Z_STR_P(offset);
43978 		} else {
43979 			name = zval_try_get_tmp_string(offset, &tmp_name);
43980 			if (UNEXPECTED(!name)) {
43981 				break;
43982 			}
43983 		}
43984 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
43985 		if (IS_CONST != IS_CONST) {
43986 			zend_tmp_string_release(tmp_name);
43987 		}
43988 	} while (0);
43989 
43990 
43991 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
43992 }
43993 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)43994 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
43995 {
43996 	USE_OPLINE
43997 	zval *container;
43998 	bool result;
43999 	zend_ulong hval;
44000 	zval *offset;
44001 
44002 	SAVE_OPLINE();
44003 	container = EX_VAR(opline->op1.var);
44004 	offset = RT_CONSTANT(opline, opline->op2);
44005 
44006 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44007 		HashTable *ht;
44008 		zval *value;
44009 		zend_string *str;
44010 
44011 isset_dim_obj_array:
44012 		ht = Z_ARRVAL_P(container);
44013 isset_again:
44014 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
44015 			str = Z_STR_P(offset);
44016 			if (IS_CONST != IS_CONST) {
44017 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
44018 					goto num_index_prop;
44019 				}
44020 			}
44021 			value = zend_hash_find_ex(ht, str, IS_CONST == IS_CONST);
44022 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
44023 			hval = Z_LVAL_P(offset);
44024 num_index_prop:
44025 			value = zend_hash_index_find(ht, hval);
44026 		} else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
44027 			offset = Z_REFVAL_P(offset);
44028 			goto isset_again;
44029 		} else {
44030 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
44031 			if (UNEXPECTED(EG(exception))) {
44032 				result = 0;
44033 				goto isset_dim_obj_exit;
44034 			}
44035 		}
44036 
44037 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
44038 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
44039 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
44040 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
44041 
44042 			if (IS_CV & (IS_CONST|IS_CV)) {
44043 				/* avoid exception check */
44044 
44045 				ZEND_VM_SMART_BRANCH(result, 0);
44046 			}
44047 		} else {
44048 			result = (value == NULL || !i_zend_is_true(value));
44049 		}
44050 		goto isset_dim_obj_exit;
44051 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
44052 		container = Z_REFVAL_P(container);
44053 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44054 			goto isset_dim_obj_array;
44055 		}
44056 	}
44057 
44058 	if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
44059 		offset++;
44060 	}
44061 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
44062 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
44063 	} else {
44064 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
44065 	}
44066 
44067 isset_dim_obj_exit:
44068 
44069 
44070 	ZEND_VM_SMART_BRANCH(result, 1);
44071 }
44072 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44073 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44074 {
44075 	USE_OPLINE
44076 	zval *container;
44077 	int result;
44078 	zval *offset;
44079 	zend_string *name, *tmp_name;
44080 
44081 	SAVE_OPLINE();
44082 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
44083 	offset = RT_CONSTANT(opline, opline->op2);
44084 
44085 	if (IS_CV == IS_CONST ||
44086 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
44087 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
44088 			container = Z_REFVAL_P(container);
44089 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
44090 				result = (opline->extended_value & ZEND_ISEMPTY);
44091 				goto isset_object_finish;
44092 			}
44093 		} else {
44094 			result = (opline->extended_value & ZEND_ISEMPTY);
44095 			goto isset_object_finish;
44096 		}
44097 	}
44098 
44099 	if (IS_CONST == IS_CONST) {
44100 		name = Z_STR_P(offset);
44101 	} else {
44102 		name = zval_try_get_tmp_string(offset, &tmp_name);
44103 		if (UNEXPECTED(!name)) {
44104 			result = 0;
44105 			goto isset_object_finish;
44106 		}
44107 	}
44108 
44109 	result =
44110 		(opline->extended_value & ZEND_ISEMPTY) ^
44111 		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));
44112 
44113 	if (IS_CONST != IS_CONST) {
44114 		zend_tmp_string_release(tmp_name);
44115 	}
44116 
44117 isset_object_finish:
44118 
44119 
44120 	ZEND_VM_SMART_BRANCH(result, 1);
44121 }
44122 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44123 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44124 {
44125 	USE_OPLINE
44126 
44127 	zval *key, *subject;
44128 	HashTable *ht;
44129 	bool result;
44130 
44131 	SAVE_OPLINE();
44132 
44133 	key = EX_VAR(opline->op1.var);
44134 	subject = RT_CONSTANT(opline, opline->op2);
44135 
44136 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
44137 array_key_exists_array:
44138 		ht = Z_ARRVAL_P(subject);
44139 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
44140 	} else {
44141 		if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
44142 			subject = Z_REFVAL_P(subject);
44143 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
44144 				goto array_key_exists_array;
44145 			}
44146 		}
44147 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
44148 		result = 0;
44149 	}
44150 
44151 
44152 	ZEND_VM_SMART_BRANCH(result, 1);
44153 }
44154 
44155 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44156 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44157 {
44158 	USE_OPLINE
44159 	zval *expr;
44160 	bool result;
44161 
44162 	SAVE_OPLINE();
44163 	expr = EX_VAR(opline->op1.var);
44164 
44165 try_instanceof:
44166 	if (Z_TYPE_P(expr) == IS_OBJECT) {
44167 		zend_class_entry *ce;
44168 
44169 		if (IS_CONST == IS_CONST) {
44170 			ce = CACHED_PTR(opline->extended_value);
44171 			if (UNEXPECTED(ce == NULL)) {
44172 				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
44173 				if (EXPECTED(ce)) {
44174 					CACHE_PTR(opline->extended_value, ce);
44175 				}
44176 			}
44177 		} else if (IS_CONST == IS_UNUSED) {
44178 			ce = zend_fetch_class(NULL, opline->op2.num);
44179 			if (UNEXPECTED(ce == NULL)) {
44180 
44181 				ZVAL_UNDEF(EX_VAR(opline->result.var));
44182 				HANDLE_EXCEPTION();
44183 			}
44184 		} else {
44185 			ce = Z_CE_P(EX_VAR(opline->op2.var));
44186 		}
44187 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
44188 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
44189 		expr = Z_REFVAL_P(expr);
44190 		goto try_instanceof;
44191 	} else {
44192 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
44193 			ZVAL_UNDEFINED_OP1();
44194 		}
44195 		result = 0;
44196 	}
44197 
44198 	ZEND_VM_SMART_BRANCH(result, 1);
44199 }
44200 
ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44201 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44202 {
44203 	USE_OPLINE
44204 
44205 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
44206 
44207 	SAVE_OPLINE();
44208 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
44209 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
44210 	}
44211 
44212 	/* Destroy the previously yielded value */
44213 	zval_ptr_dtor(&generator->value);
44214 
44215 	/* Destroy the previously yielded key */
44216 	zval_ptr_dtor(&generator->key);
44217 
44218 	/* Set the new yielded value */
44219 	if (IS_CV != IS_UNUSED) {
44220 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
44221 			/* Constants and temporary variables aren't yieldable by reference,
44222 			 * but we still allow them with a notice. */
44223 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
44224 				zval *value;
44225 
44226 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
44227 
44228 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
44229 				ZVAL_COPY_VALUE(&generator->value, value);
44230 				if (IS_CV == IS_CONST) {
44231 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
44232 						Z_ADDREF(generator->value);
44233 					}
44234 				}
44235 			} else {
44236 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
44237 
44238 				/* If a function call result is yielded and the function did
44239 				 * not return by reference we throw a notice. */
44240 				do {
44241 					if (IS_CV == IS_VAR) {
44242 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
44243 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
44244 						 && !Z_ISREF_P(value_ptr)) {
44245 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
44246 							ZVAL_COPY(&generator->value, value_ptr);
44247 							break;
44248 						}
44249 					}
44250 					if (Z_ISREF_P(value_ptr)) {
44251 						Z_ADDREF_P(value_ptr);
44252 					} else {
44253 						ZVAL_MAKE_REF_EX(value_ptr, 2);
44254 					}
44255 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
44256 				} while (0);
44257 
44258 			}
44259 		} else {
44260 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
44261 
44262 			/* Consts, temporary variables and references need copying */
44263 			if (IS_CV == IS_CONST) {
44264 				ZVAL_COPY_VALUE(&generator->value, value);
44265 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
44266 					Z_ADDREF(generator->value);
44267 				}
44268 			} else if (IS_CV == IS_TMP_VAR) {
44269 				ZVAL_COPY_VALUE(&generator->value, value);
44270 			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
44271 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
44272 
44273 			} else {
44274 				ZVAL_COPY_VALUE(&generator->value, value);
44275 				if (IS_CV == IS_CV) {
44276 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
44277 				}
44278 			}
44279 		}
44280 	} else {
44281 		/* If no value was specified yield null */
44282 		ZVAL_NULL(&generator->value);
44283 	}
44284 
44285 	/* Set the new yielded key */
44286 	if (IS_CONST != IS_UNUSED) {
44287 		zval *key = RT_CONSTANT(opline, opline->op2);
44288 		if ((IS_CONST & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
44289 			key = Z_REFVAL_P(key);
44290 		}
44291 		ZVAL_COPY(&generator->key, key);
44292 
44293 		if (Z_TYPE(generator->key) == IS_LONG
44294 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
44295 		) {
44296 			generator->largest_used_integer_key = Z_LVAL(generator->key);
44297 		}
44298 	} else {
44299 		/* If no key was specified we use auto-increment keys */
44300 		generator->largest_used_integer_key++;
44301 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
44302 	}
44303 
44304 	if (RETURN_VALUE_USED(opline)) {
44305 		/* If the return value of yield is used set the send
44306 		 * target and initialize it to NULL */
44307 		generator->send_target = EX_VAR(opline->result.var);
44308 		ZVAL_NULL(generator->send_target);
44309 	} else {
44310 		generator->send_target = NULL;
44311 	}
44312 
44313 	/* We increment to the next op, so we are at the correct position when the
44314 	 * generator is resumed. */
44315 	ZEND_VM_INC_OPCODE();
44316 
44317 	/* The GOTO VM uses a local opline variable. We need to set the opline
44318 	 * variable in execute_data so we don't resume at an old position. */
44319 	SAVE_OPLINE();
44320 
44321 	ZEND_VM_RETURN();
44322 }
44323 
ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44324 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44325 {
44326 	USE_OPLINE
44327 	zend_string *varname;
44328 	zval *value;
44329 	zval *variable_ptr;
44330 	uintptr_t idx;
44331 	zend_reference *ref;
44332 
44333 	ZEND_VM_REPEATABLE_OPCODE
44334 
44335 	varname = Z_STR_P(RT_CONSTANT(opline, opline->op2));
44336 
44337 	/* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
44338 	idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1;
44339 	if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) {
44340 		Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx);
44341 
44342 		if (EXPECTED(p->key == varname) ||
44343 		    (EXPECTED(p->h == ZSTR_H(varname)) &&
44344 		     EXPECTED(p->key != NULL) &&
44345 		     EXPECTED(zend_string_equal_content(p->key, varname)))) {
44346 
44347 			value = (zval*)p; /* value = &p->val; */
44348 			goto check_indirect;
44349 		}
44350 	}
44351 
44352 	value = zend_hash_find_known_hash(&EG(symbol_table), varname);
44353 	if (UNEXPECTED(value == NULL)) {
44354 		value = zend_hash_add_new(&EG(symbol_table), varname, &EG(uninitialized_zval));
44355 		idx = (char*)value - (char*)EG(symbol_table).arData;
44356 		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
44357 		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
44358 	} else {
44359 		idx = (char*)value - (char*)EG(symbol_table).arData;
44360 		/* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */
44361 		CACHE_PTR(opline->extended_value, (void*)(idx + 1));
44362 check_indirect:
44363 		/* GLOBAL variable may be an INDIRECT pointer to CV */
44364 		if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) {
44365 			value = Z_INDIRECT_P(value);
44366 			if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
44367 				ZVAL_NULL(value);
44368 			}
44369 		}
44370 	}
44371 
44372 	if (UNEXPECTED(!Z_ISREF_P(value))) {
44373 		ZVAL_MAKE_REF_EX(value, 2);
44374 		ref = Z_REF_P(value);
44375 	} else {
44376 		ref = Z_REF_P(value);
44377 		GC_ADDREF(ref);
44378 	}
44379 
44380 	variable_ptr = EX_VAR(opline->op1.var);
44381 
44382 	if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) {
44383 		zend_refcounted *garbage = Z_COUNTED_P(variable_ptr);
44384 
44385 		ZVAL_REF(variable_ptr, ref);
44386 		SAVE_OPLINE();
44387 		if (GC_DELREF(garbage) == 0) {
44388 			rc_dtor_func(garbage);
44389 			if (UNEXPECTED(EG(exception))) {
44390 				ZVAL_NULL(variable_ptr);
44391 				HANDLE_EXCEPTION();
44392 			}
44393 		} else {
44394 			gc_check_possible_root(garbage);
44395 		}
44396 	} else {
44397 		ZVAL_REF(variable_ptr, ref);
44398 	}
44399 
44400 	ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
44401 	ZEND_VM_NEXT_OPCODE();
44402 }
44403 
ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44404 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44405 {
44406 	USE_OPLINE
44407 	zval *op1;
44408 	HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2));
44409 	zval *result;
44410 
44411 	op1 = EX_VAR(opline->op1.var);
44412 	if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44413 		result = zend_hash_find_ex(ht, Z_STR_P(op1), IS_CV == IS_CONST);
44414 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44415 			zval_ptr_dtor_str(op1);
44416 		}
44417 		ZEND_VM_SMART_BRANCH(result, 0);
44418 	}
44419 
44420 	if (opline->extended_value) {
44421 		if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
44422 			result = zend_hash_index_find(ht, Z_LVAL_P(op1));
44423 			ZEND_VM_SMART_BRANCH(result, 0);
44424 		}
44425 		SAVE_OPLINE();
44426 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
44427 			op1 = Z_REFVAL_P(op1);
44428 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44429 				result = zend_hash_find(ht, Z_STR_P(op1));
44430 
44431 				ZEND_VM_SMART_BRANCH(result, 0);
44432 			} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
44433 				result = zend_hash_index_find(ht, Z_LVAL_P(op1));
44434 
44435 				ZEND_VM_SMART_BRANCH(result, 0);
44436 			}
44437 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
44438 			ZVAL_UNDEFINED_OP1();
44439 		}
44440 	} else if (Z_TYPE_P(op1) <= IS_FALSE) {
44441 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
44442 			SAVE_OPLINE();
44443 			ZVAL_UNDEFINED_OP1();
44444 			if (UNEXPECTED(EG(exception) != NULL)) {
44445 				HANDLE_EXCEPTION();
44446 			}
44447 		}
44448 		result = zend_hash_find_known_hash(ht, ZSTR_EMPTY_ALLOC());
44449 		ZEND_VM_SMART_BRANCH(result, 0);
44450 	} else {
44451 		zend_string *key;
44452 		zval key_tmp;
44453 
44454 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(op1) == IS_REFERENCE) {
44455 			op1 = Z_REFVAL_P(op1);
44456 			if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44457 				result = zend_hash_find(ht, Z_STR_P(op1));
44458 
44459 				ZEND_VM_SMART_BRANCH(result, 0);
44460 			}
44461 		}
44462 
44463 		SAVE_OPLINE();
44464 		ZEND_HASH_MAP_FOREACH_STR_KEY(ht, key) {
44465 			ZVAL_STR(&key_tmp, key);
44466 			if (zend_compare(op1, &key_tmp) == 0) {
44467 
44468 				ZEND_VM_SMART_BRANCH(1, 1);
44469 			}
44470 		} ZEND_HASH_FOREACH_END();
44471 	}
44472 
44473 	ZEND_VM_SMART_BRANCH(0, 1);
44474 }
44475 
ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44476 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44477 {
44478 	/* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
44479 	/* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
44480 	/* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
44481 	USE_OPLINE
44482 	zval *op1, *op2;
44483 	bool result;
44484 
44485 	op1 = EX_VAR(opline->op1.var);
44486 	op2 = RT_CONSTANT(opline, opline->op2);
44487 	result = fast_is_identical_function(op1, op2);
44488 	/* Free is a no-op for const/cv */
44489 	ZEND_VM_SMART_BRANCH(result, 0);
44490 }
44491 
ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44492 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44493 {
44494 	USE_OPLINE
44495 	zval *op1, *op2;
44496 	bool result;
44497 
44498 	op1 = EX_VAR(opline->op1.var);
44499 	op2 = RT_CONSTANT(opline, opline->op2);
44500 	result = fast_is_identical_function(op1, op2);
44501 	/* Free is a no-op for const/cv */
44502 	ZEND_VM_SMART_BRANCH(!result, 0);
44503 }
44504 
ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44505 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44506 {
44507 	USE_OPLINE
44508 	zval *container, *dim, *value;
44509 	zend_long offset;
44510 	HashTable *ht;
44511 
44512 	container = EX_VAR(opline->op1.var);
44513 	dim = RT_CONSTANT(opline, opline->op2);
44514 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44515 fetch_dim_r_index_array:
44516 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
44517 			offset = Z_LVAL_P(dim);
44518 		} else {
44519 			SAVE_OPLINE();
44520 			zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC);
44521 
44522 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44523 		}
44524 		ht = Z_ARRVAL_P(container);
44525 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
44526 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
44527 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44528 			SAVE_OPLINE();
44529 
44530 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44531 		} else {
44532 			ZEND_VM_NEXT_OPCODE();
44533 		}
44534 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
44535 		container = Z_REFVAL_P(container);
44536 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44537 			goto fetch_dim_r_index_array;
44538 		} else {
44539 			goto fetch_dim_r_index_slow;
44540 		}
44541 	} else {
44542 fetch_dim_r_index_slow:
44543 		SAVE_OPLINE();
44544 		if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
44545 			dim++;
44546 		}
44547 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
44548 
44549 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44550 	}
44551 
44552 fetch_dim_r_index_undef:
44553 	ZVAL_NULL(EX_VAR(opline->result.var));
44554 	SAVE_OPLINE();
44555 	zend_undefined_offset(offset);
44556 
44557 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44558 }
44559 
ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44560 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44561 {
44562 	USE_OPLINE
44563 	zval *container, *dim, *value;
44564 	zend_long offset;
44565 	HashTable *ht;
44566 
44567 	container = EX_VAR(opline->op1.var);
44568 	dim = EX_VAR(opline->op2.var);
44569 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44570 fetch_dim_r_index_array:
44571 		if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) {
44572 			offset = Z_LVAL_P(dim);
44573 		} else {
44574 			SAVE_OPLINE();
44575 			zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR|IS_CV) OPLINE_CC EXECUTE_DATA_CC);
44576 
44577 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44578 		}
44579 		ht = Z_ARRVAL_P(container);
44580 		ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef);
44581 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
44582 		if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44583 			SAVE_OPLINE();
44584 
44585 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44586 		} else {
44587 			ZEND_VM_NEXT_OPCODE();
44588 		}
44589 	} else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
44590 		container = Z_REFVAL_P(container);
44591 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
44592 			goto fetch_dim_r_index_array;
44593 		} else {
44594 			goto fetch_dim_r_index_slow;
44595 		}
44596 	} else {
44597 fetch_dim_r_index_slow:
44598 		SAVE_OPLINE();
44599 		if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
44600 			dim++;
44601 		}
44602 		zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
44603 
44604 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44605 	}
44606 
44607 fetch_dim_r_index_undef:
44608 	ZVAL_NULL(EX_VAR(opline->result.var));
44609 	SAVE_OPLINE();
44610 	zend_undefined_offset(offset);
44611 
44612 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44613 }
44614 
ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44615 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44616 {
44617 	USE_OPLINE
44618 	zval *op1, *op2;
44619 
44620 	SAVE_OPLINE();
44621 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
44622 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44623 	div_function(EX_VAR(opline->result.var), op1, op2);
44624 
44625 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44626 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44627 }
44628 
ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44629 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44630 {
44631 	USE_OPLINE
44632 	zval *op1, *op2;
44633 
44634 	SAVE_OPLINE();
44635 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
44636 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44637 	pow_function(EX_VAR(opline->result.var), op1, op2);
44638 
44639 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44640 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44641 }
44642 
ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44643 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44644 {
44645 	USE_OPLINE
44646 	zval *op1, *op2;
44647 
44648 	op1 = EX_VAR(opline->op1.var);
44649 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44650 
44651 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
44652 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
44653 		zend_string *op1_str = Z_STR_P(op1);
44654 		zend_string *op2_str = Z_STR_P(op2);
44655 		zend_string *str;
44656 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
44657 
44658 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
44659 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
44660 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
44661 			} else {
44662 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
44663 			}
44664 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44665 				zend_string_release_ex(op1_str, 0);
44666 			}
44667 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
44668 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
44669 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
44670 			} else {
44671 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
44672 			}
44673 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
44674 				zend_string_release_ex(op2_str, 0);
44675 			}
44676 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
44677 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
44678 			size_t len = ZSTR_LEN(op1_str);
44679 
44680 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
44681 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
44682 			}
44683 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
44684 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
44685 			GC_ADD_FLAGS(str, flags);
44686 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
44687 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
44688 				zend_string_release_ex(op2_str, 0);
44689 			}
44690 		} else {
44691 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
44692 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
44693 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
44694 			GC_ADD_FLAGS(str, flags);
44695 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
44696 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44697 				zend_string_release_ex(op1_str, 0);
44698 			}
44699 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
44700 				zend_string_release_ex(op2_str, 0);
44701 			}
44702 		}
44703 		ZEND_VM_NEXT_OPCODE();
44704 	} else {
44705 		SAVE_OPLINE();
44706 
44707 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
44708 			op1 = ZVAL_UNDEFINED_OP1();
44709 		}
44710 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
44711 			op2 = ZVAL_UNDEFINED_OP2();
44712 		}
44713 		concat_function(EX_VAR(opline->result.var), op1, op2);
44714 
44715 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
44716 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
44717 	}
44718 }
44719 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44720 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44721 {
44722 	USE_OPLINE
44723 	zval *op1, *op2;
44724 	double d1, d2;
44725 
44726 	op1 = EX_VAR(opline->op1.var);
44727 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44728 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
44729 		/* pass */
44730 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
44731 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
44732 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
44733 is_equal_true:
44734 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
44735 			} else {
44736 is_equal_false:
44737 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
44738 			}
44739 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
44740 			d1 = (double)Z_LVAL_P(op1);
44741 			d2 = Z_DVAL_P(op2);
44742 			goto is_equal_double;
44743 		}
44744 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
44745 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
44746 			d1 = Z_DVAL_P(op1);
44747 			d2 = Z_DVAL_P(op2);
44748 is_equal_double:
44749 			if (d1 == d2) {
44750 				goto is_equal_true;
44751 			} else {
44752 				goto is_equal_false;
44753 			}
44754 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
44755 			d1 = Z_DVAL_P(op1);
44756 			d2 = (double)Z_LVAL_P(op2);
44757 			goto is_equal_double;
44758 		}
44759 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44760 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
44761 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
44762 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44763 				zval_ptr_dtor_str(op1);
44764 			}
44765 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
44766 				zval_ptr_dtor_str(op2);
44767 			}
44768 			if (result) {
44769 				goto is_equal_true;
44770 			} else {
44771 				goto is_equal_false;
44772 			}
44773 		}
44774 	}
44775 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44776 }
44777 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44778 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44779 {
44780 	USE_OPLINE
44781 	zval *op1, *op2;
44782 	double d1, d2;
44783 
44784 	op1 = EX_VAR(opline->op1.var);
44785 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44786 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
44787 		/* pass */
44788 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
44789 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
44790 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
44791 is_equal_true:
44792 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
44793 			} else {
44794 is_equal_false:
44795 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
44796 			}
44797 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
44798 			d1 = (double)Z_LVAL_P(op1);
44799 			d2 = Z_DVAL_P(op2);
44800 			goto is_equal_double;
44801 		}
44802 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
44803 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
44804 			d1 = Z_DVAL_P(op1);
44805 			d2 = Z_DVAL_P(op2);
44806 is_equal_double:
44807 			if (d1 == d2) {
44808 				goto is_equal_true;
44809 			} else {
44810 				goto is_equal_false;
44811 			}
44812 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
44813 			d1 = Z_DVAL_P(op1);
44814 			d2 = (double)Z_LVAL_P(op2);
44815 			goto is_equal_double;
44816 		}
44817 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44818 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
44819 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
44820 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44821 				zval_ptr_dtor_str(op1);
44822 			}
44823 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
44824 				zval_ptr_dtor_str(op2);
44825 			}
44826 			if (result) {
44827 				goto is_equal_true;
44828 			} else {
44829 				goto is_equal_false;
44830 			}
44831 		}
44832 	}
44833 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44834 }
44835 
ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44836 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44837 {
44838 	USE_OPLINE
44839 	zval *op1, *op2;
44840 	double d1, d2;
44841 
44842 	op1 = EX_VAR(opline->op1.var);
44843 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44844 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
44845 		/* pass */
44846 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
44847 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
44848 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
44849 is_equal_true:
44850 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
44851 			} else {
44852 is_equal_false:
44853 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
44854 			}
44855 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
44856 			d1 = (double)Z_LVAL_P(op1);
44857 			d2 = Z_DVAL_P(op2);
44858 			goto is_equal_double;
44859 		}
44860 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
44861 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
44862 			d1 = Z_DVAL_P(op1);
44863 			d2 = Z_DVAL_P(op2);
44864 is_equal_double:
44865 			if (d1 == d2) {
44866 				goto is_equal_true;
44867 			} else {
44868 				goto is_equal_false;
44869 			}
44870 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
44871 			d1 = Z_DVAL_P(op1);
44872 			d2 = (double)Z_LVAL_P(op2);
44873 			goto is_equal_double;
44874 		}
44875 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44876 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
44877 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
44878 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44879 				zval_ptr_dtor_str(op1);
44880 			}
44881 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
44882 				zval_ptr_dtor_str(op2);
44883 			}
44884 			if (result) {
44885 				goto is_equal_true;
44886 			} else {
44887 				goto is_equal_false;
44888 			}
44889 		}
44890 	}
44891 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44892 }
44893 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44894 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44895 {
44896 	USE_OPLINE
44897 	zval *op1, *op2;
44898 	double d1, d2;
44899 
44900 	op1 = EX_VAR(opline->op1.var);
44901 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44902 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
44903 		/* pass */
44904 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
44905 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
44906 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
44907 is_not_equal_true:
44908 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
44909 			} else {
44910 is_not_equal_false:
44911 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
44912 			}
44913 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
44914 			d1 = (double)Z_LVAL_P(op1);
44915 			d2 = Z_DVAL_P(op2);
44916 			goto is_not_equal_double;
44917 		}
44918 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
44919 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
44920 			d1 = Z_DVAL_P(op1);
44921 			d2 = Z_DVAL_P(op2);
44922 is_not_equal_double:
44923 			if (d1 != d2) {
44924 				goto is_not_equal_true;
44925 			} else {
44926 				goto is_not_equal_false;
44927 			}
44928 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
44929 			d1 = Z_DVAL_P(op1);
44930 			d2 = (double)Z_LVAL_P(op2);
44931 			goto is_not_equal_double;
44932 		}
44933 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44934 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
44935 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
44936 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44937 				zval_ptr_dtor_str(op1);
44938 			}
44939 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
44940 				zval_ptr_dtor_str(op2);
44941 			}
44942 			if (!result) {
44943 				goto is_not_equal_true;
44944 			} else {
44945 				goto is_not_equal_false;
44946 			}
44947 		}
44948 	}
44949 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
44950 }
44951 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)44952 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
44953 {
44954 	USE_OPLINE
44955 	zval *op1, *op2;
44956 	double d1, d2;
44957 
44958 	op1 = EX_VAR(opline->op1.var);
44959 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
44960 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
44961 		/* pass */
44962 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
44963 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
44964 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
44965 is_not_equal_true:
44966 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
44967 			} else {
44968 is_not_equal_false:
44969 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
44970 			}
44971 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
44972 			d1 = (double)Z_LVAL_P(op1);
44973 			d2 = Z_DVAL_P(op2);
44974 			goto is_not_equal_double;
44975 		}
44976 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
44977 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
44978 			d1 = Z_DVAL_P(op1);
44979 			d2 = Z_DVAL_P(op2);
44980 is_not_equal_double:
44981 			if (d1 != d2) {
44982 				goto is_not_equal_true;
44983 			} else {
44984 				goto is_not_equal_false;
44985 			}
44986 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
44987 			d1 = Z_DVAL_P(op1);
44988 			d2 = (double)Z_LVAL_P(op2);
44989 			goto is_not_equal_double;
44990 		}
44991 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
44992 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
44993 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
44994 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
44995 				zval_ptr_dtor_str(op1);
44996 			}
44997 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
44998 				zval_ptr_dtor_str(op2);
44999 			}
45000 			if (!result) {
45001 				goto is_not_equal_true;
45002 			} else {
45003 				goto is_not_equal_false;
45004 			}
45005 		}
45006 	}
45007 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45008 }
45009 
ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45010 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45011 {
45012 	USE_OPLINE
45013 	zval *op1, *op2;
45014 	double d1, d2;
45015 
45016 	op1 = EX_VAR(opline->op1.var);
45017 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45018 	if (1 && IS_CV == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST) {
45019 		/* pass */
45020 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
45021 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45022 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
45023 is_not_equal_true:
45024 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
45025 			} else {
45026 is_not_equal_false:
45027 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
45028 			}
45029 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45030 			d1 = (double)Z_LVAL_P(op1);
45031 			d2 = Z_DVAL_P(op2);
45032 			goto is_not_equal_double;
45033 		}
45034 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
45035 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
45036 			d1 = Z_DVAL_P(op1);
45037 			d2 = Z_DVAL_P(op2);
45038 is_not_equal_double:
45039 			if (d1 != d2) {
45040 				goto is_not_equal_true;
45041 			} else {
45042 				goto is_not_equal_false;
45043 			}
45044 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
45045 			d1 = Z_DVAL_P(op1);
45046 			d2 = (double)Z_LVAL_P(op2);
45047 			goto is_not_equal_double;
45048 		}
45049 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
45050 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
45051 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
45052 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
45053 				zval_ptr_dtor_str(op1);
45054 			}
45055 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
45056 				zval_ptr_dtor_str(op2);
45057 			}
45058 			if (!result) {
45059 				goto is_not_equal_true;
45060 			} else {
45061 				goto is_not_equal_false;
45062 			}
45063 		}
45064 	}
45065 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
45066 }
45067 
ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45068 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45069 {
45070 	USE_OPLINE
45071 	zval *op1, *op2;
45072 
45073 	SAVE_OPLINE();
45074 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
45075 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45076 	compare_function(EX_VAR(opline->result.var), op1, op2);
45077 
45078 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45079 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45080 }
45081 
ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45082 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45083 {
45084 	USE_OPLINE
45085 	zval *op1, *op2;
45086 
45087 	SAVE_OPLINE();
45088 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
45089 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45090 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
45091 
45092 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45093 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45094 }
45095 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45096 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45097 {
45098 	USE_OPLINE
45099 	zval *object;
45100 	zval *property;
45101 	zval *value;
45102 	zval *zptr;
45103 	void **cache_slot;
45104 	zend_property_info *prop_info;
45105 	zend_object *zobj;
45106 	zend_string *name, *tmp_name;
45107 
45108 	SAVE_OPLINE();
45109 	object = EX_VAR(opline->op1.var);
45110 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45111 
45112 	do {
45113 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
45114 
45115 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
45116 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
45117 				object = Z_REFVAL_P(object);
45118 				goto assign_op_object;
45119 			}
45120 			if (IS_CV == IS_CV
45121 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
45122 				ZVAL_UNDEFINED_OP1();
45123 			}
45124 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
45125 			break;
45126 		}
45127 
45128 assign_op_object:
45129 		/* here we are sure we are dealing with an object */
45130 		zobj = Z_OBJ_P(object);
45131 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45132 			name = Z_STR_P(property);
45133 		} else {
45134 			name = zval_try_get_tmp_string(property, &tmp_name);
45135 			if (UNEXPECTED(!name)) {
45136 				UNDEF_RESULT();
45137 				break;
45138 			}
45139 		}
45140 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
45141 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
45142 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
45143 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45144 					ZVAL_NULL(EX_VAR(opline->result.var));
45145 				}
45146 			} else {
45147 				zval *orig_zptr = zptr;
45148 				zend_reference *ref;
45149 
45150 				do {
45151 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
45152 						ref = Z_REF_P(zptr);
45153 						zptr = Z_REFVAL_P(zptr);
45154 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
45155 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
45156 							break;
45157 						}
45158 					}
45159 
45160 					if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45161 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
45162 					} else {
45163 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
45164 					}
45165 					if (UNEXPECTED(prop_info)) {
45166 						/* special case for typed properties */
45167 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
45168 					} else {
45169 						zend_binary_op(zptr, zptr, value OPLINE_CC);
45170 					}
45171 				} while (0);
45172 
45173 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45174 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
45175 				}
45176 			}
45177 		} else {
45178 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
45179 		}
45180 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45181 			zend_tmp_string_release(tmp_name);
45182 		}
45183 	} while (0);
45184 
45185 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
45186 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45187 
45188 	/* assign_obj has two opcodes! */
45189 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45190 }
45191 
45192 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45193 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45194 {
45195 	USE_OPLINE
45196 	zval *var_ptr;
45197 	zval *value, *container, *dim;
45198 	HashTable *ht;
45199 
45200 	SAVE_OPLINE();
45201 	container = EX_VAR(opline->op1.var);
45202 
45203 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45204 assign_dim_op_array:
45205 		SEPARATE_ARRAY(container);
45206 		ht = Z_ARRVAL_P(container);
45207 assign_dim_op_new_array:
45208 		dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45209 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45210 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
45211 			if (UNEXPECTED(!var_ptr)) {
45212 				zend_cannot_add_element();
45213 				goto assign_dim_op_ret_null;
45214 			}
45215 		} else {
45216 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45217 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
45218 			} else {
45219 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
45220 			}
45221 			if (UNEXPECTED(!var_ptr)) {
45222 				goto assign_dim_op_ret_null;
45223 			}
45224 		}
45225 
45226 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
45227 
45228 		do {
45229 			if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
45230 				zend_reference *ref = Z_REF_P(var_ptr);
45231 				var_ptr = Z_REFVAL_P(var_ptr);
45232 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
45233 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
45234 					break;
45235 				}
45236 			}
45237 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
45238 		} while (0);
45239 
45240 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45241 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
45242 		}
45243 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
45244 	} else {
45245 		if (EXPECTED(Z_ISREF_P(container))) {
45246 			container = Z_REFVAL_P(container);
45247 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45248 				goto assign_dim_op_array;
45249 			}
45250 		}
45251 
45252 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
45253 			zend_object *obj = Z_OBJ_P(container);
45254 
45255 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45256 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
45257 				dim++;
45258 			}
45259 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
45260 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
45261 			uint8_t old_type;
45262 
45263 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
45264 				ZVAL_UNDEFINED_OP1();
45265 			}
45266 			ht = zend_new_array(8);
45267 			old_type = Z_TYPE_P(container);
45268 			ZVAL_ARR(container, ht);
45269 			if (UNEXPECTED(old_type == IS_FALSE)) {
45270 				GC_ADDREF(ht);
45271 				zend_false_to_array_deprecated();
45272 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
45273 					zend_array_destroy(ht);
45274 					goto assign_dim_op_ret_null;
45275 				}
45276 			}
45277 			goto assign_dim_op_new_array;
45278 		} else {
45279 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45280 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
45281 assign_dim_op_ret_null:
45282 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
45283 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45284 				ZVAL_NULL(EX_VAR(opline->result.var));
45285 			}
45286 		}
45287 	}
45288 
45289 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45290 
45291 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
45292 }
45293 
ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45294 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45295 {
45296 	USE_OPLINE
45297 	zval *var_ptr;
45298 	zval *value;
45299 
45300 	SAVE_OPLINE();
45301 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45302 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
45303 
45304 	do {
45305 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
45306 			zend_reference *ref = Z_REF_P(var_ptr);
45307 			var_ptr = Z_REFVAL_P(var_ptr);
45308 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
45309 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
45310 				break;
45311 			}
45312 		}
45313 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
45314 	} while (0);
45315 
45316 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45317 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
45318 	}
45319 
45320 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45321 
45322 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45323 }
45324 
ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45325 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45326 {
45327 	USE_OPLINE
45328 	zval *object;
45329 	zval *property;
45330 	zval *zptr;
45331 	void **cache_slot;
45332 	zend_property_info *prop_info;
45333 	zend_object *zobj;
45334 	zend_string *name, *tmp_name;
45335 
45336 	SAVE_OPLINE();
45337 	object = EX_VAR(opline->op1.var);
45338 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45339 
45340 	do {
45341 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
45342 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
45343 				object = Z_REFVAL_P(object);
45344 				goto pre_incdec_object;
45345 			}
45346 			if (IS_CV == IS_CV
45347 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
45348 				ZVAL_UNDEFINED_OP1();
45349 			}
45350 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
45351 			break;
45352 		}
45353 
45354 pre_incdec_object:
45355 		/* here we are sure we are dealing with an object */
45356 		zobj = Z_OBJ_P(object);
45357 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45358 			name = Z_STR_P(property);
45359 		} else {
45360 			name = zval_try_get_tmp_string(property, &tmp_name);
45361 			if (UNEXPECTED(!name)) {
45362 				UNDEF_RESULT();
45363 				break;
45364 			}
45365 		}
45366 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
45367 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
45368 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
45369 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45370 					ZVAL_NULL(EX_VAR(opline->result.var));
45371 				}
45372 			} else {
45373 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45374 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
45375 				} else {
45376 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
45377 				}
45378 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
45379 			}
45380 		} else {
45381 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
45382 		}
45383 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45384 			zend_tmp_string_release(tmp_name);
45385 		}
45386 	} while (0);
45387 
45388 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45389 
45390 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45391 }
45392 
ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45393 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45394 {
45395 	USE_OPLINE
45396 	zval *object;
45397 	zval *property;
45398 	zval *zptr;
45399 	void **cache_slot;
45400 	zend_property_info *prop_info;
45401 	zend_object *zobj;
45402 	zend_string *name, *tmp_name;
45403 
45404 	SAVE_OPLINE();
45405 	object = EX_VAR(opline->op1.var);
45406 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45407 
45408 	do {
45409 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
45410 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
45411 				object = Z_REFVAL_P(object);
45412 				goto post_incdec_object;
45413 			}
45414 			if (IS_CV == IS_CV
45415 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
45416 				ZVAL_UNDEFINED_OP1();
45417 			}
45418 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
45419 			break;
45420 		}
45421 
45422 post_incdec_object:
45423 		/* here we are sure we are dealing with an object */
45424 		zobj = Z_OBJ_P(object);
45425 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45426 			name = Z_STR_P(property);
45427 		} else {
45428 			name = zval_try_get_tmp_string(property, &tmp_name);
45429 			if (UNEXPECTED(!name)) {
45430 				ZVAL_UNDEF(EX_VAR(opline->result.var));
45431 				break;
45432 			}
45433 		}
45434 		cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
45435 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
45436 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
45437 				ZVAL_NULL(EX_VAR(opline->result.var));
45438 			} else {
45439 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45440 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
45441 				} else {
45442 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
45443 				}
45444 
45445 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
45446 			}
45447 		} else {
45448 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
45449 		}
45450 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45451 			zend_tmp_string_release(tmp_name);
45452 		}
45453 	} while (0);
45454 
45455 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45456 
45457 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45458 }
45459 
ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45460 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45461 {
45462 	USE_OPLINE
45463 	zval *container, *dim, *value;
45464 
45465 	SAVE_OPLINE();
45466 	container = EX_VAR(opline->op1.var);
45467 	dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45468 	if (IS_CV != IS_CONST) {
45469 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45470 fetch_dim_r_array:
45471 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC);
45472 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
45473 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
45474 			container = Z_REFVAL_P(container);
45475 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
45476 				goto fetch_dim_r_array;
45477 			} else {
45478 				goto fetch_dim_r_slow;
45479 			}
45480 		} else {
45481 fetch_dim_r_slow:
45482 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
45483 				dim++;
45484 			}
45485 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
45486 		}
45487 	} else {
45488 		zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC);
45489 	}
45490 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45491 
45492 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45493 }
45494 
ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45495 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45496 {
45497 	USE_OPLINE
45498 	zval *container;
45499 
45500 	SAVE_OPLINE();
45501 	container = EX_VAR(opline->op1.var);
45502 	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);
45503 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45504 	if (IS_CV == IS_VAR) {
45505 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
45506 	}
45507 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45508 }
45509 
ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45510 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45511 {
45512 	USE_OPLINE
45513 	zval *container;
45514 
45515 	SAVE_OPLINE();
45516 	container = EX_VAR(opline->op1.var);
45517 	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);
45518 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45519 	if (IS_CV == IS_VAR) {
45520 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
45521 	}
45522 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45523 }
45524 
ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45525 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45526 {
45527 	USE_OPLINE
45528 	zval *container;
45529 
45530 	SAVE_OPLINE();
45531 	container = EX_VAR(opline->op1.var);
45532 	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);
45533 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45534 
45535 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45536 }
45537 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45538 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45539 {
45540 #if 0
45541 	USE_OPLINE
45542 #endif
45543 
45544 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
45545 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
45546 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45547 		}
45548 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45549 	} else {
45550 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
45551 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45552 		}
45553 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45554 	}
45555 }
45556 
ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45557 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45558 {
45559 	USE_OPLINE
45560 	zval *container;
45561 
45562 	SAVE_OPLINE();
45563 	container = EX_VAR(opline->op1.var);
45564 	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);
45565 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45566 	if (IS_CV == IS_VAR) {
45567 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
45568 	}
45569 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45570 }
45571 
ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45572 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45573 {
45574 	USE_OPLINE
45575 	zval *container;
45576 	void **cache_slot = NULL;
45577 
45578 	SAVE_OPLINE();
45579 	container = EX_VAR(opline->op1.var);
45580 
45581 	if (IS_CV == IS_CONST ||
45582 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
45583 		do {
45584 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
45585 				container = Z_REFVAL_P(container);
45586 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
45587 					break;
45588 				}
45589 			}
45590 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
45591 				ZVAL_UNDEFINED_OP1();
45592 			}
45593 			zend_wrong_property_read(container, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
45594 			ZVAL_NULL(EX_VAR(opline->result.var));
45595 			goto fetch_obj_r_finish;
45596 		} while (0);
45597 	}
45598 
45599 	/* here we are sure we are dealing with an object */
45600 	do {
45601 		zend_object *zobj = Z_OBJ_P(container);
45602 		zend_string *name, *tmp_name;
45603 		zval *retval;
45604 
45605 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45606 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
45607 
45608 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
45609 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
45610 
45611 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
45612 					retval = OBJ_PROP(zobj, prop_offset);
45613 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
45614 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
45615 							goto fetch_obj_r_copy;
45616 						} else {
45617 fetch_obj_r_fast_copy:
45618 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
45619 							ZEND_VM_NEXT_OPCODE();
45620 						}
45621 					}
45622 				} else if (EXPECTED(zobj->properties != NULL)) {
45623 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
45624 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
45625 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
45626 
45627 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
45628 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
45629 
45630 							if (EXPECTED(p->key == name) ||
45631 							    (EXPECTED(p->h == ZSTR_H(name)) &&
45632 							     EXPECTED(p->key != NULL) &&
45633 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
45634 								retval = &p->val;
45635 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
45636 									goto fetch_obj_r_copy;
45637 								} else {
45638 									goto fetch_obj_r_fast_copy;
45639 								}
45640 							}
45641 						}
45642 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
45643 					}
45644 					retval = zend_hash_find_known_hash(zobj->properties, name);
45645 					if (EXPECTED(retval)) {
45646 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
45647 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
45648 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
45649 							goto fetch_obj_r_copy;
45650 						} else {
45651 							goto fetch_obj_r_fast_copy;
45652 						}
45653 					}
45654 				}
45655 			}
45656 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
45657 		} else {
45658 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
45659 			if (UNEXPECTED(!name)) {
45660 				ZVAL_UNDEF(EX_VAR(opline->result.var));
45661 				break;
45662 			}
45663 		}
45664 
45665 #if ZEND_DEBUG
45666 		/* For non-standard object handlers, verify a declared property type in debug builds.
45667 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
45668 		zend_property_info *prop_info = NULL;
45669 		if (zobj->handlers->read_property != zend_std_read_property) {
45670 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
45671 		}
45672 #endif
45673 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
45674 #if ZEND_DEBUG
45675 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
45676 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
45677 			ZVAL_OPT_DEREF(retval);
45678 			zend_verify_property_type(prop_info, retval, /* strict */ true);
45679 		}
45680 #endif
45681 
45682 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45683 			zend_tmp_string_release(tmp_name);
45684 		}
45685 
45686 		if (retval != EX_VAR(opline->result.var)) {
45687 fetch_obj_r_copy:
45688 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
45689 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
45690 			zend_unwrap_reference(retval);
45691 		}
45692 	} while (0);
45693 
45694 fetch_obj_r_finish:
45695 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45696 
45697 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45698 }
45699 
ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45700 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45701 {
45702 	USE_OPLINE
45703 	zval *property, *container, *result;
45704 
45705 	SAVE_OPLINE();
45706 
45707 	container = EX_VAR(opline->op1.var);
45708 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45709 	result = EX_VAR(opline->result.var);
45710 	zend_fetch_property_address(
45711 		result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR),
45712 		(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
45713 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
45714 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45715 	if (IS_CV == IS_VAR) {
45716 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
45717 	}
45718 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45719 }
45720 
ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45721 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45722 {
45723 	USE_OPLINE
45724 	zval *property, *container, *result;
45725 
45726 	SAVE_OPLINE();
45727 	container = EX_VAR(opline->op1.var);
45728 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45729 	result = EX_VAR(opline->result.var);
45730 	zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
45731 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45732 	if (IS_CV == IS_VAR) {
45733 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
45734 	}
45735 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45736 }
45737 
ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45738 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45739 {
45740 	USE_OPLINE
45741 	zval *container;
45742 	void **cache_slot = NULL;
45743 
45744 	SAVE_OPLINE();
45745 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
45746 
45747 	if (IS_CV == IS_CONST ||
45748 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
45749 		do {
45750 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
45751 				container = Z_REFVAL_P(container);
45752 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
45753 					break;
45754 				}
45755 			}
45756 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
45757 				ZVAL_UNDEFINED_OP2();
45758 			}
45759 			ZVAL_NULL(EX_VAR(opline->result.var));
45760 			goto fetch_obj_is_finish;
45761 		} while (0);
45762 	}
45763 
45764 	/* here we are sure we are dealing with an object */
45765 	do {
45766 		zend_object *zobj = Z_OBJ_P(container);
45767 		zend_string *name, *tmp_name;
45768 		zval *retval;
45769 
45770 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45771 			cache_slot = CACHE_ADDR(opline->extended_value);
45772 
45773 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
45774 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
45775 
45776 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
45777 					retval = OBJ_PROP(zobj, prop_offset);
45778 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
45779 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
45780 							goto fetch_obj_is_copy;
45781 						} else {
45782 fetch_obj_is_fast_copy:
45783 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
45784 							ZEND_VM_NEXT_OPCODE();
45785 						}
45786 					}
45787 				} else if (EXPECTED(zobj->properties != NULL)) {
45788 					name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
45789 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
45790 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
45791 
45792 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
45793 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
45794 
45795 							if (EXPECTED(p->key == name) ||
45796 							    (EXPECTED(p->h == ZSTR_H(name)) &&
45797 							     EXPECTED(p->key != NULL) &&
45798 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
45799 								retval = &p->val;
45800 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
45801 									goto fetch_obj_is_copy;
45802 								} else {
45803 									goto fetch_obj_is_fast_copy;
45804 								}
45805 							}
45806 						}
45807 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
45808 					}
45809 					retval = zend_hash_find_known_hash(zobj->properties, name);
45810 					if (EXPECTED(retval)) {
45811 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
45812 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
45813 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
45814 							goto fetch_obj_is_copy;
45815 						} else {
45816 							goto fetch_obj_is_fast_copy;
45817 						}
45818 					}
45819 				}
45820 			}
45821 			name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
45822 		} else {
45823 			name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
45824 			if (UNEXPECTED(!name)) {
45825 				ZVAL_UNDEF(EX_VAR(opline->result.var));
45826 				break;
45827 			}
45828 		}
45829 
45830 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
45831 
45832 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45833 			zend_tmp_string_release(tmp_name);
45834 		}
45835 
45836 		if (retval != EX_VAR(opline->result.var)) {
45837 fetch_obj_is_copy:
45838 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
45839 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
45840 			zend_unwrap_reference(retval);
45841 		}
45842 	} while (0);
45843 
45844 fetch_obj_is_finish:
45845 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45846 
45847 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45848 }
45849 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45850 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45851 {
45852 #if 0
45853 	USE_OPLINE
45854 #endif
45855 
45856 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
45857 		/* Behave like FETCH_OBJ_W */
45858 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
45859 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45860 		}
45861 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45862 	} else {
45863 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
45864 	}
45865 }
45866 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45867 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45868 {
45869 	USE_OPLINE
45870 	zval *container, *property, *result;
45871 
45872 	SAVE_OPLINE();
45873 	container = EX_VAR(opline->op1.var);
45874 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
45875 	result = EX_VAR(opline->result.var);
45876 	zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0 OPLINE_CC EXECUTE_DATA_CC);
45877 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
45878 	if (IS_CV == IS_VAR) {
45879 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
45880 	}
45881 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
45882 }
45883 
ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)45884 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
45885 {
45886 	USE_OPLINE
45887 	zval *object, *value, tmp;
45888 	zend_object *zobj;
45889 	zend_string *name, *tmp_name;
45890 	zend_refcounted *garbage = NULL;
45891 
45892 	SAVE_OPLINE();
45893 	object = EX_VAR(opline->op1.var);
45894 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
45895 
45896 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
45897 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
45898 			object = Z_REFVAL_P(object);
45899 			goto assign_object;
45900 		}
45901 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
45902 		value = &EG(uninitialized_zval);
45903 		goto free_and_exit_assign_obj;
45904 	}
45905 
45906 assign_object:
45907 	zobj = Z_OBJ_P(object);
45908 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
45909 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
45910 			void **cache_slot = CACHE_ADDR(opline->extended_value);
45911 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
45912 			zval *property_val;
45913 
45914 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
45915 				property_val = OBJ_PROP(zobj, prop_offset);
45916 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
45917 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
45918 
45919 					if (UNEXPECTED(prop_info != NULL)) {
45920 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
45921 						goto free_and_exit_assign_obj;
45922 					} else {
45923 fast_assign_obj:
45924 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
45925 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45926 							ZVAL_COPY(EX_VAR(opline->result.var), value);
45927 						}
45928 						goto exit_assign_obj;
45929 					}
45930 				}
45931 			} else {
45932 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
45933 				if (EXPECTED(zobj->properties != NULL)) {
45934 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
45935 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
45936 							GC_DELREF(zobj->properties);
45937 						}
45938 						zobj->properties = zend_array_dup(zobj->properties);
45939 					}
45940 					property_val = zend_hash_find_known_hash(zobj->properties, name);
45941 					if (property_val) {
45942 						goto fast_assign_obj;
45943 					}
45944 				}
45945 
45946 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
45947 					if (EXPECTED(zobj->properties == NULL)) {
45948 						rebuild_object_properties(zobj);
45949 					}
45950 					if (IS_CONST == IS_CONST) {
45951 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
45952 							Z_ADDREF_P(value);
45953 						}
45954 					} else if (IS_CONST != IS_TMP_VAR) {
45955 						if (Z_ISREF_P(value)) {
45956 							if (IS_CONST == IS_VAR) {
45957 								zend_reference *ref = Z_REF_P(value);
45958 								if (GC_DELREF(ref) == 0) {
45959 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
45960 									efree_size(ref, sizeof(zend_reference));
45961 									value = &tmp;
45962 								} else {
45963 									value = Z_REFVAL_P(value);
45964 									Z_TRY_ADDREF_P(value);
45965 								}
45966 							} else {
45967 								value = Z_REFVAL_P(value);
45968 								Z_TRY_ADDREF_P(value);
45969 							}
45970 						} else if (IS_CONST == IS_CV) {
45971 							Z_TRY_ADDREF_P(value);
45972 						}
45973 						}
45974 					zend_hash_add_new(zobj->properties, name, value);
45975 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
45976 						ZVAL_COPY(EX_VAR(opline->result.var), value);
45977 					}
45978 					goto exit_assign_obj;
45979 				}
45980 			}
45981 		}
45982 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
45983 	} else {
45984 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
45985 		if (UNEXPECTED(!name)) {
45986 
45987 			UNDEF_RESULT();
45988 			goto exit_assign_obj;
45989 		}
45990 	}
45991 
45992 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
45993 		ZVAL_DEREF(value);
45994 	}
45995 
45996 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
45997 
45998 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
45999 		zend_tmp_string_release(tmp_name);
46000 	}
46001 
46002 free_and_exit_assign_obj:
46003 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
46004 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
46005 	}
46006 
46007 exit_assign_obj:
46008 	if (garbage) {
46009 		GC_DTOR_NO_REF(garbage);
46010 	}
46011 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46012 
46013 	/* assign_obj has two opcodes! */
46014 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46015 }
46016 
46017 /* 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)46018 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46019 {
46020 	USE_OPLINE
46021 	zval *object, *value, tmp;
46022 	zend_object *zobj;
46023 	zend_string *name, *tmp_name;
46024 	zend_refcounted *garbage = NULL;
46025 
46026 	SAVE_OPLINE();
46027 	object = EX_VAR(opline->op1.var);
46028 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
46029 
46030 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
46031 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
46032 			object = Z_REFVAL_P(object);
46033 			goto assign_object;
46034 		}
46035 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
46036 		value = &EG(uninitialized_zval);
46037 		goto free_and_exit_assign_obj;
46038 	}
46039 
46040 assign_object:
46041 	zobj = Z_OBJ_P(object);
46042 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46043 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
46044 			void **cache_slot = CACHE_ADDR(opline->extended_value);
46045 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
46046 			zval *property_val;
46047 
46048 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
46049 				property_val = OBJ_PROP(zobj, prop_offset);
46050 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
46051 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
46052 
46053 					if (UNEXPECTED(prop_info != NULL)) {
46054 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
46055 						goto free_and_exit_assign_obj;
46056 					} else {
46057 fast_assign_obj:
46058 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
46059 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46060 							ZVAL_COPY(EX_VAR(opline->result.var), value);
46061 						}
46062 						goto exit_assign_obj;
46063 					}
46064 				}
46065 			} else {
46066 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46067 				if (EXPECTED(zobj->properties != NULL)) {
46068 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
46069 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
46070 							GC_DELREF(zobj->properties);
46071 						}
46072 						zobj->properties = zend_array_dup(zobj->properties);
46073 					}
46074 					property_val = zend_hash_find_known_hash(zobj->properties, name);
46075 					if (property_val) {
46076 						goto fast_assign_obj;
46077 					}
46078 				}
46079 
46080 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
46081 					if (EXPECTED(zobj->properties == NULL)) {
46082 						rebuild_object_properties(zobj);
46083 					}
46084 					if (IS_TMP_VAR == IS_CONST) {
46085 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
46086 							Z_ADDREF_P(value);
46087 						}
46088 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
46089 						if (Z_ISREF_P(value)) {
46090 							if (IS_TMP_VAR == IS_VAR) {
46091 								zend_reference *ref = Z_REF_P(value);
46092 								if (GC_DELREF(ref) == 0) {
46093 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
46094 									efree_size(ref, sizeof(zend_reference));
46095 									value = &tmp;
46096 								} else {
46097 									value = Z_REFVAL_P(value);
46098 									Z_TRY_ADDREF_P(value);
46099 								}
46100 							} else {
46101 								value = Z_REFVAL_P(value);
46102 								Z_TRY_ADDREF_P(value);
46103 							}
46104 						} else if (IS_TMP_VAR == IS_CV) {
46105 							Z_TRY_ADDREF_P(value);
46106 						}
46107 						}
46108 					zend_hash_add_new(zobj->properties, name, value);
46109 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46110 						ZVAL_COPY(EX_VAR(opline->result.var), value);
46111 					}
46112 					goto exit_assign_obj;
46113 				}
46114 			}
46115 		}
46116 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46117 	} else {
46118 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
46119 		if (UNEXPECTED(!name)) {
46120 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46121 			UNDEF_RESULT();
46122 			goto exit_assign_obj;
46123 		}
46124 	}
46125 
46126 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
46127 		ZVAL_DEREF(value);
46128 	}
46129 
46130 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
46131 
46132 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46133 		zend_tmp_string_release(tmp_name);
46134 	}
46135 
46136 free_and_exit_assign_obj:
46137 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
46138 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
46139 	}
46140 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46141 exit_assign_obj:
46142 	if (garbage) {
46143 		GC_DTOR_NO_REF(garbage);
46144 	}
46145 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46146 
46147 	/* assign_obj has two opcodes! */
46148 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46149 }
46150 
46151 /* 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)46152 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46153 {
46154 	USE_OPLINE
46155 	zval *object, *value, tmp;
46156 	zend_object *zobj;
46157 	zend_string *name, *tmp_name;
46158 	zend_refcounted *garbage = NULL;
46159 
46160 	SAVE_OPLINE();
46161 	object = EX_VAR(opline->op1.var);
46162 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
46163 
46164 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
46165 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
46166 			object = Z_REFVAL_P(object);
46167 			goto assign_object;
46168 		}
46169 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
46170 		value = &EG(uninitialized_zval);
46171 		goto free_and_exit_assign_obj;
46172 	}
46173 
46174 assign_object:
46175 	zobj = Z_OBJ_P(object);
46176 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46177 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
46178 			void **cache_slot = CACHE_ADDR(opline->extended_value);
46179 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
46180 			zval *property_val;
46181 
46182 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
46183 				property_val = OBJ_PROP(zobj, prop_offset);
46184 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
46185 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
46186 
46187 					if (UNEXPECTED(prop_info != NULL)) {
46188 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
46189 						goto free_and_exit_assign_obj;
46190 					} else {
46191 fast_assign_obj:
46192 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
46193 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46194 							ZVAL_COPY(EX_VAR(opline->result.var), value);
46195 						}
46196 						goto exit_assign_obj;
46197 					}
46198 				}
46199 			} else {
46200 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46201 				if (EXPECTED(zobj->properties != NULL)) {
46202 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
46203 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
46204 							GC_DELREF(zobj->properties);
46205 						}
46206 						zobj->properties = zend_array_dup(zobj->properties);
46207 					}
46208 					property_val = zend_hash_find_known_hash(zobj->properties, name);
46209 					if (property_val) {
46210 						goto fast_assign_obj;
46211 					}
46212 				}
46213 
46214 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
46215 					if (EXPECTED(zobj->properties == NULL)) {
46216 						rebuild_object_properties(zobj);
46217 					}
46218 					if (IS_VAR == IS_CONST) {
46219 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
46220 							Z_ADDREF_P(value);
46221 						}
46222 					} else if (IS_VAR != IS_TMP_VAR) {
46223 						if (Z_ISREF_P(value)) {
46224 							if (IS_VAR == IS_VAR) {
46225 								zend_reference *ref = Z_REF_P(value);
46226 								if (GC_DELREF(ref) == 0) {
46227 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
46228 									efree_size(ref, sizeof(zend_reference));
46229 									value = &tmp;
46230 								} else {
46231 									value = Z_REFVAL_P(value);
46232 									Z_TRY_ADDREF_P(value);
46233 								}
46234 							} else {
46235 								value = Z_REFVAL_P(value);
46236 								Z_TRY_ADDREF_P(value);
46237 							}
46238 						} else if (IS_VAR == IS_CV) {
46239 							Z_TRY_ADDREF_P(value);
46240 						}
46241 						}
46242 					zend_hash_add_new(zobj->properties, name, value);
46243 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46244 						ZVAL_COPY(EX_VAR(opline->result.var), value);
46245 					}
46246 					goto exit_assign_obj;
46247 				}
46248 			}
46249 		}
46250 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46251 	} else {
46252 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
46253 		if (UNEXPECTED(!name)) {
46254 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46255 			UNDEF_RESULT();
46256 			goto exit_assign_obj;
46257 		}
46258 	}
46259 
46260 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
46261 		ZVAL_DEREF(value);
46262 	}
46263 
46264 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
46265 
46266 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46267 		zend_tmp_string_release(tmp_name);
46268 	}
46269 
46270 free_and_exit_assign_obj:
46271 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
46272 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
46273 	}
46274 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46275 exit_assign_obj:
46276 	if (garbage) {
46277 		GC_DTOR_NO_REF(garbage);
46278 	}
46279 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46280 
46281 	/* assign_obj has two opcodes! */
46282 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46283 }
46284 
46285 /* 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)46286 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46287 {
46288 	USE_OPLINE
46289 	zval *object, *value, tmp;
46290 	zend_object *zobj;
46291 	zend_string *name, *tmp_name;
46292 	zend_refcounted *garbage = NULL;
46293 
46294 	SAVE_OPLINE();
46295 	object = EX_VAR(opline->op1.var);
46296 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
46297 
46298 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
46299 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
46300 			object = Z_REFVAL_P(object);
46301 			goto assign_object;
46302 		}
46303 		zend_throw_non_object_error(object, _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
46304 		value = &EG(uninitialized_zval);
46305 		goto free_and_exit_assign_obj;
46306 	}
46307 
46308 assign_object:
46309 	zobj = Z_OBJ_P(object);
46310 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46311 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
46312 			void **cache_slot = CACHE_ADDR(opline->extended_value);
46313 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
46314 			zval *property_val;
46315 
46316 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
46317 				property_val = OBJ_PROP(zobj, prop_offset);
46318 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
46319 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
46320 
46321 					if (UNEXPECTED(prop_info != NULL)) {
46322 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
46323 						goto free_and_exit_assign_obj;
46324 					} else {
46325 fast_assign_obj:
46326 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
46327 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46328 							ZVAL_COPY(EX_VAR(opline->result.var), value);
46329 						}
46330 						goto exit_assign_obj;
46331 					}
46332 				}
46333 			} else {
46334 				name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46335 				if (EXPECTED(zobj->properties != NULL)) {
46336 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
46337 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
46338 							GC_DELREF(zobj->properties);
46339 						}
46340 						zobj->properties = zend_array_dup(zobj->properties);
46341 					}
46342 					property_val = zend_hash_find_known_hash(zobj->properties, name);
46343 					if (property_val) {
46344 						goto fast_assign_obj;
46345 					}
46346 				}
46347 
46348 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
46349 					if (EXPECTED(zobj->properties == NULL)) {
46350 						rebuild_object_properties(zobj);
46351 					}
46352 					if (IS_CV == IS_CONST) {
46353 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
46354 							Z_ADDREF_P(value);
46355 						}
46356 					} else if (IS_CV != IS_TMP_VAR) {
46357 						if (Z_ISREF_P(value)) {
46358 							if (IS_CV == IS_VAR) {
46359 								zend_reference *ref = Z_REF_P(value);
46360 								if (GC_DELREF(ref) == 0) {
46361 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
46362 									efree_size(ref, sizeof(zend_reference));
46363 									value = &tmp;
46364 								} else {
46365 									value = Z_REFVAL_P(value);
46366 									Z_TRY_ADDREF_P(value);
46367 								}
46368 							} else {
46369 								value = Z_REFVAL_P(value);
46370 								Z_TRY_ADDREF_P(value);
46371 							}
46372 						} else if (IS_CV == IS_CV) {
46373 							Z_TRY_ADDREF_P(value);
46374 						}
46375 						}
46376 					zend_hash_add_new(zobj->properties, name, value);
46377 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46378 						ZVAL_COPY(EX_VAR(opline->result.var), value);
46379 					}
46380 					goto exit_assign_obj;
46381 				}
46382 			}
46383 		}
46384 		name = Z_STR_P(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC));
46385 	} else {
46386 		name = zval_try_get_tmp_string(_get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
46387 		if (UNEXPECTED(!name)) {
46388 
46389 			UNDEF_RESULT();
46390 			goto exit_assign_obj;
46391 		}
46392 	}
46393 
46394 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
46395 		ZVAL_DEREF(value);
46396 	}
46397 
46398 	value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
46399 
46400 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
46401 		zend_tmp_string_release(tmp_name);
46402 	}
46403 
46404 free_and_exit_assign_obj:
46405 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
46406 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
46407 	}
46408 
46409 exit_assign_obj:
46410 	if (garbage) {
46411 		GC_DTOR_NO_REF(garbage);
46412 	}
46413 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46414 
46415 	/* assign_obj has two opcodes! */
46416 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46417 }
46418 
46419 /* 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)46420 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46421 {
46422 	USE_OPLINE
46423 	zval *object_ptr, *orig_object_ptr;
46424 	zval *value;
46425 	zval *variable_ptr;
46426 	zval *dim;
46427 	zend_refcounted *garbage = NULL;
46428 
46429 	SAVE_OPLINE();
46430 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
46431 
46432 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46433 try_assign_dim_array:
46434 		SEPARATE_ARRAY(object_ptr);
46435 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
46436 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
46437 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
46438 				HashTable *ht = Z_ARRVAL_P(object_ptr);
46439 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
46440 					GC_ADDREF(ht);
46441 				}
46442 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46443 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
46444 					zend_array_destroy(ht);
46445 					goto assign_dim_error;
46446 				}
46447 			}
46448 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
46449 				ZVAL_DEREF(value);
46450 			}
46451 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
46452 			if (UNEXPECTED(value == NULL)) {
46453 				zend_cannot_add_element();
46454 				goto assign_dim_error;
46455 			} else if (IS_CONST == IS_CV) {
46456 				if (Z_REFCOUNTED_P(value)) {
46457 					Z_ADDREF_P(value);
46458 				}
46459 			} else if (IS_CONST == IS_VAR) {
46460 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
46461 				if (Z_ISREF_P(free_op_data)) {
46462 					if (Z_REFCOUNTED_P(value)) {
46463 						Z_ADDREF_P(value);
46464 					}
46465 					zval_ptr_dtor_nogc(free_op_data);
46466 				}
46467 			} else if (IS_CONST == IS_CONST) {
46468 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
46469 					Z_ADDREF_P(value);
46470 				}
46471 			}
46472 		} else {
46473 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46474 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46475 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46476 			} else {
46477 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46478 			}
46479 			if (UNEXPECTED(variable_ptr == NULL)) {
46480 				goto assign_dim_error;
46481 			}
46482 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
46483 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
46484 		}
46485 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46486 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46487 		}
46488 		if (garbage) {
46489 			GC_DTOR_NO_REF(garbage);
46490 		}
46491 	} else {
46492 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
46493 			object_ptr = Z_REFVAL_P(object_ptr);
46494 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46495 				goto try_assign_dim_array;
46496 			}
46497 		}
46498 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
46499 			zend_object *obj = Z_OBJ_P(object_ptr);
46500 
46501 			GC_ADDREF(obj);
46502 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46503 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
46504 				dim = ZVAL_UNDEFINED_OP2();
46505 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
46506 				dim++;
46507 			}
46508 
46509 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
46510 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
46511 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46512 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
46513 				ZVAL_DEREF(value);
46514 			}
46515 
46516 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
46517 
46518 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
46519 				zend_objects_store_del(obj);
46520 			}
46521 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
46522 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
46523 				zend_use_new_element_for_string();
46524 
46525 				UNDEF_RESULT();
46526 			} else {
46527 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46528 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
46529 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
46530 
46531 			}
46532 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
46533 			if (Z_ISREF_P(orig_object_ptr)
46534 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
46535 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
46536 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46537 
46538 				UNDEF_RESULT();
46539 			} else {
46540 				HashTable *ht = zend_new_array(8);
46541 				uint8_t old_type = Z_TYPE_P(object_ptr);
46542 
46543 				ZVAL_ARR(object_ptr, ht);
46544 				if (UNEXPECTED(old_type == IS_FALSE)) {
46545 					GC_ADDREF(ht);
46546 					zend_false_to_array_deprecated();
46547 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
46548 						zend_array_destroy(ht);
46549 						goto assign_dim_error;
46550 					}
46551 				}
46552 				goto try_assign_dim_array;
46553 			}
46554 		} else {
46555 			zend_use_scalar_as_array();
46556 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46557 assign_dim_error:
46558 
46559 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46560 				ZVAL_NULL(EX_VAR(opline->result.var));
46561 			}
46562 		}
46563 	}
46564 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
46565 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46566 	}
46567 
46568 	/* assign_dim has two opcodes! */
46569 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46570 }
46571 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46572 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46573 {
46574 	USE_OPLINE
46575 	zval *object_ptr, *orig_object_ptr;
46576 	zval *value;
46577 	zval *variable_ptr;
46578 	zval *dim;
46579 	zend_refcounted *garbage = NULL;
46580 
46581 	SAVE_OPLINE();
46582 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
46583 
46584 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46585 try_assign_dim_array:
46586 		SEPARATE_ARRAY(object_ptr);
46587 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
46588 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
46589 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
46590 				HashTable *ht = Z_ARRVAL_P(object_ptr);
46591 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
46592 					GC_ADDREF(ht);
46593 				}
46594 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46595 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
46596 					zend_array_destroy(ht);
46597 					goto assign_dim_error;
46598 				}
46599 			}
46600 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
46601 				ZVAL_DEREF(value);
46602 			}
46603 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
46604 			if (UNEXPECTED(value == NULL)) {
46605 				zend_cannot_add_element();
46606 				goto assign_dim_error;
46607 			} else if (IS_TMP_VAR == IS_CV) {
46608 				if (Z_REFCOUNTED_P(value)) {
46609 					Z_ADDREF_P(value);
46610 				}
46611 			} else if (IS_TMP_VAR == IS_VAR) {
46612 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
46613 				if (Z_ISREF_P(free_op_data)) {
46614 					if (Z_REFCOUNTED_P(value)) {
46615 						Z_ADDREF_P(value);
46616 					}
46617 					zval_ptr_dtor_nogc(free_op_data);
46618 				}
46619 			} else if (IS_TMP_VAR == IS_CONST) {
46620 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
46621 					Z_ADDREF_P(value);
46622 				}
46623 			}
46624 		} else {
46625 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46626 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46627 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46628 			} else {
46629 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46630 			}
46631 			if (UNEXPECTED(variable_ptr == NULL)) {
46632 				goto assign_dim_error;
46633 			}
46634 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
46635 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
46636 		}
46637 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46638 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46639 		}
46640 		if (garbage) {
46641 			GC_DTOR_NO_REF(garbage);
46642 		}
46643 	} else {
46644 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
46645 			object_ptr = Z_REFVAL_P(object_ptr);
46646 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46647 				goto try_assign_dim_array;
46648 			}
46649 		}
46650 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
46651 			zend_object *obj = Z_OBJ_P(object_ptr);
46652 
46653 			GC_ADDREF(obj);
46654 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46655 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
46656 				dim = ZVAL_UNDEFINED_OP2();
46657 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
46658 				dim++;
46659 			}
46660 
46661 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
46662 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
46663 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46664 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
46665 				ZVAL_DEREF(value);
46666 			}
46667 
46668 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
46669 
46670 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46671 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
46672 				zend_objects_store_del(obj);
46673 			}
46674 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
46675 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
46676 				zend_use_new_element_for_string();
46677 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46678 				UNDEF_RESULT();
46679 			} else {
46680 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46681 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
46682 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
46683 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46684 			}
46685 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
46686 			if (Z_ISREF_P(orig_object_ptr)
46687 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
46688 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
46689 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46690 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46691 				UNDEF_RESULT();
46692 			} else {
46693 				HashTable *ht = zend_new_array(8);
46694 				uint8_t old_type = Z_TYPE_P(object_ptr);
46695 
46696 				ZVAL_ARR(object_ptr, ht);
46697 				if (UNEXPECTED(old_type == IS_FALSE)) {
46698 					GC_ADDREF(ht);
46699 					zend_false_to_array_deprecated();
46700 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
46701 						zend_array_destroy(ht);
46702 						goto assign_dim_error;
46703 					}
46704 				}
46705 				goto try_assign_dim_array;
46706 			}
46707 		} else {
46708 			zend_use_scalar_as_array();
46709 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46710 assign_dim_error:
46711 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46712 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46713 				ZVAL_NULL(EX_VAR(opline->result.var));
46714 			}
46715 		}
46716 	}
46717 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
46718 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46719 	}
46720 
46721 	/* assign_dim has two opcodes! */
46722 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46723 }
46724 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46725 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46726 {
46727 	USE_OPLINE
46728 	zval *object_ptr, *orig_object_ptr;
46729 	zval *value;
46730 	zval *variable_ptr;
46731 	zval *dim;
46732 	zend_refcounted *garbage = NULL;
46733 
46734 	SAVE_OPLINE();
46735 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
46736 
46737 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46738 try_assign_dim_array:
46739 		SEPARATE_ARRAY(object_ptr);
46740 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
46741 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
46742 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
46743 				HashTable *ht = Z_ARRVAL_P(object_ptr);
46744 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
46745 					GC_ADDREF(ht);
46746 				}
46747 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46748 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
46749 					zend_array_destroy(ht);
46750 					goto assign_dim_error;
46751 				}
46752 			}
46753 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
46754 				ZVAL_DEREF(value);
46755 			}
46756 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
46757 			if (UNEXPECTED(value == NULL)) {
46758 				zend_cannot_add_element();
46759 				goto assign_dim_error;
46760 			} else if (IS_VAR == IS_CV) {
46761 				if (Z_REFCOUNTED_P(value)) {
46762 					Z_ADDREF_P(value);
46763 				}
46764 			} else if (IS_VAR == IS_VAR) {
46765 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
46766 				if (Z_ISREF_P(free_op_data)) {
46767 					if (Z_REFCOUNTED_P(value)) {
46768 						Z_ADDREF_P(value);
46769 					}
46770 					zval_ptr_dtor_nogc(free_op_data);
46771 				}
46772 			} else if (IS_VAR == IS_CONST) {
46773 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
46774 					Z_ADDREF_P(value);
46775 				}
46776 			}
46777 		} else {
46778 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46779 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46780 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46781 			} else {
46782 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46783 			}
46784 			if (UNEXPECTED(variable_ptr == NULL)) {
46785 				goto assign_dim_error;
46786 			}
46787 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
46788 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
46789 		}
46790 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46791 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46792 		}
46793 		if (garbage) {
46794 			GC_DTOR_NO_REF(garbage);
46795 		}
46796 	} else {
46797 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
46798 			object_ptr = Z_REFVAL_P(object_ptr);
46799 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46800 				goto try_assign_dim_array;
46801 			}
46802 		}
46803 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
46804 			zend_object *obj = Z_OBJ_P(object_ptr);
46805 
46806 			GC_ADDREF(obj);
46807 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46808 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
46809 				dim = ZVAL_UNDEFINED_OP2();
46810 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
46811 				dim++;
46812 			}
46813 
46814 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
46815 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
46816 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46817 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
46818 				ZVAL_DEREF(value);
46819 			}
46820 
46821 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
46822 
46823 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46824 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
46825 				zend_objects_store_del(obj);
46826 			}
46827 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
46828 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
46829 				zend_use_new_element_for_string();
46830 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46831 				UNDEF_RESULT();
46832 			} else {
46833 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46834 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
46835 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
46836 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46837 			}
46838 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
46839 			if (Z_ISREF_P(orig_object_ptr)
46840 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
46841 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
46842 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46843 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46844 				UNDEF_RESULT();
46845 			} else {
46846 				HashTable *ht = zend_new_array(8);
46847 				uint8_t old_type = Z_TYPE_P(object_ptr);
46848 
46849 				ZVAL_ARR(object_ptr, ht);
46850 				if (UNEXPECTED(old_type == IS_FALSE)) {
46851 					GC_ADDREF(ht);
46852 					zend_false_to_array_deprecated();
46853 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
46854 						zend_array_destroy(ht);
46855 						goto assign_dim_error;
46856 					}
46857 				}
46858 				goto try_assign_dim_array;
46859 			}
46860 		} else {
46861 			zend_use_scalar_as_array();
46862 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46863 assign_dim_error:
46864 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
46865 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46866 				ZVAL_NULL(EX_VAR(opline->result.var));
46867 			}
46868 		}
46869 	}
46870 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
46871 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
46872 	}
46873 
46874 	/* assign_dim has two opcodes! */
46875 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
46876 }
46877 
ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)46878 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
46879 {
46880 	USE_OPLINE
46881 	zval *object_ptr, *orig_object_ptr;
46882 	zval *value;
46883 	zval *variable_ptr;
46884 	zval *dim;
46885 	zend_refcounted *garbage = NULL;
46886 
46887 	SAVE_OPLINE();
46888 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
46889 
46890 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46891 try_assign_dim_array:
46892 		SEPARATE_ARRAY(object_ptr);
46893 		if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
46894 			value = EX_VAR((opline+1)->op1.var);
46895 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
46896 				HashTable *ht = Z_ARRVAL_P(object_ptr);
46897 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
46898 					GC_ADDREF(ht);
46899 				}
46900 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46901 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
46902 					zend_array_destroy(ht);
46903 					goto assign_dim_error;
46904 				}
46905 			}
46906 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
46907 				ZVAL_DEREF(value);
46908 			}
46909 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
46910 			if (UNEXPECTED(value == NULL)) {
46911 				zend_cannot_add_element();
46912 				goto assign_dim_error;
46913 			} else if (IS_CV == IS_CV) {
46914 				if (Z_REFCOUNTED_P(value)) {
46915 					Z_ADDREF_P(value);
46916 				}
46917 			} else if (IS_CV == IS_VAR) {
46918 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
46919 				if (Z_ISREF_P(free_op_data)) {
46920 					if (Z_REFCOUNTED_P(value)) {
46921 						Z_ADDREF_P(value);
46922 					}
46923 					zval_ptr_dtor_nogc(free_op_data);
46924 				}
46925 			} else if (IS_CV == IS_CONST) {
46926 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
46927 					Z_ADDREF_P(value);
46928 				}
46929 			}
46930 		} else {
46931 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46932 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
46933 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46934 			} else {
46935 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
46936 			}
46937 			if (UNEXPECTED(variable_ptr == NULL)) {
46938 				goto assign_dim_error;
46939 			}
46940 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
46941 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
46942 		}
46943 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
46944 			ZVAL_COPY(EX_VAR(opline->result.var), value);
46945 		}
46946 		if (garbage) {
46947 			GC_DTOR_NO_REF(garbage);
46948 		}
46949 	} else {
46950 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
46951 			object_ptr = Z_REFVAL_P(object_ptr);
46952 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
46953 				goto try_assign_dim_array;
46954 			}
46955 		}
46956 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
46957 			zend_object *obj = Z_OBJ_P(object_ptr);
46958 
46959 			GC_ADDREF(obj);
46960 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46961 			if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
46962 				dim = ZVAL_UNDEFINED_OP2();
46963 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
46964 				dim++;
46965 			}
46966 
46967 			value = EX_VAR((opline+1)->op1.var);
46968 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
46969 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
46970 			} else if (IS_CV & (IS_CV|IS_VAR)) {
46971 				ZVAL_DEREF(value);
46972 			}
46973 
46974 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
46975 
46976 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
46977 				zend_objects_store_del(obj);
46978 			}
46979 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
46980 			if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
46981 				zend_use_new_element_for_string();
46982 
46983 				UNDEF_RESULT();
46984 			} else {
46985 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46986 				value = EX_VAR((opline+1)->op1.var);
46987 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
46988 
46989 			}
46990 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
46991 			if (Z_ISREF_P(orig_object_ptr)
46992 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
46993 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
46994 				dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
46995 
46996 				UNDEF_RESULT();
46997 			} else {
46998 				HashTable *ht = zend_new_array(8);
46999 				uint8_t old_type = Z_TYPE_P(object_ptr);
47000 
47001 				ZVAL_ARR(object_ptr, ht);
47002 				if (UNEXPECTED(old_type == IS_FALSE)) {
47003 					GC_ADDREF(ht);
47004 					zend_false_to_array_deprecated();
47005 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
47006 						zend_array_destroy(ht);
47007 						goto assign_dim_error;
47008 					}
47009 				}
47010 				goto try_assign_dim_array;
47011 			}
47012 		} else {
47013 			zend_use_scalar_as_array();
47014 			dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47015 assign_dim_error:
47016 
47017 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
47018 				ZVAL_NULL(EX_VAR(opline->result.var));
47019 			}
47020 		}
47021 	}
47022 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
47023 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47024 	}
47025 
47026 	/* assign_dim has two opcodes! */
47027 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47028 }
47029 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47030 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47031 {
47032 	USE_OPLINE
47033 	zval *property, *container, *value_ptr;
47034 
47035 	SAVE_OPLINE();
47036 
47037 	container = EX_VAR(opline->op1.var);
47038 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47039 
47040 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
47041 
47042 	if (1) {
47043 		if (IS_CV == IS_UNUSED) {
47044 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47045 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47046 			} else {
47047 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47048 			}
47049 		} else {
47050 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47051 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47052 			} else {
47053 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47054 			}
47055 		}
47056 	} else {
47057 		zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
47058 	}
47059 
47060 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47061 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
47062 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47063 }
47064 
47065 /* 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)47066 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47067 {
47068 	USE_OPLINE
47069 	zval *property, *container, *value_ptr;
47070 
47071 	SAVE_OPLINE();
47072 
47073 	container = EX_VAR(opline->op1.var);
47074 	property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47075 
47076 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
47077 
47078 	if (1) {
47079 		if (IS_CV == IS_UNUSED) {
47080 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47081 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47082 			} else {
47083 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47084 			}
47085 		} else {
47086 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47087 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47088 			} else {
47089 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
47090 			}
47091 		}
47092 	} else {
47093 		zend_assign_to_property_reference(container, IS_CV, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
47094 	}
47095 
47096 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47097 
47098 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
47099 }
47100 
47101 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47102 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47103 {
47104 	USE_OPLINE
47105 	zval *op1, *op2;
47106 	zend_string *op1_str, *op2_str, *str;
47107 
47108 
47109 	op1 = EX_VAR(opline->op1.var);
47110 	op2 = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47111 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
47112 	    ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
47113 		zend_string *op1_str = Z_STR_P(op1);
47114 		zend_string *op2_str = Z_STR_P(op2);
47115 		zend_string *str;
47116 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
47117 
47118 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
47119 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) {
47120 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
47121 			} else {
47122 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
47123 			}
47124 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47125 				zend_string_release_ex(op1_str, 0);
47126 			}
47127 		} else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
47128 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
47129 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
47130 			} else {
47131 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
47132 			}
47133 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
47134 				zend_string_release_ex(op2_str, 0);
47135 			}
47136 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
47137 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
47138 			size_t len = ZSTR_LEN(op1_str);
47139 
47140 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
47141 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
47142 			GC_ADD_FLAGS(str, flags);
47143 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
47144 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
47145 				zend_string_release_ex(op2_str, 0);
47146 			}
47147 		} else {
47148 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
47149 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
47150 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
47151 			GC_ADD_FLAGS(str, flags);
47152 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
47153 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
47154 				zend_string_release_ex(op1_str, 0);
47155 			}
47156 			if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) {
47157 				zend_string_release_ex(op2_str, 0);
47158 			}
47159 		}
47160 		ZEND_VM_NEXT_OPCODE();
47161 	}
47162 
47163 	SAVE_OPLINE();
47164 	if (IS_CV == IS_CONST) {
47165 		op1_str = Z_STR_P(op1);
47166 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
47167 		op1_str = zend_string_copy(Z_STR_P(op1));
47168 	} else {
47169 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
47170 			ZVAL_UNDEFINED_OP1();
47171 		}
47172 		op1_str = zval_get_string_func(op1);
47173 	}
47174 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47175 		op2_str = Z_STR_P(op2);
47176 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
47177 		op2_str = zend_string_copy(Z_STR_P(op2));
47178 	} else {
47179 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
47180 			ZVAL_UNDEFINED_OP2();
47181 		}
47182 		op2_str = zval_get_string_func(op2);
47183 	}
47184 	do {
47185 		if (IS_CV != IS_CONST) {
47186 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
47187 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47188 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
47189 						GC_ADDREF(op2_str);
47190 					}
47191 				}
47192 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
47193 				zend_string_release_ex(op1_str, 0);
47194 				break;
47195 			}
47196 		}
47197 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47198 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
47199 				if (IS_CV == IS_CONST) {
47200 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
47201 						GC_ADDREF(op1_str);
47202 					}
47203 				}
47204 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
47205 				zend_string_release_ex(op2_str, 0);
47206 				break;
47207 			}
47208 		}
47209 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
47210 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
47211 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
47212 
47213 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
47214 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
47215 		if (IS_CV != IS_CONST) {
47216 			zend_string_release_ex(op1_str, 0);
47217 		}
47218 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47219 			zend_string_release_ex(op2_str, 0);
47220 		}
47221 	} while (0);
47222 
47223 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47224 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47225 }
47226 
ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47227 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47228 {
47229 	USE_OPLINE
47230 	zval *function_name;
47231 	zval *object;
47232 	zend_function *fbc;
47233 	zend_class_entry *called_scope;
47234 	zend_object *obj;
47235 	zend_execute_data *call;
47236 	uint32_t call_info;
47237 
47238 	SAVE_OPLINE();
47239 
47240 	object = EX_VAR(opline->op1.var);
47241 
47242 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47243 		function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47244 	}
47245 
47246 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST &&
47247 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
47248 		do {
47249 			if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
47250 				function_name = Z_REFVAL_P(function_name);
47251 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
47252 					break;
47253 				}
47254 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
47255 				ZVAL_UNDEFINED_OP2();
47256 				if (UNEXPECTED(EG(exception) != NULL)) {
47257 
47258 					HANDLE_EXCEPTION();
47259 				}
47260 			}
47261 			zend_throw_error(NULL, "Method name must be a string");
47262 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47263 
47264 			HANDLE_EXCEPTION();
47265 		} while (0);
47266 	}
47267 
47268 	if (IS_CV == IS_UNUSED) {
47269 		obj = Z_OBJ_P(object);
47270 	} else {
47271 		do {
47272 			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
47273 				obj = Z_OBJ_P(object);
47274 			} else {
47275 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
47276 					zend_reference *ref = Z_REF_P(object);
47277 
47278 					object = &ref->val;
47279 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
47280 						obj = Z_OBJ_P(object);
47281 						if (IS_CV & IS_VAR) {
47282 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
47283 								efree_size(ref, sizeof(zend_reference));
47284 							} else {
47285 								Z_ADDREF_P(object);
47286 							}
47287 						}
47288 						break;
47289 					}
47290 				}
47291 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
47292 					object = ZVAL_UNDEFINED_OP1();
47293 					if (UNEXPECTED(EG(exception) != NULL)) {
47294 						if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47295 							zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47296 						}
47297 						HANDLE_EXCEPTION();
47298 					}
47299 				}
47300 				if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47301 					function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47302 				}
47303 				zend_invalid_method_call(object, function_name);
47304 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47305 
47306 				HANDLE_EXCEPTION();
47307 			}
47308 		} while (0);
47309 	}
47310 
47311 	called_scope = obj->ce;
47312 
47313 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
47314 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
47315 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
47316 	} else {
47317 		zend_object *orig_obj = obj;
47318 
47319 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47320 			function_name = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47321 		}
47322 
47323 		/* First, locate the function. */
47324 		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));
47325 		if (UNEXPECTED(fbc == NULL)) {
47326 			if (EXPECTED(!EG(exception))) {
47327 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
47328 			}
47329 			zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47330 			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
47331 				zend_objects_store_del(orig_obj);
47332 			}
47333 			HANDLE_EXCEPTION();
47334 		}
47335 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
47336 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
47337 		    EXPECTED(obj == orig_obj)) {
47338 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
47339 		}
47340 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
47341 			GC_ADDREF(obj); /* For $this pointer */
47342 			if (GC_DELREF(orig_obj) == 0) {
47343 				zend_objects_store_del(orig_obj);
47344 			}
47345 		}
47346 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
47347 			init_func_run_time_cache(&fbc->op_array);
47348 		}
47349 	}
47350 
47351 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47352 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47353 	}
47354 
47355 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
47356 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
47357 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
47358 			zend_objects_store_del(obj);
47359 			if (UNEXPECTED(EG(exception))) {
47360 				HANDLE_EXCEPTION();
47361 			}
47362 		}
47363 		/* call static method */
47364 		obj = (zend_object*)called_scope;
47365 		call_info = ZEND_CALL_NESTED_FUNCTION;
47366 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
47367 		if (IS_CV == IS_CV) {
47368 			GC_ADDREF(obj); /* For $this pointer */
47369 		}
47370 		/* CV may be changed indirectly (e.g. when it's a reference) */
47371 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
47372 	}
47373 
47374 	call = zend_vm_stack_push_call_frame(call_info,
47375 		fbc, opline->extended_value, obj);
47376 	call->prev_execute_data = EX(call);
47377 	EX(call) = call;
47378 
47379 	ZEND_VM_NEXT_OPCODE();
47380 }
47381 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47382 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47383 {
47384 	USE_OPLINE
47385 	zval *expr_ptr, new_expr;
47386 
47387 	SAVE_OPLINE();
47388 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
47389 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
47390 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
47391 		if (Z_ISREF_P(expr_ptr)) {
47392 			Z_ADDREF_P(expr_ptr);
47393 		} else {
47394 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
47395 		}
47396 
47397 	} else {
47398 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
47399 		if (IS_CV == IS_TMP_VAR) {
47400 			/* pass */
47401 		} else if (IS_CV == IS_CONST) {
47402 			Z_TRY_ADDREF_P(expr_ptr);
47403 		} else if (IS_CV == IS_CV) {
47404 			ZVAL_DEREF(expr_ptr);
47405 			Z_TRY_ADDREF_P(expr_ptr);
47406 		} else /* if (IS_CV == IS_VAR) */ {
47407 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
47408 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
47409 
47410 				expr_ptr = Z_REFVAL_P(expr_ptr);
47411 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
47412 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
47413 					expr_ptr = &new_expr;
47414 					efree_size(ref, sizeof(zend_reference));
47415 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
47416 					Z_ADDREF_P(expr_ptr);
47417 				}
47418 			}
47419 		}
47420 	}
47421 
47422 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
47423 		zval *offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47424 		zend_string *str;
47425 		zend_ulong hval;
47426 
47427 add_again:
47428 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
47429 			str = Z_STR_P(offset);
47430 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47431 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
47432 					goto num_index;
47433 				}
47434 			}
47435 str_index:
47436 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
47437 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
47438 			hval = Z_LVAL_P(offset);
47439 num_index:
47440 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
47441 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
47442 			offset = Z_REFVAL_P(offset);
47443 			goto add_again;
47444 		} else if (Z_TYPE_P(offset) == IS_NULL) {
47445 			str = ZSTR_EMPTY_ALLOC();
47446 			goto str_index;
47447 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
47448 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
47449 			goto num_index;
47450 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
47451 			hval = 0;
47452 			goto num_index;
47453 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
47454 			hval = 1;
47455 			goto num_index;
47456 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
47457 			zend_use_resource_as_offset(offset);
47458 			hval = Z_RES_HANDLE_P(offset);
47459 			goto num_index;
47460 		} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
47461 			ZVAL_UNDEFINED_OP2();
47462 			str = ZSTR_EMPTY_ALLOC();
47463 			goto str_index;
47464 		} else {
47465 			zend_illegal_array_offset_access(offset);
47466 			zval_ptr_dtor_nogc(expr_ptr);
47467 		}
47468 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47469 	} else {
47470 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
47471 			zend_cannot_add_element();
47472 			zval_ptr_dtor_nogc(expr_ptr);
47473 		}
47474 	}
47475 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47476 }
47477 
ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47478 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47479 {
47480 	zval *array;
47481 	uint32_t size;
47482 	USE_OPLINE
47483 
47484 	array = EX_VAR(opline->result.var);
47485 	if (IS_CV != IS_UNUSED) {
47486 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
47487 		ZVAL_ARR(array, zend_new_array(size));
47488 		/* Explicitly initialize array as not-packed if flag is set */
47489 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
47490 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
47491 		}
47492 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47493 	} else {
47494 		ZVAL_ARR(array, zend_new_array(0));
47495 		ZEND_VM_NEXT_OPCODE();
47496 	}
47497 }
47498 
ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47499 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47500 {
47501 	USE_OPLINE
47502 	zval *container;
47503 	zval *offset;
47504 	zend_ulong hval;
47505 	zend_string *key;
47506 
47507 	SAVE_OPLINE();
47508 	container = EX_VAR(opline->op1.var);
47509 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47510 
47511 	do {
47512 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47513 			HashTable *ht;
47514 
47515 unset_dim_array:
47516 			SEPARATE_ARRAY(container);
47517 			ht = Z_ARRVAL_P(container);
47518 offset_again:
47519 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
47520 				key = Z_STR_P(offset);
47521 				if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47522 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
47523 						goto num_index_dim;
47524 					}
47525 				}
47526 str_index_dim:
47527 				ZEND_ASSERT(ht != &EG(symbol_table));
47528 				zend_hash_del(ht, key);
47529 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
47530 				hval = Z_LVAL_P(offset);
47531 num_index_dim:
47532 				zend_hash_index_del(ht, hval);
47533 			} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
47534 				offset = Z_REFVAL_P(offset);
47535 				goto offset_again;
47536 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
47537 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
47538 				goto num_index_dim;
47539 			} else if (Z_TYPE_P(offset) == IS_NULL) {
47540 				key = ZSTR_EMPTY_ALLOC();
47541 				goto str_index_dim;
47542 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
47543 				hval = 0;
47544 				goto num_index_dim;
47545 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
47546 				hval = 1;
47547 				goto num_index_dim;
47548 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
47549 				zend_use_resource_as_offset(offset);
47550 				hval = Z_RES_HANDLE_P(offset);
47551 				goto num_index_dim;
47552 			} else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
47553 				ZVAL_UNDEFINED_OP2();
47554 				key = ZSTR_EMPTY_ALLOC();
47555 				goto str_index_dim;
47556 			} else {
47557 				zend_illegal_array_offset_unset(offset);
47558 			}
47559 			break;
47560 		} else if (Z_ISREF_P(container)) {
47561 			container = Z_REFVAL_P(container);
47562 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47563 				goto unset_dim_array;
47564 			}
47565 		}
47566 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
47567 			container = ZVAL_UNDEFINED_OP1();
47568 		}
47569 		if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
47570 			offset = ZVAL_UNDEFINED_OP2();
47571 		}
47572 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
47573 			if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
47574 				offset++;
47575 			}
47576 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
47577 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
47578 			zend_throw_error(NULL, "Cannot unset string offsets");
47579 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
47580 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
47581 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
47582 			zend_false_to_array_deprecated();
47583 		}
47584 	} while (0);
47585 
47586 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47587 
47588 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47589 }
47590 
ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47591 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47592 {
47593 	USE_OPLINE
47594 	zval *container;
47595 	zval *offset;
47596 	zend_string *name, *tmp_name;
47597 
47598 	SAVE_OPLINE();
47599 	container = EX_VAR(opline->op1.var);
47600 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47601 
47602 	do {
47603 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
47604 			if (Z_ISREF_P(container)) {
47605 				container = Z_REFVAL_P(container);
47606 				if (Z_TYPE_P(container) != IS_OBJECT) {
47607 					if (IS_CV == IS_CV
47608 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
47609 						ZVAL_UNDEFINED_OP1();
47610 					}
47611 					break;
47612 				}
47613 			} else {
47614 				break;
47615 			}
47616 		}
47617 		if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47618 			name = Z_STR_P(offset);
47619 		} else {
47620 			name = zval_try_get_tmp_string(offset, &tmp_name);
47621 			if (UNEXPECTED(!name)) {
47622 				break;
47623 			}
47624 		}
47625 		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));
47626 		if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47627 			zend_tmp_string_release(tmp_name);
47628 		}
47629 	} while (0);
47630 
47631 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47632 
47633 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47634 }
47635 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47636 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47637 {
47638 	USE_OPLINE
47639 	zval *container;
47640 	bool result;
47641 	zend_ulong hval;
47642 	zval *offset;
47643 
47644 	SAVE_OPLINE();
47645 	container = EX_VAR(opline->op1.var);
47646 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47647 
47648 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47649 		HashTable *ht;
47650 		zval *value;
47651 		zend_string *str;
47652 
47653 isset_dim_obj_array:
47654 		ht = Z_ARRVAL_P(container);
47655 isset_again:
47656 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
47657 			str = Z_STR_P(offset);
47658 			if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47659 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
47660 					goto num_index_prop;
47661 				}
47662 			}
47663 			value = zend_hash_find_ex(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST);
47664 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
47665 			hval = Z_LVAL_P(offset);
47666 num_index_prop:
47667 			value = zend_hash_index_find(ht, hval);
47668 		} else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
47669 			offset = Z_REFVAL_P(offset);
47670 			goto isset_again;
47671 		} else {
47672 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
47673 			if (UNEXPECTED(EG(exception))) {
47674 				result = 0;
47675 				goto isset_dim_obj_exit;
47676 			}
47677 		}
47678 
47679 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
47680 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
47681 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
47682 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
47683 
47684 			if (IS_CV & (IS_CONST|IS_CV)) {
47685 				/* avoid exception check */
47686 				zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47687 				ZEND_VM_SMART_BRANCH(result, 0);
47688 			}
47689 		} else {
47690 			result = (value == NULL || !i_zend_is_true(value));
47691 		}
47692 		goto isset_dim_obj_exit;
47693 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
47694 		container = Z_REFVAL_P(container);
47695 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
47696 			goto isset_dim_obj_array;
47697 		}
47698 	}
47699 
47700 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
47701 		offset++;
47702 	}
47703 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
47704 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
47705 	} else {
47706 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
47707 	}
47708 
47709 isset_dim_obj_exit:
47710 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47711 
47712 	ZEND_VM_SMART_BRANCH(result, 1);
47713 }
47714 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47715 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47716 {
47717 	USE_OPLINE
47718 	zval *container;
47719 	int result;
47720 	zval *offset;
47721 	zend_string *name, *tmp_name;
47722 
47723 	SAVE_OPLINE();
47724 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
47725 	offset = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47726 
47727 	if (IS_CV == IS_CONST ||
47728 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
47729 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
47730 			container = Z_REFVAL_P(container);
47731 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
47732 				result = (opline->extended_value & ZEND_ISEMPTY);
47733 				goto isset_object_finish;
47734 			}
47735 		} else {
47736 			result = (opline->extended_value & ZEND_ISEMPTY);
47737 			goto isset_object_finish;
47738 		}
47739 	}
47740 
47741 	if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
47742 		name = Z_STR_P(offset);
47743 	} else {
47744 		name = zval_try_get_tmp_string(offset, &tmp_name);
47745 		if (UNEXPECTED(!name)) {
47746 			result = 0;
47747 			goto isset_object_finish;
47748 		}
47749 	}
47750 
47751 	result =
47752 		(opline->extended_value & ZEND_ISEMPTY) ^
47753 		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));
47754 
47755 	if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
47756 		zend_tmp_string_release(tmp_name);
47757 	}
47758 
47759 isset_object_finish:
47760 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47761 
47762 	ZEND_VM_SMART_BRANCH(result, 1);
47763 }
47764 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47765 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47766 {
47767 	USE_OPLINE
47768 
47769 	zval *key, *subject;
47770 	HashTable *ht;
47771 	bool result;
47772 
47773 	SAVE_OPLINE();
47774 
47775 	key = EX_VAR(opline->op1.var);
47776 	subject = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47777 
47778 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
47779 array_key_exists_array:
47780 		ht = Z_ARRVAL_P(subject);
47781 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
47782 	} else {
47783 		if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
47784 			subject = Z_REFVAL_P(subject);
47785 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
47786 				goto array_key_exists_array;
47787 			}
47788 		}
47789 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
47790 		result = 0;
47791 	}
47792 
47793 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47794 
47795 	ZEND_VM_SMART_BRANCH(result, 1);
47796 }
47797 
47798 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47799 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47800 {
47801 	USE_OPLINE
47802 
47803 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
47804 
47805 	SAVE_OPLINE();
47806 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
47807 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
47808 	}
47809 
47810 	/* Destroy the previously yielded value */
47811 	zval_ptr_dtor(&generator->value);
47812 
47813 	/* Destroy the previously yielded key */
47814 	zval_ptr_dtor(&generator->key);
47815 
47816 	/* Set the new yielded value */
47817 	if (IS_CV != IS_UNUSED) {
47818 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
47819 			/* Constants and temporary variables aren't yieldable by reference,
47820 			 * but we still allow them with a notice. */
47821 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
47822 				zval *value;
47823 
47824 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
47825 
47826 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
47827 				ZVAL_COPY_VALUE(&generator->value, value);
47828 				if (IS_CV == IS_CONST) {
47829 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
47830 						Z_ADDREF(generator->value);
47831 					}
47832 				}
47833 			} else {
47834 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
47835 
47836 				/* If a function call result is yielded and the function did
47837 				 * not return by reference we throw a notice. */
47838 				do {
47839 					if (IS_CV == IS_VAR) {
47840 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
47841 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
47842 						 && !Z_ISREF_P(value_ptr)) {
47843 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
47844 							ZVAL_COPY(&generator->value, value_ptr);
47845 							break;
47846 						}
47847 					}
47848 					if (Z_ISREF_P(value_ptr)) {
47849 						Z_ADDREF_P(value_ptr);
47850 					} else {
47851 						ZVAL_MAKE_REF_EX(value_ptr, 2);
47852 					}
47853 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
47854 				} while (0);
47855 
47856 			}
47857 		} else {
47858 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
47859 
47860 			/* Consts, temporary variables and references need copying */
47861 			if (IS_CV == IS_CONST) {
47862 				ZVAL_COPY_VALUE(&generator->value, value);
47863 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
47864 					Z_ADDREF(generator->value);
47865 				}
47866 			} else if (IS_CV == IS_TMP_VAR) {
47867 				ZVAL_COPY_VALUE(&generator->value, value);
47868 			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
47869 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
47870 
47871 			} else {
47872 				ZVAL_COPY_VALUE(&generator->value, value);
47873 				if (IS_CV == IS_CV) {
47874 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
47875 				}
47876 			}
47877 		}
47878 	} else {
47879 		/* If no value was specified yield null */
47880 		ZVAL_NULL(&generator->value);
47881 	}
47882 
47883 	/* Set the new yielded key */
47884 	if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) {
47885 		zval *key = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
47886 		if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
47887 			key = Z_REFVAL_P(key);
47888 		}
47889 		ZVAL_COPY(&generator->key, key);
47890 		zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47891 
47892 		if (Z_TYPE(generator->key) == IS_LONG
47893 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
47894 		) {
47895 			generator->largest_used_integer_key = Z_LVAL(generator->key);
47896 		}
47897 	} else {
47898 		/* If no key was specified we use auto-increment keys */
47899 		generator->largest_used_integer_key++;
47900 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
47901 	}
47902 
47903 	if (RETURN_VALUE_USED(opline)) {
47904 		/* If the return value of yield is used set the send
47905 		 * target and initialize it to NULL */
47906 		generator->send_target = EX_VAR(opline->result.var);
47907 		ZVAL_NULL(generator->send_target);
47908 	} else {
47909 		generator->send_target = NULL;
47910 	}
47911 
47912 	/* We increment to the next op, so we are at the correct position when the
47913 	 * generator is resumed. */
47914 	ZEND_VM_INC_OPCODE();
47915 
47916 	/* The GOTO VM uses a local opline variable. We need to set the opline
47917 	 * variable in execute_data so we don't resume at an old position. */
47918 	SAVE_OPLINE();
47919 
47920 	ZEND_VM_RETURN();
47921 }
47922 
ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47923 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47924 {
47925 	USE_OPLINE
47926 	zval *op1, *op2;
47927 	bool result;
47928 
47929 	SAVE_OPLINE();
47930 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
47931 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
47932 	result = fast_is_identical_function(op1, op2);
47933 
47934 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47935 	ZEND_VM_SMART_BRANCH(result, 1);
47936 }
47937 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47938 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47939 {
47940 	USE_OPLINE
47941 	zval *op1, *op2;
47942 	bool result;
47943 
47944 	SAVE_OPLINE();
47945 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
47946 	op2 = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
47947 	result = fast_is_not_identical_function(op1, op2);
47948 
47949 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
47950 	ZEND_VM_SMART_BRANCH(result, 1);
47951 }
47952 
ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47953 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47954 {
47955 	USE_OPLINE
47956 	zval *value;
47957 	zval *variable_ptr;
47958 
47959 	SAVE_OPLINE();
47960 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
47961 	variable_ptr = EX_VAR(opline->op1.var);
47962 
47963 	if (0 || UNEXPECTED(0)) {
47964 		zend_refcounted *garbage = NULL;
47965 
47966 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
47967 		if (UNEXPECTED(0)) {
47968 			ZVAL_COPY(EX_VAR(opline->result.var), value);
47969 		}
47970 		if (garbage) {
47971 			GC_DTOR_NO_REF(garbage);
47972 		}
47973 	} else {
47974 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
47975 	}
47976 
47977 	/* zend_assign_to_variable() always takes care of op2, never free it! */
47978 
47979 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
47980 }
47981 
ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)47982 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
47983 {
47984 	USE_OPLINE
47985 	zval *value;
47986 	zval *variable_ptr;
47987 
47988 	SAVE_OPLINE();
47989 	value = _get_zval_ptr_tmp(opline->op2.var EXECUTE_DATA_CC);
47990 	variable_ptr = EX_VAR(opline->op1.var);
47991 
47992 	if (0 || UNEXPECTED(1)) {
47993 		zend_refcounted *garbage = NULL;
47994 
47995 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
47996 		if (UNEXPECTED(1)) {
47997 			ZVAL_COPY(EX_VAR(opline->result.var), value);
47998 		}
47999 		if (garbage) {
48000 			GC_DTOR_NO_REF(garbage);
48001 		}
48002 	} else {
48003 		value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
48004 	}
48005 
48006 	/* zend_assign_to_variable() always takes care of op2, never free it! */
48007 
48008 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48009 }
48010 
ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48011 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48012 {
48013 	USE_OPLINE
48014 	zval *op1, *op2;
48015 	bool result;
48016 
48017 	SAVE_OPLINE();
48018 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48019 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
48020 	result = fast_is_identical_function(op1, op2);
48021 
48022 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
48023 	ZEND_VM_SMART_BRANCH(result, 1);
48024 }
48025 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48026 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48027 {
48028 	USE_OPLINE
48029 	zval *op1, *op2;
48030 	bool result;
48031 
48032 	SAVE_OPLINE();
48033 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
48034 	op2 = _get_zval_ptr_var_deref(opline->op2.var EXECUTE_DATA_CC);
48035 	result = fast_is_not_identical_function(op1, op2);
48036 
48037 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
48038 	ZEND_VM_SMART_BRANCH(result, 1);
48039 }
48040 
ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48041 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48042 {
48043 	USE_OPLINE
48044 	zval *value;
48045 	zval *variable_ptr;
48046 
48047 	SAVE_OPLINE();
48048 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
48049 	variable_ptr = EX_VAR(opline->op1.var);
48050 
48051 	if (0 || UNEXPECTED(0)) {
48052 		zend_refcounted *garbage = NULL;
48053 
48054 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
48055 		if (UNEXPECTED(0)) {
48056 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48057 		}
48058 		if (garbage) {
48059 			GC_DTOR_NO_REF(garbage);
48060 		}
48061 	} else {
48062 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
48063 	}
48064 
48065 	/* zend_assign_to_variable() always takes care of op2, never free it! */
48066 
48067 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48068 }
48069 
ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48070 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48071 {
48072 	USE_OPLINE
48073 	zval *value;
48074 	zval *variable_ptr;
48075 
48076 	SAVE_OPLINE();
48077 	value = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
48078 	variable_ptr = EX_VAR(opline->op1.var);
48079 
48080 	if (0 || UNEXPECTED(1)) {
48081 		zend_refcounted *garbage = NULL;
48082 
48083 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
48084 		if (UNEXPECTED(1)) {
48085 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48086 		}
48087 		if (garbage) {
48088 			GC_DTOR_NO_REF(garbage);
48089 		}
48090 	} else {
48091 		value = zend_assign_to_variable(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES());
48092 	}
48093 
48094 	/* zend_assign_to_variable() always takes care of op2, never free it! */
48095 
48096 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48097 }
48098 
ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48099 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48100 {
48101 	USE_OPLINE
48102 	zval *variable_ptr;
48103 	zval *value_ptr;
48104 	zend_refcounted *garbage = NULL;
48105 
48106 	SAVE_OPLINE();
48107 	value_ptr = _get_zval_ptr_ptr_var(opline->op2.var EXECUTE_DATA_CC);
48108 	variable_ptr = EX_VAR(opline->op1.var);
48109 
48110 	if (IS_CV == IS_VAR &&
48111 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
48112 
48113 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
48114 		variable_ptr = &EG(uninitialized_zval);
48115 	} else if (IS_VAR == IS_VAR &&
48116 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
48117 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
48118 
48119 		variable_ptr = zend_wrong_assign_to_variable_reference(
48120 			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
48121 	} else {
48122 		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
48123 	}
48124 
48125 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48126 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
48127 	}
48128 
48129 	if (garbage) {
48130 		GC_DTOR(garbage);
48131 	}
48132 
48133 	zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
48134 
48135 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48136 }
48137 
ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48138 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48139 {
48140 	USE_OPLINE
48141 	zval *expr;
48142 	bool result;
48143 
48144 	SAVE_OPLINE();
48145 	expr = EX_VAR(opline->op1.var);
48146 
48147 try_instanceof:
48148 	if (Z_TYPE_P(expr) == IS_OBJECT) {
48149 		zend_class_entry *ce;
48150 
48151 		if (IS_VAR == IS_CONST) {
48152 			ce = CACHED_PTR(opline->extended_value);
48153 			if (UNEXPECTED(ce == NULL)) {
48154 				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
48155 				if (EXPECTED(ce)) {
48156 					CACHE_PTR(opline->extended_value, ce);
48157 				}
48158 			}
48159 		} else if (IS_VAR == IS_UNUSED) {
48160 			ce = zend_fetch_class(NULL, opline->op2.num);
48161 			if (UNEXPECTED(ce == NULL)) {
48162 
48163 				ZVAL_UNDEF(EX_VAR(opline->result.var));
48164 				HANDLE_EXCEPTION();
48165 			}
48166 		} else {
48167 			ce = Z_CE_P(EX_VAR(opline->op2.var));
48168 		}
48169 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
48170 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
48171 		expr = Z_REFVAL_P(expr);
48172 		goto try_instanceof;
48173 	} else {
48174 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
48175 			ZVAL_UNDEFINED_OP1();
48176 		}
48177 		result = 0;
48178 	}
48179 
48180 	ZEND_VM_SMART_BRANCH(result, 1);
48181 }
48182 
ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48183 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48184 {
48185 	USE_OPLINE
48186 	zval *var_ptr;
48187 	zval *value, *container, *dim;
48188 	HashTable *ht;
48189 
48190 	SAVE_OPLINE();
48191 	container = EX_VAR(opline->op1.var);
48192 
48193 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
48194 assign_dim_op_array:
48195 		SEPARATE_ARRAY(container);
48196 		ht = Z_ARRVAL_P(container);
48197 assign_dim_op_new_array:
48198 		dim = NULL;
48199 		if (IS_UNUSED == IS_UNUSED) {
48200 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
48201 			if (UNEXPECTED(!var_ptr)) {
48202 				zend_cannot_add_element();
48203 				goto assign_dim_op_ret_null;
48204 			}
48205 		} else {
48206 			if (IS_UNUSED == IS_CONST) {
48207 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
48208 			} else {
48209 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
48210 			}
48211 			if (UNEXPECTED(!var_ptr)) {
48212 				goto assign_dim_op_ret_null;
48213 			}
48214 		}
48215 
48216 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
48217 
48218 		do {
48219 			if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
48220 				zend_reference *ref = Z_REF_P(var_ptr);
48221 				var_ptr = Z_REFVAL_P(var_ptr);
48222 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
48223 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
48224 					break;
48225 				}
48226 			}
48227 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
48228 		} while (0);
48229 
48230 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48231 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
48232 		}
48233 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
48234 	} else {
48235 		if (EXPECTED(Z_ISREF_P(container))) {
48236 			container = Z_REFVAL_P(container);
48237 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
48238 				goto assign_dim_op_array;
48239 			}
48240 		}
48241 
48242 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
48243 			zend_object *obj = Z_OBJ_P(container);
48244 
48245 			dim = NULL;
48246 			if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
48247 				dim++;
48248 			}
48249 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
48250 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
48251 			uint8_t old_type;
48252 
48253 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
48254 				ZVAL_UNDEFINED_OP1();
48255 			}
48256 			ht = zend_new_array(8);
48257 			old_type = Z_TYPE_P(container);
48258 			ZVAL_ARR(container, ht);
48259 			if (UNEXPECTED(old_type == IS_FALSE)) {
48260 				GC_ADDREF(ht);
48261 				zend_false_to_array_deprecated();
48262 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
48263 					zend_array_destroy(ht);
48264 					goto assign_dim_op_ret_null;
48265 				}
48266 			}
48267 			goto assign_dim_op_new_array;
48268 		} else {
48269 			dim = NULL;
48270 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
48271 assign_dim_op_ret_null:
48272 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
48273 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48274 				ZVAL_NULL(EX_VAR(opline->result.var));
48275 			}
48276 		}
48277 	}
48278 
48279 
48280 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48281 }
48282 
zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC)48283 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)
48284 {
48285 	USE_OPLINE
48286 	zval *varname;
48287 	zval *retval;
48288 	zend_string *name, *tmp_name;
48289 	HashTable *target_symbol_table;
48290 
48291 	SAVE_OPLINE();
48292 	varname = EX_VAR(opline->op1.var);
48293 
48294 	if (IS_CV == IS_CONST) {
48295 		name = Z_STR_P(varname);
48296 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
48297 		name = Z_STR_P(varname);
48298 		tmp_name = NULL;
48299 	} else {
48300 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
48301 			ZVAL_UNDEFINED_OP1();
48302 		}
48303 		name = zval_try_get_tmp_string(varname, &tmp_name);
48304 		if (UNEXPECTED(!name)) {
48305 			if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
48306 
48307 			}
48308 			ZVAL_UNDEF(EX_VAR(opline->result.var));
48309 			HANDLE_EXCEPTION();
48310 		}
48311 	}
48312 
48313 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
48314 	retval = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
48315 	if (retval == NULL) {
48316 		if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
48317 fetch_this:
48318 			zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC);
48319 			if (IS_CV != IS_CONST) {
48320 				zend_tmp_string_release(tmp_name);
48321 			}
48322 			ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48323 		}
48324 		if (type == BP_VAR_W) {
48325 			retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval));
48326 		} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
48327 			retval = &EG(uninitialized_zval);
48328 		} else {
48329 			if (IS_CV == IS_CV) {
48330 				/* Keep name alive in case an error handler tries to free it. */
48331 				zend_string_addref(name);
48332 			}
48333 			zend_error(E_WARNING, "Undefined %svariable $%s",
48334 				(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
48335 			if (type == BP_VAR_RW && !EG(exception)) {
48336 				retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval));
48337 			} else {
48338 				retval = &EG(uninitialized_zval);
48339 			}
48340 			if (IS_CV == IS_CV) {
48341 				zend_string_release(name);
48342 			}
48343 		}
48344 	/* GLOBAL or $$name variable may be an INDIRECT pointer to CV */
48345 	} else if (Z_TYPE_P(retval) == IS_INDIRECT) {
48346 		retval = Z_INDIRECT_P(retval);
48347 		if (Z_TYPE_P(retval) == IS_UNDEF) {
48348 			if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) {
48349 				goto fetch_this;
48350 			}
48351 			if (type == BP_VAR_W) {
48352 				ZVAL_NULL(retval);
48353 			} else if (type == BP_VAR_IS || type == BP_VAR_UNSET) {
48354 				retval = &EG(uninitialized_zval);
48355 			} else {
48356 				zend_error(E_WARNING, "Undefined %svariable $%s",
48357 					(opline->extended_value & ZEND_FETCH_GLOBAL ? "global " : ""), ZSTR_VAL(name));
48358 				if (type == BP_VAR_RW && !EG(exception)) {
48359 					ZVAL_NULL(retval);
48360 				} else {
48361 					retval = &EG(uninitialized_zval);
48362 				}
48363 			}
48364 		}
48365 	}
48366 
48367 	if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) {
48368 
48369 	}
48370 
48371 	if (IS_CV != IS_CONST) {
48372 		zend_tmp_string_release(tmp_name);
48373 	}
48374 
48375 	ZEND_ASSERT(retval != NULL);
48376 	if (type == BP_VAR_R || type == BP_VAR_IS) {
48377 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
48378 	} else {
48379 		ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
48380 	}
48381 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48382 }
48383 
ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48384 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48385 {
48386 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48387 }
48388 
ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48389 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48390 {
48391 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48392 }
48393 
ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48394 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48395 {
48396 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48397 }
48398 
ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48399 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48400 {
48401 	int fetch_type =
48402 		(UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ?
48403 			BP_VAR_W : BP_VAR_R;
48404 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48405 }
48406 
ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48407 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48408 {
48409 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48410 }
48411 
ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48412 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48413 {
48414 	ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
48415 }
48416 
48417 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48418 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48419 {
48420 	USE_OPLINE
48421 	zval *container;
48422 
48423 	SAVE_OPLINE();
48424 	container = EX_VAR(opline->op1.var);
48425 	zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
48426 
48427 	if (IS_CV == IS_VAR) {
48428 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
48429 	}
48430 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48431 }
48432 
ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48433 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48434 {
48435 	USE_OPLINE
48436 	zval *container;
48437 
48438 	SAVE_OPLINE();
48439 	container = EX_VAR(opline->op1.var);
48440 	zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC);
48441 
48442 	if (IS_CV == IS_VAR) {
48443 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
48444 	}
48445 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
48446 }
48447 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48448 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48449 {
48450 #if 0
48451 	USE_OPLINE
48452 #endif
48453 
48454 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
48455 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
48456 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48457 		}
48458 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48459 	} else {
48460 		if (IS_UNUSED == IS_UNUSED) {
48461 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48462 		}
48463 		ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
48464 	}
48465 }
48466 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48467 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48468 {
48469 	USE_OPLINE
48470 	zval *object_ptr, *orig_object_ptr;
48471 	zval *value;
48472 	zval *variable_ptr;
48473 	zval *dim;
48474 	zend_refcounted *garbage = NULL;
48475 
48476 	SAVE_OPLINE();
48477 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
48478 
48479 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48480 try_assign_dim_array:
48481 		SEPARATE_ARRAY(object_ptr);
48482 		if (IS_UNUSED == IS_UNUSED) {
48483 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
48484 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
48485 				HashTable *ht = Z_ARRVAL_P(object_ptr);
48486 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
48487 					GC_ADDREF(ht);
48488 				}
48489 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
48490 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
48491 					zend_array_destroy(ht);
48492 					goto assign_dim_error;
48493 				}
48494 			}
48495 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
48496 				ZVAL_DEREF(value);
48497 			}
48498 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
48499 			if (UNEXPECTED(value == NULL)) {
48500 				zend_cannot_add_element();
48501 				goto assign_dim_error;
48502 			} else if (IS_CONST == IS_CV) {
48503 				if (Z_REFCOUNTED_P(value)) {
48504 					Z_ADDREF_P(value);
48505 				}
48506 			} else if (IS_CONST == IS_VAR) {
48507 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
48508 				if (Z_ISREF_P(free_op_data)) {
48509 					if (Z_REFCOUNTED_P(value)) {
48510 						Z_ADDREF_P(value);
48511 					}
48512 					zval_ptr_dtor_nogc(free_op_data);
48513 				}
48514 			} else if (IS_CONST == IS_CONST) {
48515 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
48516 					Z_ADDREF_P(value);
48517 				}
48518 			}
48519 		} else {
48520 			dim = NULL;
48521 			if (IS_UNUSED == IS_CONST) {
48522 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48523 			} else {
48524 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48525 			}
48526 			if (UNEXPECTED(variable_ptr == NULL)) {
48527 				goto assign_dim_error;
48528 			}
48529 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
48530 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
48531 		}
48532 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48533 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48534 		}
48535 		if (garbage) {
48536 			GC_DTOR_NO_REF(garbage);
48537 		}
48538 	} else {
48539 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
48540 			object_ptr = Z_REFVAL_P(object_ptr);
48541 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48542 				goto try_assign_dim_array;
48543 			}
48544 		}
48545 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
48546 			zend_object *obj = Z_OBJ_P(object_ptr);
48547 
48548 			GC_ADDREF(obj);
48549 			dim = NULL;
48550 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
48551 				dim = ZVAL_UNDEFINED_OP2();
48552 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
48553 				dim++;
48554 			}
48555 
48556 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
48557 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
48558 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
48559 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
48560 				ZVAL_DEREF(value);
48561 			}
48562 
48563 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
48564 
48565 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
48566 				zend_objects_store_del(obj);
48567 			}
48568 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
48569 			if (IS_UNUSED == IS_UNUSED) {
48570 				zend_use_new_element_for_string();
48571 
48572 				UNDEF_RESULT();
48573 			} else {
48574 				dim = NULL;
48575 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
48576 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
48577 
48578 			}
48579 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
48580 			if (Z_ISREF_P(orig_object_ptr)
48581 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
48582 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
48583 				dim = NULL;
48584 
48585 				UNDEF_RESULT();
48586 			} else {
48587 				HashTable *ht = zend_new_array(8);
48588 				uint8_t old_type = Z_TYPE_P(object_ptr);
48589 
48590 				ZVAL_ARR(object_ptr, ht);
48591 				if (UNEXPECTED(old_type == IS_FALSE)) {
48592 					GC_ADDREF(ht);
48593 					zend_false_to_array_deprecated();
48594 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
48595 						zend_array_destroy(ht);
48596 						goto assign_dim_error;
48597 					}
48598 				}
48599 				goto try_assign_dim_array;
48600 			}
48601 		} else {
48602 			zend_use_scalar_as_array();
48603 			dim = NULL;
48604 assign_dim_error:
48605 
48606 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48607 				ZVAL_NULL(EX_VAR(opline->result.var));
48608 			}
48609 		}
48610 	}
48611 	if (IS_UNUSED != IS_UNUSED) {
48612 
48613 	}
48614 
48615 	/* assign_dim has two opcodes! */
48616 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48617 }
48618 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48619 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48620 {
48621 	USE_OPLINE
48622 	zval *object_ptr, *orig_object_ptr;
48623 	zval *value;
48624 	zval *variable_ptr;
48625 	zval *dim;
48626 	zend_refcounted *garbage = NULL;
48627 
48628 	SAVE_OPLINE();
48629 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
48630 
48631 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48632 try_assign_dim_array:
48633 		SEPARATE_ARRAY(object_ptr);
48634 		if (IS_UNUSED == IS_UNUSED) {
48635 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
48636 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
48637 				HashTable *ht = Z_ARRVAL_P(object_ptr);
48638 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
48639 					GC_ADDREF(ht);
48640 				}
48641 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
48642 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
48643 					zend_array_destroy(ht);
48644 					goto assign_dim_error;
48645 				}
48646 			}
48647 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
48648 				ZVAL_DEREF(value);
48649 			}
48650 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
48651 			if (UNEXPECTED(value == NULL)) {
48652 				zend_cannot_add_element();
48653 				goto assign_dim_error;
48654 			} else if (IS_TMP_VAR == IS_CV) {
48655 				if (Z_REFCOUNTED_P(value)) {
48656 					Z_ADDREF_P(value);
48657 				}
48658 			} else if (IS_TMP_VAR == IS_VAR) {
48659 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
48660 				if (Z_ISREF_P(free_op_data)) {
48661 					if (Z_REFCOUNTED_P(value)) {
48662 						Z_ADDREF_P(value);
48663 					}
48664 					zval_ptr_dtor_nogc(free_op_data);
48665 				}
48666 			} else if (IS_TMP_VAR == IS_CONST) {
48667 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
48668 					Z_ADDREF_P(value);
48669 				}
48670 			}
48671 		} else {
48672 			dim = NULL;
48673 			if (IS_UNUSED == IS_CONST) {
48674 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48675 			} else {
48676 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48677 			}
48678 			if (UNEXPECTED(variable_ptr == NULL)) {
48679 				goto assign_dim_error;
48680 			}
48681 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
48682 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
48683 		}
48684 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48685 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48686 		}
48687 		if (garbage) {
48688 			GC_DTOR_NO_REF(garbage);
48689 		}
48690 	} else {
48691 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
48692 			object_ptr = Z_REFVAL_P(object_ptr);
48693 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48694 				goto try_assign_dim_array;
48695 			}
48696 		}
48697 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
48698 			zend_object *obj = Z_OBJ_P(object_ptr);
48699 
48700 			GC_ADDREF(obj);
48701 			dim = NULL;
48702 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
48703 				dim = ZVAL_UNDEFINED_OP2();
48704 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
48705 				dim++;
48706 			}
48707 
48708 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
48709 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
48710 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
48711 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
48712 				ZVAL_DEREF(value);
48713 			}
48714 
48715 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
48716 
48717 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48718 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
48719 				zend_objects_store_del(obj);
48720 			}
48721 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
48722 			if (IS_UNUSED == IS_UNUSED) {
48723 				zend_use_new_element_for_string();
48724 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48725 				UNDEF_RESULT();
48726 			} else {
48727 				dim = NULL;
48728 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
48729 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
48730 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48731 			}
48732 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
48733 			if (Z_ISREF_P(orig_object_ptr)
48734 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
48735 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
48736 				dim = NULL;
48737 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48738 				UNDEF_RESULT();
48739 			} else {
48740 				HashTable *ht = zend_new_array(8);
48741 				uint8_t old_type = Z_TYPE_P(object_ptr);
48742 
48743 				ZVAL_ARR(object_ptr, ht);
48744 				if (UNEXPECTED(old_type == IS_FALSE)) {
48745 					GC_ADDREF(ht);
48746 					zend_false_to_array_deprecated();
48747 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
48748 						zend_array_destroy(ht);
48749 						goto assign_dim_error;
48750 					}
48751 				}
48752 				goto try_assign_dim_array;
48753 			}
48754 		} else {
48755 			zend_use_scalar_as_array();
48756 			dim = NULL;
48757 assign_dim_error:
48758 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48759 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48760 				ZVAL_NULL(EX_VAR(opline->result.var));
48761 			}
48762 		}
48763 	}
48764 	if (IS_UNUSED != IS_UNUSED) {
48765 
48766 	}
48767 
48768 	/* assign_dim has two opcodes! */
48769 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48770 }
48771 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48772 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48773 {
48774 	USE_OPLINE
48775 	zval *object_ptr, *orig_object_ptr;
48776 	zval *value;
48777 	zval *variable_ptr;
48778 	zval *dim;
48779 	zend_refcounted *garbage = NULL;
48780 
48781 	SAVE_OPLINE();
48782 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
48783 
48784 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48785 try_assign_dim_array:
48786 		SEPARATE_ARRAY(object_ptr);
48787 		if (IS_UNUSED == IS_UNUSED) {
48788 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
48789 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
48790 				HashTable *ht = Z_ARRVAL_P(object_ptr);
48791 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
48792 					GC_ADDREF(ht);
48793 				}
48794 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
48795 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
48796 					zend_array_destroy(ht);
48797 					goto assign_dim_error;
48798 				}
48799 			}
48800 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
48801 				ZVAL_DEREF(value);
48802 			}
48803 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
48804 			if (UNEXPECTED(value == NULL)) {
48805 				zend_cannot_add_element();
48806 				goto assign_dim_error;
48807 			} else if (IS_VAR == IS_CV) {
48808 				if (Z_REFCOUNTED_P(value)) {
48809 					Z_ADDREF_P(value);
48810 				}
48811 			} else if (IS_VAR == IS_VAR) {
48812 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
48813 				if (Z_ISREF_P(free_op_data)) {
48814 					if (Z_REFCOUNTED_P(value)) {
48815 						Z_ADDREF_P(value);
48816 					}
48817 					zval_ptr_dtor_nogc(free_op_data);
48818 				}
48819 			} else if (IS_VAR == IS_CONST) {
48820 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
48821 					Z_ADDREF_P(value);
48822 				}
48823 			}
48824 		} else {
48825 			dim = NULL;
48826 			if (IS_UNUSED == IS_CONST) {
48827 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48828 			} else {
48829 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48830 			}
48831 			if (UNEXPECTED(variable_ptr == NULL)) {
48832 				goto assign_dim_error;
48833 			}
48834 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
48835 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
48836 		}
48837 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48838 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48839 		}
48840 		if (garbage) {
48841 			GC_DTOR_NO_REF(garbage);
48842 		}
48843 	} else {
48844 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
48845 			object_ptr = Z_REFVAL_P(object_ptr);
48846 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48847 				goto try_assign_dim_array;
48848 			}
48849 		}
48850 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
48851 			zend_object *obj = Z_OBJ_P(object_ptr);
48852 
48853 			GC_ADDREF(obj);
48854 			dim = NULL;
48855 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
48856 				dim = ZVAL_UNDEFINED_OP2();
48857 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
48858 				dim++;
48859 			}
48860 
48861 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
48862 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
48863 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
48864 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
48865 				ZVAL_DEREF(value);
48866 			}
48867 
48868 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
48869 
48870 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48871 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
48872 				zend_objects_store_del(obj);
48873 			}
48874 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
48875 			if (IS_UNUSED == IS_UNUSED) {
48876 				zend_use_new_element_for_string();
48877 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48878 				UNDEF_RESULT();
48879 			} else {
48880 				dim = NULL;
48881 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
48882 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
48883 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48884 			}
48885 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
48886 			if (Z_ISREF_P(orig_object_ptr)
48887 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
48888 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
48889 				dim = NULL;
48890 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48891 				UNDEF_RESULT();
48892 			} else {
48893 				HashTable *ht = zend_new_array(8);
48894 				uint8_t old_type = Z_TYPE_P(object_ptr);
48895 
48896 				ZVAL_ARR(object_ptr, ht);
48897 				if (UNEXPECTED(old_type == IS_FALSE)) {
48898 					GC_ADDREF(ht);
48899 					zend_false_to_array_deprecated();
48900 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
48901 						zend_array_destroy(ht);
48902 						goto assign_dim_error;
48903 					}
48904 				}
48905 				goto try_assign_dim_array;
48906 			}
48907 		} else {
48908 			zend_use_scalar_as_array();
48909 			dim = NULL;
48910 assign_dim_error:
48911 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
48912 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48913 				ZVAL_NULL(EX_VAR(opline->result.var));
48914 			}
48915 		}
48916 	}
48917 	if (IS_UNUSED != IS_UNUSED) {
48918 
48919 	}
48920 
48921 	/* assign_dim has two opcodes! */
48922 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
48923 }
48924 
ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)48925 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
48926 {
48927 	USE_OPLINE
48928 	zval *object_ptr, *orig_object_ptr;
48929 	zval *value;
48930 	zval *variable_ptr;
48931 	zval *dim;
48932 	zend_refcounted *garbage = NULL;
48933 
48934 	SAVE_OPLINE();
48935 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
48936 
48937 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
48938 try_assign_dim_array:
48939 		SEPARATE_ARRAY(object_ptr);
48940 		if (IS_UNUSED == IS_UNUSED) {
48941 			value = EX_VAR((opline+1)->op1.var);
48942 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
48943 				HashTable *ht = Z_ARRVAL_P(object_ptr);
48944 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
48945 					GC_ADDREF(ht);
48946 				}
48947 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
48948 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
48949 					zend_array_destroy(ht);
48950 					goto assign_dim_error;
48951 				}
48952 			}
48953 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
48954 				ZVAL_DEREF(value);
48955 			}
48956 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
48957 			if (UNEXPECTED(value == NULL)) {
48958 				zend_cannot_add_element();
48959 				goto assign_dim_error;
48960 			} else if (IS_CV == IS_CV) {
48961 				if (Z_REFCOUNTED_P(value)) {
48962 					Z_ADDREF_P(value);
48963 				}
48964 			} else if (IS_CV == IS_VAR) {
48965 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
48966 				if (Z_ISREF_P(free_op_data)) {
48967 					if (Z_REFCOUNTED_P(value)) {
48968 						Z_ADDREF_P(value);
48969 					}
48970 					zval_ptr_dtor_nogc(free_op_data);
48971 				}
48972 			} else if (IS_CV == IS_CONST) {
48973 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
48974 					Z_ADDREF_P(value);
48975 				}
48976 			}
48977 		} else {
48978 			dim = NULL;
48979 			if (IS_UNUSED == IS_CONST) {
48980 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48981 			} else {
48982 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
48983 			}
48984 			if (UNEXPECTED(variable_ptr == NULL)) {
48985 				goto assign_dim_error;
48986 			}
48987 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
48988 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
48989 		}
48990 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
48991 			ZVAL_COPY(EX_VAR(opline->result.var), value);
48992 		}
48993 		if (garbage) {
48994 			GC_DTOR_NO_REF(garbage);
48995 		}
48996 	} else {
48997 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
48998 			object_ptr = Z_REFVAL_P(object_ptr);
48999 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
49000 				goto try_assign_dim_array;
49001 			}
49002 		}
49003 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
49004 			zend_object *obj = Z_OBJ_P(object_ptr);
49005 
49006 			GC_ADDREF(obj);
49007 			dim = NULL;
49008 			if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
49009 				dim = ZVAL_UNDEFINED_OP2();
49010 			} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
49011 				dim++;
49012 			}
49013 
49014 			value = EX_VAR((opline+1)->op1.var);
49015 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
49016 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
49017 			} else if (IS_CV & (IS_CV|IS_VAR)) {
49018 				ZVAL_DEREF(value);
49019 			}
49020 
49021 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
49022 
49023 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
49024 				zend_objects_store_del(obj);
49025 			}
49026 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
49027 			if (IS_UNUSED == IS_UNUSED) {
49028 				zend_use_new_element_for_string();
49029 
49030 				UNDEF_RESULT();
49031 			} else {
49032 				dim = NULL;
49033 				value = EX_VAR((opline+1)->op1.var);
49034 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
49035 
49036 			}
49037 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
49038 			if (Z_ISREF_P(orig_object_ptr)
49039 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
49040 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
49041 				dim = NULL;
49042 
49043 				UNDEF_RESULT();
49044 			} else {
49045 				HashTable *ht = zend_new_array(8);
49046 				uint8_t old_type = Z_TYPE_P(object_ptr);
49047 
49048 				ZVAL_ARR(object_ptr, ht);
49049 				if (UNEXPECTED(old_type == IS_FALSE)) {
49050 					GC_ADDREF(ht);
49051 					zend_false_to_array_deprecated();
49052 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
49053 						zend_array_destroy(ht);
49054 						goto assign_dim_error;
49055 					}
49056 				}
49057 				goto try_assign_dim_array;
49058 			}
49059 		} else {
49060 			zend_use_scalar_as_array();
49061 			dim = NULL;
49062 assign_dim_error:
49063 
49064 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
49065 				ZVAL_NULL(EX_VAR(opline->result.var));
49066 			}
49067 		}
49068 	}
49069 	if (IS_UNUSED != IS_UNUSED) {
49070 
49071 	}
49072 
49073 	/* assign_dim has two opcodes! */
49074 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
49075 }
49076 
ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49077 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49078 {
49079 	if (IS_CV == IS_UNUSED) {
49080 		SAVE_OPLINE();
49081 		zend_verify_missing_return_type(EX(func));
49082 		HANDLE_EXCEPTION();
49083 	} else {
49084 /* prevents "undefined variable opline" errors */
49085 #if 0 || (IS_CV != IS_UNUSED)
49086 		USE_OPLINE
49087 		zval *retval_ref, *retval_ptr;
49088 		zend_arg_info *ret_info = EX(func)->common.arg_info - 1;
49089 		retval_ref = retval_ptr = EX_VAR(opline->op1.var);
49090 
49091 		if (IS_CV == IS_CONST) {
49092 			ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr);
49093 			retval_ref = retval_ptr = EX_VAR(opline->result.var);
49094 		} else if (IS_CV == IS_VAR) {
49095 			if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) {
49096 				retval_ref = retval_ptr = Z_INDIRECT_P(retval_ptr);
49097 			}
49098 			ZVAL_DEREF(retval_ptr);
49099 		} else if (IS_CV == IS_CV) {
49100 			ZVAL_DEREF(retval_ptr);
49101 		}
49102 
49103 		if (EXPECTED(ZEND_TYPE_CONTAINS_CODE(ret_info->type, Z_TYPE_P(retval_ptr)))) {
49104 			ZEND_VM_NEXT_OPCODE();
49105 		}
49106 
49107 		if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(retval_ptr))) {
49108 			SAVE_OPLINE();
49109 			retval_ref = retval_ptr = ZVAL_UNDEFINED_OP1();
49110 			if (UNEXPECTED(EG(exception))) {
49111 				HANDLE_EXCEPTION();
49112 			}
49113 			if (ZEND_TYPE_FULL_MASK(ret_info->type) & MAY_BE_NULL) {
49114 				ZEND_VM_NEXT_OPCODE();
49115 			}
49116 		}
49117 
49118 		zend_reference *ref = NULL;
49119 		void *cache_slot = CACHE_ADDR(opline->op2.num);
49120 		if (UNEXPECTED(retval_ref != retval_ptr)) {
49121 			if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
49122 				ref = Z_REF_P(retval_ref);
49123 			} else {
49124 				/* A cast might happen - unwrap the reference if this is a by-value return */
49125 				if (Z_REFCOUNT_P(retval_ref) == 1) {
49126 					ZVAL_UNREF(retval_ref);
49127 				} else {
49128 					Z_DELREF_P(retval_ref);
49129 					ZVAL_COPY(retval_ref, retval_ptr);
49130 				}
49131 				retval_ptr = retval_ref;
49132 			}
49133 		}
49134 
49135 		SAVE_OPLINE();
49136 		if (UNEXPECTED(!zend_check_type_slow(&ret_info->type, retval_ptr, ref, cache_slot, 1, 0))) {
49137 			zend_verify_return_error(EX(func), retval_ptr);
49138 			HANDLE_EXCEPTION();
49139 		}
49140 		ZEND_VM_NEXT_OPCODE();
49141 #endif
49142 	}
49143 }
49144 
ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49145 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49146 {
49147 	USE_OPLINE
49148 	zval *varptr, *arg;
49149 
49150 	if (IS_UNUSED == IS_CONST) {
49151 		SAVE_OPLINE();
49152 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
49153 		uint32_t arg_num;
49154 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
49155 		if (UNEXPECTED(!arg)) {
49156 
49157 			HANDLE_EXCEPTION();
49158 		}
49159 	} else {
49160 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
49161 	}
49162 
49163 	varptr = EX_VAR(opline->op1.var);
49164 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
49165 		SAVE_OPLINE();
49166 		ZVAL_UNDEFINED_OP1();
49167 		ZVAL_NULL(arg);
49168 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49169 	}
49170 
49171 	if (IS_CV == IS_CV) {
49172 		ZVAL_COPY_DEREF(arg, varptr);
49173 	} else /* if (IS_CV == IS_VAR) */ {
49174 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
49175 			zend_refcounted *ref = Z_COUNTED_P(varptr);
49176 
49177 			varptr = Z_REFVAL_P(varptr);
49178 			ZVAL_COPY_VALUE(arg, varptr);
49179 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
49180 				efree_size(ref, sizeof(zend_reference));
49181 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
49182 				Z_ADDREF_P(arg);
49183 			}
49184 		} else {
49185 			ZVAL_COPY_VALUE(arg, varptr);
49186 		}
49187 	}
49188 
49189 	ZEND_VM_NEXT_OPCODE();
49190 }
49191 
ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49192 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49193 {
49194 	USE_OPLINE
49195 	zval *varptr, *arg;
49196 
49197 	SAVE_OPLINE();
49198 	if (IS_UNUSED == IS_CONST) {
49199 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
49200 		uint32_t arg_num;
49201 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
49202 		if (UNEXPECTED(!arg)) {
49203 
49204 			HANDLE_EXCEPTION();
49205 		}
49206 	} else {
49207 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
49208 	}
49209 
49210 	varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
49211 	if (Z_ISREF_P(varptr)) {
49212 		Z_ADDREF_P(varptr);
49213 	} else {
49214 		ZVAL_MAKE_REF_EX(varptr, 2);
49215 	}
49216 	ZVAL_REF(arg, Z_REF_P(varptr));
49217 
49218 	ZEND_VM_NEXT_OPCODE();
49219 }
49220 
ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49221 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49222 {
49223 	USE_OPLINE
49224 	zval *varptr, *arg;
49225 	uint32_t arg_num;
49226 
49227 	if (IS_UNUSED == IS_CONST) {
49228 		SAVE_OPLINE();
49229 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
49230 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
49231 		if (UNEXPECTED(!arg)) {
49232 
49233 			HANDLE_EXCEPTION();
49234 		}
49235 	} else {
49236 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
49237 		arg_num = opline->op2.num;
49238 	}
49239 
49240 	if (EXPECTED(0)) {
49241 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
49242 			goto send_var_by_ref;
49243 		}
49244 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
49245 send_var_by_ref:
49246 		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
49247 		if (Z_ISREF_P(varptr)) {
49248 			Z_ADDREF_P(varptr);
49249 		} else {
49250 			ZVAL_MAKE_REF_EX(varptr, 2);
49251 		}
49252 		ZVAL_REF(arg, Z_REF_P(varptr));
49253 
49254 		ZEND_VM_NEXT_OPCODE();
49255 	}
49256 
49257 	varptr = EX_VAR(opline->op1.var);
49258 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
49259 		SAVE_OPLINE();
49260 		ZVAL_UNDEFINED_OP1();
49261 		ZVAL_NULL(arg);
49262 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49263 	}
49264 
49265 	if (IS_CV == IS_CV) {
49266 		ZVAL_COPY_DEREF(arg, varptr);
49267 	} else /* if (IS_CV == IS_VAR) */ {
49268 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
49269 			zend_refcounted *ref = Z_COUNTED_P(varptr);
49270 
49271 			varptr = Z_REFVAL_P(varptr);
49272 			ZVAL_COPY_VALUE(arg, varptr);
49273 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
49274 				efree_size(ref, sizeof(zend_reference));
49275 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
49276 				Z_ADDREF_P(arg);
49277 			}
49278 		} else {
49279 			ZVAL_COPY_VALUE(arg, varptr);
49280 		}
49281 	}
49282 
49283 	ZEND_VM_NEXT_OPCODE();
49284 }
49285 
ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49286 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49287 {
49288 	USE_OPLINE
49289 	zval *varptr, *arg;
49290 	uint32_t arg_num;
49291 
49292 	if (IS_UNUSED == IS_CONST) {
49293 		SAVE_OPLINE();
49294 		zend_string *arg_name = Z_STR_P(RT_CONSTANT(opline, opline->op2));
49295 		arg = zend_handle_named_arg(&EX(call), arg_name, &arg_num, CACHE_ADDR(opline->result.num));
49296 		if (UNEXPECTED(!arg)) {
49297 
49298 			HANDLE_EXCEPTION();
49299 		}
49300 	} else {
49301 		arg = ZEND_CALL_VAR(EX(call), opline->result.var);
49302 		arg_num = opline->op2.num;
49303 	}
49304 
49305 	if (EXPECTED(1)) {
49306 		if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
49307 			goto send_var_by_ref;
49308 		}
49309 	} else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
49310 send_var_by_ref:
49311 		varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
49312 		if (Z_ISREF_P(varptr)) {
49313 			Z_ADDREF_P(varptr);
49314 		} else {
49315 			ZVAL_MAKE_REF_EX(varptr, 2);
49316 		}
49317 		ZVAL_REF(arg, Z_REF_P(varptr));
49318 
49319 		ZEND_VM_NEXT_OPCODE();
49320 	}
49321 
49322 	varptr = EX_VAR(opline->op1.var);
49323 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) {
49324 		SAVE_OPLINE();
49325 		ZVAL_UNDEFINED_OP1();
49326 		ZVAL_NULL(arg);
49327 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49328 	}
49329 
49330 	if (IS_CV == IS_CV) {
49331 		ZVAL_COPY_DEREF(arg, varptr);
49332 	} else /* if (IS_CV == IS_VAR) */ {
49333 		if (UNEXPECTED(Z_ISREF_P(varptr))) {
49334 			zend_refcounted *ref = Z_COUNTED_P(varptr);
49335 
49336 			varptr = Z_REFVAL_P(varptr);
49337 			ZVAL_COPY_VALUE(arg, varptr);
49338 			if (UNEXPECTED(GC_DELREF(ref) == 0)) {
49339 				efree_size(ref, sizeof(zend_reference));
49340 			} else if (Z_OPT_REFCOUNTED_P(arg)) {
49341 				Z_ADDREF_P(arg);
49342 			}
49343 		} else {
49344 			ZVAL_COPY_VALUE(arg, varptr);
49345 		}
49346 	}
49347 
49348 	ZEND_VM_NEXT_OPCODE();
49349 }
49350 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49351 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49352 {
49353 	USE_OPLINE
49354 	zval *expr_ptr, new_expr;
49355 
49356 	SAVE_OPLINE();
49357 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
49358 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
49359 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
49360 		if (Z_ISREF_P(expr_ptr)) {
49361 			Z_ADDREF_P(expr_ptr);
49362 		} else {
49363 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
49364 		}
49365 
49366 	} else {
49367 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
49368 		if (IS_CV == IS_TMP_VAR) {
49369 			/* pass */
49370 		} else if (IS_CV == IS_CONST) {
49371 			Z_TRY_ADDREF_P(expr_ptr);
49372 		} else if (IS_CV == IS_CV) {
49373 			ZVAL_DEREF(expr_ptr);
49374 			Z_TRY_ADDREF_P(expr_ptr);
49375 		} else /* if (IS_CV == IS_VAR) */ {
49376 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
49377 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
49378 
49379 				expr_ptr = Z_REFVAL_P(expr_ptr);
49380 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
49381 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
49382 					expr_ptr = &new_expr;
49383 					efree_size(ref, sizeof(zend_reference));
49384 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
49385 					Z_ADDREF_P(expr_ptr);
49386 				}
49387 			}
49388 		}
49389 	}
49390 
49391 	if (IS_UNUSED != IS_UNUSED) {
49392 		zval *offset = NULL;
49393 		zend_string *str;
49394 		zend_ulong hval;
49395 
49396 add_again:
49397 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
49398 			str = Z_STR_P(offset);
49399 			if (IS_UNUSED != IS_CONST) {
49400 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
49401 					goto num_index;
49402 				}
49403 			}
49404 str_index:
49405 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
49406 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
49407 			hval = Z_LVAL_P(offset);
49408 num_index:
49409 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
49410 		} else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
49411 			offset = Z_REFVAL_P(offset);
49412 			goto add_again;
49413 		} else if (Z_TYPE_P(offset) == IS_NULL) {
49414 			str = ZSTR_EMPTY_ALLOC();
49415 			goto str_index;
49416 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
49417 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
49418 			goto num_index;
49419 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
49420 			hval = 0;
49421 			goto num_index;
49422 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
49423 			hval = 1;
49424 			goto num_index;
49425 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
49426 			zend_use_resource_as_offset(offset);
49427 			hval = Z_RES_HANDLE_P(offset);
49428 			goto num_index;
49429 		} else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
49430 			ZVAL_UNDEFINED_OP2();
49431 			str = ZSTR_EMPTY_ALLOC();
49432 			goto str_index;
49433 		} else {
49434 			zend_illegal_array_offset_access(offset);
49435 			zval_ptr_dtor_nogc(expr_ptr);
49436 		}
49437 
49438 	} else {
49439 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
49440 			zend_cannot_add_element();
49441 			zval_ptr_dtor_nogc(expr_ptr);
49442 		}
49443 	}
49444 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49445 }
49446 
ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49447 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49448 {
49449 	zval *array;
49450 	uint32_t size;
49451 	USE_OPLINE
49452 
49453 	array = EX_VAR(opline->result.var);
49454 	if (IS_CV != IS_UNUSED) {
49455 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
49456 		ZVAL_ARR(array, zend_new_array(size));
49457 		/* Explicitly initialize array as not-packed if flag is set */
49458 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
49459 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
49460 		}
49461 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49462 	} else {
49463 		ZVAL_ARR(array, zend_new_array(0));
49464 		ZEND_VM_NEXT_OPCODE();
49465 	}
49466 }
49467 
ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49468 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49469 {
49470 	USE_OPLINE
49471 	zval *var = EX_VAR(opline->op1.var);
49472 
49473 	if (Z_REFCOUNTED_P(var)) {
49474 		zend_refcounted *garbage = Z_COUNTED_P(var);
49475 
49476 		ZVAL_UNDEF(var);
49477 		SAVE_OPLINE();
49478 		GC_DTOR(garbage);
49479 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49480 	} else {
49481 		ZVAL_UNDEF(var);
49482 	}
49483 	ZEND_VM_NEXT_OPCODE();
49484 }
49485 
ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49486 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49487 {
49488 	USE_OPLINE
49489 	zval *varname;
49490 	zend_string *name, *tmp_name;
49491 	HashTable *target_symbol_table;
49492 
49493 	SAVE_OPLINE();
49494 
49495 	varname = EX_VAR(opline->op1.var);
49496 
49497 	if (IS_CV == IS_CONST) {
49498 		name = Z_STR_P(varname);
49499 	} else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) {
49500 		name = Z_STR_P(varname);
49501 		tmp_name = NULL;
49502 	} else {
49503 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
49504 			varname = ZVAL_UNDEFINED_OP1();
49505 		}
49506 		name = zval_try_get_tmp_string(varname, &tmp_name);
49507 		if (UNEXPECTED(!name)) {
49508 
49509 			HANDLE_EXCEPTION();
49510 		}
49511 	}
49512 
49513 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
49514 	zend_hash_del_ind(target_symbol_table, name);
49515 
49516 	if (IS_CV != IS_CONST) {
49517 		zend_tmp_string_release(tmp_name);
49518 	}
49519 
49520 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49521 }
49522 
49523 /* 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)49524 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49525 {
49526 	USE_OPLINE
49527 	zval *value;
49528 
49529 	value = EX_VAR(opline->op1.var);
49530 	if (!(0)) {
49531 		if (Z_TYPE_P(value) > IS_NULL &&
49532 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
49533 			ZEND_VM_SMART_BRANCH_TRUE();
49534 		} else {
49535 			ZEND_VM_SMART_BRANCH_FALSE();
49536 		}
49537 	} else {
49538 		bool result;
49539 
49540 		SAVE_OPLINE();
49541 		result = !i_zend_is_true(value);
49542 		ZEND_VM_SMART_BRANCH(result, 1);
49543 	}
49544 }
49545 
ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49546 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49547 {
49548 	USE_OPLINE
49549 	zval *value;
49550 
49551 	value = EX_VAR(opline->op1.var);
49552 	if (!(1)) {
49553 		if (Z_TYPE_P(value) > IS_NULL &&
49554 		    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL)) {
49555 			ZEND_VM_SMART_BRANCH_TRUE();
49556 		} else {
49557 			ZEND_VM_SMART_BRANCH_FALSE();
49558 		}
49559 	} else {
49560 		bool result;
49561 
49562 		SAVE_OPLINE();
49563 		result = !i_zend_is_true(value);
49564 		ZEND_VM_SMART_BRANCH(result, 1);
49565 	}
49566 }
49567 
ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49568 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49569 {
49570 	USE_OPLINE
49571 	zval *value;
49572 	/* Should be bool result? as below got: result = (opline->extended_value & ZEND_ISEMPTY) */
49573 	int result;
49574 	zval *varname;
49575 	zend_string *name, *tmp_name;
49576 	HashTable *target_symbol_table;
49577 
49578 	SAVE_OPLINE();
49579 	varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
49580 	if (IS_CV == IS_CONST) {
49581 		name = Z_STR_P(varname);
49582 	} else {
49583 		name = zval_get_tmp_string(varname, &tmp_name);
49584 	}
49585 
49586 	target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC);
49587 	value = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST);
49588 
49589 	if (IS_CV != IS_CONST) {
49590 		zend_tmp_string_release(tmp_name);
49591 	}
49592 
49593 	if (!value) {
49594 		result = (opline->extended_value & ZEND_ISEMPTY);
49595 	} else {
49596 		if (Z_TYPE_P(value) == IS_INDIRECT) {
49597 			value = Z_INDIRECT_P(value);
49598 		}
49599 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
49600 			if (Z_ISREF_P(value)) {
49601 				value = Z_REFVAL_P(value);
49602 			}
49603 			result = Z_TYPE_P(value) > IS_NULL;
49604 		} else {
49605 			result = !i_zend_is_true(value);
49606 		}
49607 	}
49608 
49609 	ZEND_VM_SMART_BRANCH(result, 1);
49610 }
49611 
49612 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR) */
ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49613 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49614 {
49615 	USE_OPLINE
49616 	zval *expr;
49617 	bool result;
49618 
49619 	SAVE_OPLINE();
49620 	expr = EX_VAR(opline->op1.var);
49621 
49622 try_instanceof:
49623 	if (Z_TYPE_P(expr) == IS_OBJECT) {
49624 		zend_class_entry *ce;
49625 
49626 		if (IS_UNUSED == IS_CONST) {
49627 			ce = CACHED_PTR(opline->extended_value);
49628 			if (UNEXPECTED(ce == NULL)) {
49629 				ce = zend_lookup_class_ex(Z_STR_P(RT_CONSTANT(opline, opline->op2)), Z_STR_P(RT_CONSTANT(opline, opline->op2) + 1), ZEND_FETCH_CLASS_NO_AUTOLOAD);
49630 				if (EXPECTED(ce)) {
49631 					CACHE_PTR(opline->extended_value, ce);
49632 				}
49633 			}
49634 		} else if (IS_UNUSED == IS_UNUSED) {
49635 			ce = zend_fetch_class(NULL, opline->op2.num);
49636 			if (UNEXPECTED(ce == NULL)) {
49637 
49638 				ZVAL_UNDEF(EX_VAR(opline->result.var));
49639 				HANDLE_EXCEPTION();
49640 			}
49641 		} else {
49642 			ce = Z_CE_P(EX_VAR(opline->op2.var));
49643 		}
49644 		result = ce && instanceof_function(Z_OBJCE_P(expr), ce);
49645 	} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) {
49646 		expr = Z_REFVAL_P(expr);
49647 		goto try_instanceof;
49648 	} else {
49649 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
49650 			ZVAL_UNDEFINED_OP1();
49651 		}
49652 		result = 0;
49653 	}
49654 
49655 	ZEND_VM_SMART_BRANCH(result, 1);
49656 }
49657 
ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49658 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49659 {
49660 	USE_OPLINE
49661 
49662 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
49663 
49664 	SAVE_OPLINE();
49665 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
49666 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49667 	}
49668 
49669 	/* Destroy the previously yielded value */
49670 	zval_ptr_dtor(&generator->value);
49671 
49672 	/* Destroy the previously yielded key */
49673 	zval_ptr_dtor(&generator->key);
49674 
49675 	/* Set the new yielded value */
49676 	if (IS_CV != IS_UNUSED) {
49677 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
49678 			/* Constants and temporary variables aren't yieldable by reference,
49679 			 * but we still allow them with a notice. */
49680 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
49681 				zval *value;
49682 
49683 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
49684 
49685 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
49686 				ZVAL_COPY_VALUE(&generator->value, value);
49687 				if (IS_CV == IS_CONST) {
49688 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
49689 						Z_ADDREF(generator->value);
49690 					}
49691 				}
49692 			} else {
49693 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
49694 
49695 				/* If a function call result is yielded and the function did
49696 				 * not return by reference we throw a notice. */
49697 				do {
49698 					if (IS_CV == IS_VAR) {
49699 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
49700 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
49701 						 && !Z_ISREF_P(value_ptr)) {
49702 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
49703 							ZVAL_COPY(&generator->value, value_ptr);
49704 							break;
49705 						}
49706 					}
49707 					if (Z_ISREF_P(value_ptr)) {
49708 						Z_ADDREF_P(value_ptr);
49709 					} else {
49710 						ZVAL_MAKE_REF_EX(value_ptr, 2);
49711 					}
49712 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
49713 				} while (0);
49714 
49715 			}
49716 		} else {
49717 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
49718 
49719 			/* Consts, temporary variables and references need copying */
49720 			if (IS_CV == IS_CONST) {
49721 				ZVAL_COPY_VALUE(&generator->value, value);
49722 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
49723 					Z_ADDREF(generator->value);
49724 				}
49725 			} else if (IS_CV == IS_TMP_VAR) {
49726 				ZVAL_COPY_VALUE(&generator->value, value);
49727 			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
49728 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
49729 
49730 			} else {
49731 				ZVAL_COPY_VALUE(&generator->value, value);
49732 				if (IS_CV == IS_CV) {
49733 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
49734 				}
49735 			}
49736 		}
49737 	} else {
49738 		/* If no value was specified yield null */
49739 		ZVAL_NULL(&generator->value);
49740 	}
49741 
49742 	/* Set the new yielded key */
49743 	if (IS_UNUSED != IS_UNUSED) {
49744 		zval *key = NULL;
49745 		if ((IS_UNUSED & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
49746 			key = Z_REFVAL_P(key);
49747 		}
49748 		ZVAL_COPY(&generator->key, key);
49749 
49750 		if (Z_TYPE(generator->key) == IS_LONG
49751 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
49752 		) {
49753 			generator->largest_used_integer_key = Z_LVAL(generator->key);
49754 		}
49755 	} else {
49756 		/* If no key was specified we use auto-increment keys */
49757 		generator->largest_used_integer_key++;
49758 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
49759 	}
49760 
49761 	if (RETURN_VALUE_USED(opline)) {
49762 		/* If the return value of yield is used set the send
49763 		 * target and initialize it to NULL */
49764 		generator->send_target = EX_VAR(opline->result.var);
49765 		ZVAL_NULL(generator->send_target);
49766 	} else {
49767 		generator->send_target = NULL;
49768 	}
49769 
49770 	/* We increment to the next op, so we are at the correct position when the
49771 	 * generator is resumed. */
49772 	ZEND_VM_INC_OPCODE();
49773 
49774 	/* The GOTO VM uses a local opline variable. We need to set the opline
49775 	 * variable in execute_data so we don't resume at an old position. */
49776 	SAVE_OPLINE();
49777 
49778 	ZEND_VM_RETURN();
49779 }
49780 
ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49781 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49782 {
49783 	USE_OPLINE
49784 	zval *op1 = EX_VAR(opline->op1.var);
49785 
49786 	if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
49787 		SAVE_OPLINE();
49788 		ZVAL_UNDEFINED_OP1();
49789 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49790 	}
49791 	ZEND_VM_NEXT_OPCODE();
49792 }
49793 
ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49794 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49795 {
49796 	USE_OPLINE
49797 	zval *op1 = EX_VAR(opline->op1.var);
49798 
49799 	if (IS_CV == IS_CV) {
49800 		if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
49801 			ZVAL_NEW_EMPTY_REF(op1);
49802 			Z_SET_REFCOUNT_P(op1, 2);
49803 			ZVAL_NULL(Z_REFVAL_P(op1));
49804 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
49805 		} else {
49806 			if (Z_ISREF_P(op1)) {
49807 				Z_ADDREF_P(op1);
49808 			} else {
49809 				ZVAL_MAKE_REF_EX(op1, 2);
49810 			}
49811 			ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
49812 		}
49813 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) {
49814 		op1 = Z_INDIRECT_P(op1);
49815 		if (EXPECTED(!Z_ISREF_P(op1))) {
49816 			ZVAL_MAKE_REF_EX(op1, 2);
49817 		} else {
49818 			GC_ADDREF(Z_REF_P(op1));
49819 		}
49820 		ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1));
49821 	} else {
49822 		ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1);
49823 	}
49824 	ZEND_VM_NEXT_OPCODE();
49825 }
49826 
ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49827 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49828 {
49829 	USE_OPLINE
49830 	zval *op1;
49831 	zend_long count;
49832 
49833 	SAVE_OPLINE();
49834 	op1 = EX_VAR(opline->op1.var);
49835 
49836 	while (1) {
49837 		if (Z_TYPE_P(op1) == IS_ARRAY) {
49838 			count = zend_hash_num_elements(Z_ARRVAL_P(op1));
49839 			break;
49840 		} else if (Z_TYPE_P(op1) == IS_OBJECT) {
49841 			zend_object *zobj = Z_OBJ_P(op1);
49842 
49843 			/* first, we check if the handler is defined */
49844 			if (zobj->handlers->count_elements) {
49845 				if (SUCCESS == zobj->handlers->count_elements(zobj, &count)) {
49846 					break;
49847 				}
49848 				if (UNEXPECTED(EG(exception))) {
49849 					count = 0;
49850 					break;
49851 				}
49852 			}
49853 
49854 			/* if not and the object implements Countable we call its count() method */
49855 			if (zend_class_implements_interface(zobj->ce, zend_ce_countable)) {
49856 				zval retval;
49857 
49858 				zend_function *count_fn = zend_hash_find_ptr(&zobj->ce->function_table, ZSTR_KNOWN(ZEND_STR_COUNT));
49859 				zend_call_known_instance_method_with_0_params(count_fn, zobj, &retval);
49860 				count = zval_get_long(&retval);
49861 				zval_ptr_dtor(&retval);
49862 				break;
49863 			}
49864 
49865 			/* If There's no handler and it doesn't implement Countable then emit a TypeError */
49866 		} else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
49867 			op1 = Z_REFVAL_P(op1);
49868 			continue;
49869 		} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
49870 			ZVAL_UNDEFINED_OP1();
49871 		}
49872 		count = 0;
49873 		zend_type_error("%s(): Argument #1 ($value) must be of type Countable|array, %s given", opline->extended_value ? "sizeof" : "count", zend_zval_value_name(op1));
49874 		break;
49875 	}
49876 
49877 	ZVAL_LONG(EX_VAR(opline->result.var), count);
49878 
49879 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49880 }
49881 
ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49882 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49883 {
49884 	USE_OPLINE
49885 	zend_array *ht = Z_ARRVAL_P(EX_VAR(opline->op1.var));
49886 	ZVAL_LONG(EX_VAR(opline->result.var), zend_hash_num_elements(ht));
49887 	if (IS_CV & (IS_TMP_VAR|IS_VAR) && !(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
49888 		SAVE_OPLINE();
49889 		zend_array_destroy(ht);
49890 		if (EG(exception)) {
49891 			HANDLE_EXCEPTION();
49892 		}
49893 	}
49894 	ZEND_VM_NEXT_OPCODE();
49895 }
49896 
ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49897 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49898 {
49899 	USE_OPLINE
49900 
49901 	if (IS_CV == IS_UNUSED) {
49902 		SAVE_OPLINE();
49903 		if (UNEXPECTED(!EX(func)->common.scope)) {
49904 			zend_throw_error(NULL, "get_class() without arguments must be called from within a class");
49905 			ZVAL_UNDEF(EX_VAR(opline->result.var));
49906 			HANDLE_EXCEPTION();
49907 		} else {
49908 			zend_error(E_DEPRECATED, "Calling get_class() without arguments is deprecated");
49909 			ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name);
49910 			if (UNEXPECTED(EG(exception))) {
49911 				HANDLE_EXCEPTION();
49912 			}
49913 			ZEND_VM_NEXT_OPCODE();
49914 		}
49915 	} else {
49916 		zval *op1;
49917 
49918 		SAVE_OPLINE();
49919 		op1 = EX_VAR(opline->op1.var);
49920 		while (1) {
49921 			if (Z_TYPE_P(op1) == IS_OBJECT) {
49922 				ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name);
49923 			} else if ((IS_CV & (IS_VAR|IS_CV)) != 0 && Z_TYPE_P(op1) == IS_REFERENCE) {
49924 				op1 = Z_REFVAL_P(op1);
49925 				continue;
49926 			} else {
49927 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
49928 					ZVAL_UNDEFINED_OP1();
49929 				}
49930 				zend_type_error("get_class(): Argument #1 ($object) must be of type object, %s given", zend_zval_value_name(op1));
49931 				ZVAL_UNDEF(EX_VAR(opline->result.var));
49932 			}
49933 			break;
49934 		}
49935 
49936 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49937 	}
49938 }
49939 
ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49940 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49941 {
49942 	USE_OPLINE
49943 	zval *op1;
49944 	zend_string *type;
49945 
49946 	SAVE_OPLINE();
49947 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
49948 	type = zend_zval_get_legacy_type(op1);
49949 	if (EXPECTED(type)) {
49950 		ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type);
49951 	} else {
49952 		ZVAL_STRING(EX_VAR(opline->result.var), "unknown type");
49953 	}
49954 
49955 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49956 }
49957 
ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49958 static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49959 {
49960 	USE_OPLINE
49961 	zval *varptr, *arg;
49962 	uint32_t arg_num = opline->op2.num;
49963 
49964 	if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
49965 		ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
49966 	}
49967 
49968 	varptr = EX_VAR(opline->op1.var);
49969 	arg = ZEND_CALL_VAR(EX(call), opline->result.var);
49970 
49971 	if (IS_CV == IS_CV) {
49972 		ZVAL_COPY(arg, varptr);
49973 	} else /* if (IS_CV == IS_VAR) */ {
49974 		ZVAL_COPY_VALUE(arg, varptr);
49975 	}
49976 
49977 	ZEND_VM_NEXT_OPCODE();
49978 }
49979 
ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49980 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49981 {
49982 	USE_OPLINE
49983 	zval *op1, *op2;
49984 
49985 	SAVE_OPLINE();
49986 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
49987 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
49988 	div_function(EX_VAR(opline->result.var), op1, op2);
49989 
49990 
49991 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
49992 }
49993 
ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)49994 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
49995 {
49996 	USE_OPLINE
49997 	zval *op1, *op2;
49998 
49999 	SAVE_OPLINE();
50000 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
50001 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50002 	pow_function(EX_VAR(opline->result.var), op1, op2);
50003 
50004 
50005 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50006 }
50007 
ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50008 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50009 {
50010 	USE_OPLINE
50011 	zval *op1, *op2;
50012 
50013 	op1 = EX_VAR(opline->op1.var);
50014 	op2 = EX_VAR(opline->op2.var);
50015 
50016 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
50017 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
50018 		zend_string *op1_str = Z_STR_P(op1);
50019 		zend_string *op2_str = Z_STR_P(op2);
50020 		zend_string *str;
50021 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
50022 
50023 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
50024 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
50025 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
50026 			} else {
50027 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
50028 			}
50029 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50030 				zend_string_release_ex(op1_str, 0);
50031 			}
50032 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
50033 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
50034 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
50035 			} else {
50036 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
50037 			}
50038 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50039 				zend_string_release_ex(op2_str, 0);
50040 			}
50041 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
50042 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
50043 			size_t len = ZSTR_LEN(op1_str);
50044 
50045 			if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) {
50046 				zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation");
50047 			}
50048 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
50049 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
50050 			GC_ADD_FLAGS(str, flags);
50051 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
50052 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50053 				zend_string_release_ex(op2_str, 0);
50054 			}
50055 		} else {
50056 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
50057 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
50058 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
50059 			GC_ADD_FLAGS(str, flags);
50060 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
50061 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50062 				zend_string_release_ex(op1_str, 0);
50063 			}
50064 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50065 				zend_string_release_ex(op2_str, 0);
50066 			}
50067 		}
50068 		ZEND_VM_NEXT_OPCODE();
50069 	} else {
50070 		SAVE_OPLINE();
50071 
50072 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
50073 			op1 = ZVAL_UNDEFINED_OP1();
50074 		}
50075 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
50076 			op2 = ZVAL_UNDEFINED_OP2();
50077 		}
50078 		concat_function(EX_VAR(opline->result.var), op1, op2);
50079 
50080 
50081 		ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50082 	}
50083 }
50084 
ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50085 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50086 {
50087 	USE_OPLINE
50088 	zval *op1, *op2;
50089 	bool result;
50090 
50091 	SAVE_OPLINE();
50092 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
50093 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50094 	result = fast_is_identical_function(op1, op2);
50095 
50096 
50097 	ZEND_VM_SMART_BRANCH(result, 1);
50098 }
50099 
ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50100 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50101 {
50102 	USE_OPLINE
50103 	zval *op1, *op2;
50104 	bool result;
50105 
50106 	SAVE_OPLINE();
50107 	op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
50108 	op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50109 	result = fast_is_not_identical_function(op1, op2);
50110 
50111 
50112 	ZEND_VM_SMART_BRANCH(result, 1);
50113 }
50114 
ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50115 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50116 {
50117 	USE_OPLINE
50118 	zval *op1, *op2;
50119 	double d1, d2;
50120 
50121 	op1 = EX_VAR(opline->op1.var);
50122 	op2 = EX_VAR(opline->op2.var);
50123 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
50124 		/* pass */
50125 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
50126 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50127 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
50128 is_equal_true:
50129 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
50130 			} else {
50131 is_equal_false:
50132 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
50133 			}
50134 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50135 			d1 = (double)Z_LVAL_P(op1);
50136 			d2 = Z_DVAL_P(op2);
50137 			goto is_equal_double;
50138 		}
50139 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
50140 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50141 			d1 = Z_DVAL_P(op1);
50142 			d2 = Z_DVAL_P(op2);
50143 is_equal_double:
50144 			if (d1 == d2) {
50145 				goto is_equal_true;
50146 			} else {
50147 				goto is_equal_false;
50148 			}
50149 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50150 			d1 = Z_DVAL_P(op1);
50151 			d2 = (double)Z_LVAL_P(op2);
50152 			goto is_equal_double;
50153 		}
50154 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50155 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50156 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
50157 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50158 				zval_ptr_dtor_str(op1);
50159 			}
50160 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50161 				zval_ptr_dtor_str(op2);
50162 			}
50163 			if (result) {
50164 				goto is_equal_true;
50165 			} else {
50166 				goto is_equal_false;
50167 			}
50168 		}
50169 	}
50170 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
50171 }
50172 
ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50173 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50174 {
50175 	USE_OPLINE
50176 	zval *op1, *op2;
50177 	double d1, d2;
50178 
50179 	op1 = EX_VAR(opline->op1.var);
50180 	op2 = EX_VAR(opline->op2.var);
50181 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
50182 		/* pass */
50183 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
50184 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50185 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
50186 is_equal_true:
50187 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
50188 			} else {
50189 is_equal_false:
50190 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
50191 			}
50192 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50193 			d1 = (double)Z_LVAL_P(op1);
50194 			d2 = Z_DVAL_P(op2);
50195 			goto is_equal_double;
50196 		}
50197 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
50198 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50199 			d1 = Z_DVAL_P(op1);
50200 			d2 = Z_DVAL_P(op2);
50201 is_equal_double:
50202 			if (d1 == d2) {
50203 				goto is_equal_true;
50204 			} else {
50205 				goto is_equal_false;
50206 			}
50207 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50208 			d1 = Z_DVAL_P(op1);
50209 			d2 = (double)Z_LVAL_P(op2);
50210 			goto is_equal_double;
50211 		}
50212 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50213 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50214 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
50215 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50216 				zval_ptr_dtor_str(op1);
50217 			}
50218 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50219 				zval_ptr_dtor_str(op2);
50220 			}
50221 			if (result) {
50222 				goto is_equal_true;
50223 			} else {
50224 				goto is_equal_false;
50225 			}
50226 		}
50227 	}
50228 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
50229 }
50230 
ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50231 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50232 {
50233 	USE_OPLINE
50234 	zval *op1, *op2;
50235 	double d1, d2;
50236 
50237 	op1 = EX_VAR(opline->op1.var);
50238 	op2 = EX_VAR(opline->op2.var);
50239 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
50240 		/* pass */
50241 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
50242 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50243 			if (EXPECTED(Z_LVAL_P(op1) == Z_LVAL_P(op2))) {
50244 is_equal_true:
50245 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
50246 			} else {
50247 is_equal_false:
50248 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
50249 			}
50250 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50251 			d1 = (double)Z_LVAL_P(op1);
50252 			d2 = Z_DVAL_P(op2);
50253 			goto is_equal_double;
50254 		}
50255 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
50256 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50257 			d1 = Z_DVAL_P(op1);
50258 			d2 = Z_DVAL_P(op2);
50259 is_equal_double:
50260 			if (d1 == d2) {
50261 				goto is_equal_true;
50262 			} else {
50263 				goto is_equal_false;
50264 			}
50265 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50266 			d1 = Z_DVAL_P(op1);
50267 			d2 = (double)Z_LVAL_P(op2);
50268 			goto is_equal_double;
50269 		}
50270 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50271 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50272 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
50273 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50274 				zval_ptr_dtor_str(op1);
50275 			}
50276 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50277 				zval_ptr_dtor_str(op2);
50278 			}
50279 			if (result) {
50280 				goto is_equal_true;
50281 			} else {
50282 				goto is_equal_false;
50283 			}
50284 		}
50285 	}
50286 	ZEND_VM_TAIL_CALL(zend_is_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
50287 }
50288 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50289 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50290 {
50291 	USE_OPLINE
50292 	zval *op1, *op2;
50293 	double d1, d2;
50294 
50295 	op1 = EX_VAR(opline->op1.var);
50296 	op2 = EX_VAR(opline->op2.var);
50297 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
50298 		/* pass */
50299 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
50300 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50301 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
50302 is_not_equal_true:
50303 				ZEND_VM_SMART_BRANCH_TRUE_NONE();
50304 			} else {
50305 is_not_equal_false:
50306 				ZEND_VM_SMART_BRANCH_FALSE_NONE();
50307 			}
50308 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50309 			d1 = (double)Z_LVAL_P(op1);
50310 			d2 = Z_DVAL_P(op2);
50311 			goto is_not_equal_double;
50312 		}
50313 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
50314 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50315 			d1 = Z_DVAL_P(op1);
50316 			d2 = Z_DVAL_P(op2);
50317 is_not_equal_double:
50318 			if (d1 != d2) {
50319 				goto is_not_equal_true;
50320 			} else {
50321 				goto is_not_equal_false;
50322 			}
50323 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50324 			d1 = Z_DVAL_P(op1);
50325 			d2 = (double)Z_LVAL_P(op2);
50326 			goto is_not_equal_double;
50327 		}
50328 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50329 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50330 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
50331 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50332 				zval_ptr_dtor_str(op1);
50333 			}
50334 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50335 				zval_ptr_dtor_str(op2);
50336 			}
50337 			if (!result) {
50338 				goto is_not_equal_true;
50339 			} else {
50340 				goto is_not_equal_false;
50341 			}
50342 		}
50343 	}
50344 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
50345 }
50346 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50347 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50348 {
50349 	USE_OPLINE
50350 	zval *op1, *op2;
50351 	double d1, d2;
50352 
50353 	op1 = EX_VAR(opline->op1.var);
50354 	op2 = EX_VAR(opline->op2.var);
50355 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
50356 		/* pass */
50357 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
50358 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50359 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
50360 is_not_equal_true:
50361 				ZEND_VM_SMART_BRANCH_TRUE_JMPZ();
50362 			} else {
50363 is_not_equal_false:
50364 				ZEND_VM_SMART_BRANCH_FALSE_JMPZ();
50365 			}
50366 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50367 			d1 = (double)Z_LVAL_P(op1);
50368 			d2 = Z_DVAL_P(op2);
50369 			goto is_not_equal_double;
50370 		}
50371 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
50372 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50373 			d1 = Z_DVAL_P(op1);
50374 			d2 = Z_DVAL_P(op2);
50375 is_not_equal_double:
50376 			if (d1 != d2) {
50377 				goto is_not_equal_true;
50378 			} else {
50379 				goto is_not_equal_false;
50380 			}
50381 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50382 			d1 = Z_DVAL_P(op1);
50383 			d2 = (double)Z_LVAL_P(op2);
50384 			goto is_not_equal_double;
50385 		}
50386 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50387 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50388 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
50389 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50390 				zval_ptr_dtor_str(op1);
50391 			}
50392 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50393 				zval_ptr_dtor_str(op2);
50394 			}
50395 			if (!result) {
50396 				goto is_not_equal_true;
50397 			} else {
50398 				goto is_not_equal_false;
50399 			}
50400 		}
50401 	}
50402 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
50403 }
50404 
ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50405 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50406 {
50407 	USE_OPLINE
50408 	zval *op1, *op2;
50409 	double d1, d2;
50410 
50411 	op1 = EX_VAR(opline->op1.var);
50412 	op2 = EX_VAR(opline->op2.var);
50413 	if (1 && IS_CV == IS_CONST && IS_CV == IS_CONST) {
50414 		/* pass */
50415 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
50416 		if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50417 			if (EXPECTED(Z_LVAL_P(op1) != Z_LVAL_P(op2))) {
50418 is_not_equal_true:
50419 				ZEND_VM_SMART_BRANCH_TRUE_JMPNZ();
50420 			} else {
50421 is_not_equal_false:
50422 				ZEND_VM_SMART_BRANCH_FALSE_JMPNZ();
50423 			}
50424 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50425 			d1 = (double)Z_LVAL_P(op1);
50426 			d2 = Z_DVAL_P(op2);
50427 			goto is_not_equal_double;
50428 		}
50429 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
50430 		if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
50431 			d1 = Z_DVAL_P(op1);
50432 			d2 = Z_DVAL_P(op2);
50433 is_not_equal_double:
50434 			if (d1 != d2) {
50435 				goto is_not_equal_true;
50436 			} else {
50437 				goto is_not_equal_false;
50438 			}
50439 		} else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
50440 			d1 = Z_DVAL_P(op1);
50441 			d2 = (double)Z_LVAL_P(op2);
50442 			goto is_not_equal_double;
50443 		}
50444 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
50445 		if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
50446 			bool result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
50447 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50448 				zval_ptr_dtor_str(op1);
50449 			}
50450 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
50451 				zval_ptr_dtor_str(op2);
50452 			}
50453 			if (!result) {
50454 				goto is_not_equal_true;
50455 			} else {
50456 				goto is_not_equal_false;
50457 			}
50458 		}
50459 	}
50460 	ZEND_VM_TAIL_CALL(zend_is_not_equal_helper_SPEC(op1, op2 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
50461 }
50462 
ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50463 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50464 {
50465 	USE_OPLINE
50466 	zval *op1, *op2;
50467 
50468 	SAVE_OPLINE();
50469 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
50470 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50471 	compare_function(EX_VAR(opline->result.var), op1, op2);
50472 
50473 
50474 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50475 }
50476 
ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50477 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50478 {
50479 	USE_OPLINE
50480 	zval *op1, *op2;
50481 
50482 	SAVE_OPLINE();
50483 	op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
50484 	op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50485 	boolean_xor_function(EX_VAR(opline->result.var), op1, op2);
50486 
50487 
50488 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50489 }
50490 
ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50491 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50492 {
50493 	USE_OPLINE
50494 	zval *object;
50495 	zval *property;
50496 	zval *value;
50497 	zval *zptr;
50498 	void **cache_slot;
50499 	zend_property_info *prop_info;
50500 	zend_object *zobj;
50501 	zend_string *name, *tmp_name;
50502 
50503 	SAVE_OPLINE();
50504 	object = EX_VAR(opline->op1.var);
50505 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50506 
50507 	do {
50508 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
50509 
50510 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
50511 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
50512 				object = Z_REFVAL_P(object);
50513 				goto assign_op_object;
50514 			}
50515 			if (IS_CV == IS_CV
50516 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
50517 				ZVAL_UNDEFINED_OP1();
50518 			}
50519 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
50520 			break;
50521 		}
50522 
50523 assign_op_object:
50524 		/* here we are sure we are dealing with an object */
50525 		zobj = Z_OBJ_P(object);
50526 		if (IS_CV == IS_CONST) {
50527 			name = Z_STR_P(property);
50528 		} else {
50529 			name = zval_try_get_tmp_string(property, &tmp_name);
50530 			if (UNEXPECTED(!name)) {
50531 				UNDEF_RESULT();
50532 				break;
50533 			}
50534 		}
50535 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
50536 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
50537 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
50538 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50539 					ZVAL_NULL(EX_VAR(opline->result.var));
50540 				}
50541 			} else {
50542 				zval *orig_zptr = zptr;
50543 				zend_reference *ref;
50544 
50545 				do {
50546 					if (UNEXPECTED(Z_ISREF_P(zptr))) {
50547 						ref = Z_REF_P(zptr);
50548 						zptr = Z_REFVAL_P(zptr);
50549 						if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
50550 							zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
50551 							break;
50552 						}
50553 					}
50554 
50555 					if (IS_CV == IS_CONST) {
50556 						prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
50557 					} else {
50558 						prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
50559 					}
50560 					if (UNEXPECTED(prop_info)) {
50561 						/* special case for typed properties */
50562 						zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
50563 					} else {
50564 						zend_binary_op(zptr, zptr, value OPLINE_CC);
50565 					}
50566 				} while (0);
50567 
50568 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50569 					ZVAL_COPY(EX_VAR(opline->result.var), zptr);
50570 				}
50571 			}
50572 		} else {
50573 			zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
50574 		}
50575 		if (IS_CV != IS_CONST) {
50576 			zend_tmp_string_release(tmp_name);
50577 		}
50578 	} while (0);
50579 
50580 	FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
50581 
50582 
50583 	/* assign_obj has two opcodes! */
50584 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50585 }
50586 
50587 /* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50588 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50589 {
50590 	USE_OPLINE
50591 	zval *var_ptr;
50592 	zval *value, *container, *dim;
50593 	HashTable *ht;
50594 
50595 	SAVE_OPLINE();
50596 	container = EX_VAR(opline->op1.var);
50597 
50598 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
50599 assign_dim_op_array:
50600 		SEPARATE_ARRAY(container);
50601 		ht = Z_ARRVAL_P(container);
50602 assign_dim_op_new_array:
50603 		dim = EX_VAR(opline->op2.var);
50604 		if (IS_CV == IS_UNUSED) {
50605 			var_ptr = zend_hash_next_index_insert(ht, &EG(uninitialized_zval));
50606 			if (UNEXPECTED(!var_ptr)) {
50607 				zend_cannot_add_element();
50608 				goto assign_dim_op_ret_null;
50609 			}
50610 		} else {
50611 			if (IS_CV == IS_CONST) {
50612 				var_ptr = zend_fetch_dimension_address_inner_RW_CONST(ht, dim EXECUTE_DATA_CC);
50613 			} else {
50614 				var_ptr = zend_fetch_dimension_address_inner_RW(ht, dim EXECUTE_DATA_CC);
50615 			}
50616 			if (UNEXPECTED(!var_ptr)) {
50617 				goto assign_dim_op_ret_null;
50618 			}
50619 		}
50620 
50621 		value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
50622 
50623 		do {
50624 			if (IS_CV != IS_UNUSED && UNEXPECTED(Z_ISREF_P(var_ptr))) {
50625 				zend_reference *ref = Z_REF_P(var_ptr);
50626 				var_ptr = Z_REFVAL_P(var_ptr);
50627 				if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
50628 					zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
50629 					break;
50630 				}
50631 			}
50632 			zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
50633 		} while (0);
50634 
50635 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50636 			ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
50637 		}
50638 		FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
50639 	} else {
50640 		if (EXPECTED(Z_ISREF_P(container))) {
50641 			container = Z_REFVAL_P(container);
50642 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
50643 				goto assign_dim_op_array;
50644 			}
50645 		}
50646 
50647 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
50648 			zend_object *obj = Z_OBJ_P(container);
50649 
50650 			dim = EX_VAR(opline->op2.var);
50651 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
50652 				dim++;
50653 			}
50654 			zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
50655 		} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
50656 			uint8_t old_type;
50657 
50658 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
50659 				ZVAL_UNDEFINED_OP1();
50660 			}
50661 			ht = zend_new_array(8);
50662 			old_type = Z_TYPE_P(container);
50663 			ZVAL_ARR(container, ht);
50664 			if (UNEXPECTED(old_type == IS_FALSE)) {
50665 				GC_ADDREF(ht);
50666 				zend_false_to_array_deprecated();
50667 				if (UNEXPECTED(GC_DELREF(ht) == 0)) {
50668 					zend_array_destroy(ht);
50669 					goto assign_dim_op_ret_null;
50670 				}
50671 			}
50672 			goto assign_dim_op_new_array;
50673 		} else {
50674 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50675 			zend_binary_assign_op_dim_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
50676 assign_dim_op_ret_null:
50677 			FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
50678 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50679 				ZVAL_NULL(EX_VAR(opline->result.var));
50680 			}
50681 		}
50682 	}
50683 
50684 
50685 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
50686 }
50687 
ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50688 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50689 {
50690 	USE_OPLINE
50691 	zval *var_ptr;
50692 	zval *value;
50693 
50694 	SAVE_OPLINE();
50695 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50696 	var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC);
50697 
50698 	do {
50699 		if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
50700 			zend_reference *ref = Z_REF_P(var_ptr);
50701 			var_ptr = Z_REFVAL_P(var_ptr);
50702 			if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
50703 				zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
50704 				break;
50705 			}
50706 		}
50707 		zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
50708 	} while (0);
50709 
50710 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50711 		ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
50712 	}
50713 
50714 
50715 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50716 }
50717 
ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50718 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50719 {
50720 	USE_OPLINE
50721 	zval *object;
50722 	zval *property;
50723 	zval *zptr;
50724 	void **cache_slot;
50725 	zend_property_info *prop_info;
50726 	zend_object *zobj;
50727 	zend_string *name, *tmp_name;
50728 
50729 	SAVE_OPLINE();
50730 	object = EX_VAR(opline->op1.var);
50731 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50732 
50733 	do {
50734 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
50735 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
50736 				object = Z_REFVAL_P(object);
50737 				goto pre_incdec_object;
50738 			}
50739 			if (IS_CV == IS_CV
50740 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
50741 				ZVAL_UNDEFINED_OP1();
50742 			}
50743 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
50744 			break;
50745 		}
50746 
50747 pre_incdec_object:
50748 		/* here we are sure we are dealing with an object */
50749 		zobj = Z_OBJ_P(object);
50750 		if (IS_CV == IS_CONST) {
50751 			name = Z_STR_P(property);
50752 		} else {
50753 			name = zval_try_get_tmp_string(property, &tmp_name);
50754 			if (UNEXPECTED(!name)) {
50755 				UNDEF_RESULT();
50756 				break;
50757 			}
50758 		}
50759 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
50760 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
50761 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
50762 				if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
50763 					ZVAL_NULL(EX_VAR(opline->result.var));
50764 				}
50765 			} else {
50766 				if (IS_CV == IS_CONST) {
50767 					prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
50768 				} else {
50769 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
50770 				}
50771 				zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
50772 			}
50773 		} else {
50774 			zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
50775 		}
50776 		if (IS_CV != IS_CONST) {
50777 			zend_tmp_string_release(tmp_name);
50778 		}
50779 	} while (0);
50780 
50781 
50782 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50783 }
50784 
ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50785 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50786 {
50787 	USE_OPLINE
50788 	zval *object;
50789 	zval *property;
50790 	zval *zptr;
50791 	void **cache_slot;
50792 	zend_property_info *prop_info;
50793 	zend_object *zobj;
50794 	zend_string *name, *tmp_name;
50795 
50796 	SAVE_OPLINE();
50797 	object = EX_VAR(opline->op1.var);
50798 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
50799 
50800 	do {
50801 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
50802 			if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
50803 				object = Z_REFVAL_P(object);
50804 				goto post_incdec_object;
50805 			}
50806 			if (IS_CV == IS_CV
50807 			 && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
50808 				ZVAL_UNDEFINED_OP1();
50809 			}
50810 			zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
50811 			break;
50812 		}
50813 
50814 post_incdec_object:
50815 		/* here we are sure we are dealing with an object */
50816 		zobj = Z_OBJ_P(object);
50817 		if (IS_CV == IS_CONST) {
50818 			name = Z_STR_P(property);
50819 		} else {
50820 			name = zval_try_get_tmp_string(property, &tmp_name);
50821 			if (UNEXPECTED(!name)) {
50822 				ZVAL_UNDEF(EX_VAR(opline->result.var));
50823 				break;
50824 			}
50825 		}
50826 		cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
50827 		if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
50828 			if (UNEXPECTED(Z_ISERROR_P(zptr))) {
50829 				ZVAL_NULL(EX_VAR(opline->result.var));
50830 			} else {
50831 				if (IS_CV == IS_CONST) {
50832 					prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
50833 				} else {
50834 					prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
50835 				}
50836 
50837 				zend_post_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
50838 			}
50839 		} else {
50840 			zend_post_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
50841 		}
50842 		if (IS_CV != IS_CONST) {
50843 			zend_tmp_string_release(tmp_name);
50844 		}
50845 	} while (0);
50846 
50847 
50848 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50849 }
50850 
ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50851 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50852 {
50853 	USE_OPLINE
50854 	zval *container, *dim, *value;
50855 
50856 	SAVE_OPLINE();
50857 	container = EX_VAR(opline->op1.var);
50858 	dim = EX_VAR(opline->op2.var);
50859 	if (IS_CV != IS_CONST) {
50860 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
50861 fetch_dim_r_array:
50862 			value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC);
50863 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
50864 		} else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) {
50865 			container = Z_REFVAL_P(container);
50866 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
50867 				goto fetch_dim_r_array;
50868 			} else {
50869 				goto fetch_dim_r_slow;
50870 			}
50871 		} else {
50872 fetch_dim_r_slow:
50873 			if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
50874 				dim++;
50875 			}
50876 			zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC);
50877 		}
50878 	} else {
50879 		zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC);
50880 	}
50881 
50882 
50883 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50884 }
50885 
ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50886 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50887 {
50888 	USE_OPLINE
50889 	zval *container;
50890 
50891 	SAVE_OPLINE();
50892 	container = EX_VAR(opline->op1.var);
50893 	zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
50894 
50895 	if (IS_CV == IS_VAR) {
50896 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
50897 	}
50898 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50899 }
50900 
ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50901 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50902 {
50903 	USE_OPLINE
50904 	zval *container;
50905 
50906 	SAVE_OPLINE();
50907 	container = EX_VAR(opline->op1.var);
50908 	zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
50909 
50910 	if (IS_CV == IS_VAR) {
50911 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
50912 	}
50913 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50914 }
50915 
ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50916 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50917 {
50918 	USE_OPLINE
50919 	zval *container;
50920 
50921 	SAVE_OPLINE();
50922 	container = EX_VAR(opline->op1.var);
50923 	zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
50924 
50925 
50926 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50927 }
50928 
ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50929 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50930 {
50931 #if 0
50932 	USE_OPLINE
50933 #endif
50934 
50935 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
50936 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
50937 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
50938 		}
50939 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
50940 	} else {
50941 		if (IS_CV == IS_UNUSED) {
50942 			ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
50943 		}
50944 		ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
50945 	}
50946 }
50947 
ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50948 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50949 {
50950 	USE_OPLINE
50951 	zval *container;
50952 
50953 	SAVE_OPLINE();
50954 	container = EX_VAR(opline->op1.var);
50955 	zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC);
50956 
50957 	if (IS_CV == IS_VAR) {
50958 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
50959 	}
50960 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
50961 }
50962 
ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)50963 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
50964 {
50965 	USE_OPLINE
50966 	zval *container;
50967 	void **cache_slot = NULL;
50968 
50969 	SAVE_OPLINE();
50970 	container = EX_VAR(opline->op1.var);
50971 
50972 	if (IS_CV == IS_CONST ||
50973 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
50974 		do {
50975 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
50976 				container = Z_REFVAL_P(container);
50977 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
50978 					break;
50979 				}
50980 			}
50981 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
50982 				ZVAL_UNDEFINED_OP1();
50983 			}
50984 			zend_wrong_property_read(container, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
50985 			ZVAL_NULL(EX_VAR(opline->result.var));
50986 			goto fetch_obj_r_finish;
50987 		} while (0);
50988 	}
50989 
50990 	/* here we are sure we are dealing with an object */
50991 	do {
50992 		zend_object *zobj = Z_OBJ_P(container);
50993 		zend_string *name, *tmp_name;
50994 		zval *retval;
50995 
50996 		if (IS_CV == IS_CONST) {
50997 			cache_slot = CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_REF /* FUNC_ARG fetch may contain it */);
50998 
50999 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
51000 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
51001 
51002 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
51003 					retval = OBJ_PROP(zobj, prop_offset);
51004 					if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) {
51005 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
51006 							goto fetch_obj_r_copy;
51007 						} else {
51008 fetch_obj_r_fast_copy:
51009 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
51010 							ZEND_VM_NEXT_OPCODE();
51011 						}
51012 					}
51013 				} else if (EXPECTED(zobj->properties != NULL)) {
51014 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51015 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
51016 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
51017 
51018 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
51019 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
51020 
51021 							if (EXPECTED(p->key == name) ||
51022 							    (EXPECTED(p->h == ZSTR_H(name)) &&
51023 							     EXPECTED(p->key != NULL) &&
51024 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
51025 								retval = &p->val;
51026 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
51027 									goto fetch_obj_r_copy;
51028 								} else {
51029 									goto fetch_obj_r_fast_copy;
51030 								}
51031 							}
51032 						}
51033 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
51034 					}
51035 					retval = zend_hash_find_known_hash(zobj->properties, name);
51036 					if (EXPECTED(retval)) {
51037 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
51038 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
51039 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
51040 							goto fetch_obj_r_copy;
51041 						} else {
51042 							goto fetch_obj_r_fast_copy;
51043 						}
51044 					}
51045 				}
51046 			}
51047 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51048 		} else {
51049 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
51050 			if (UNEXPECTED(!name)) {
51051 				ZVAL_UNDEF(EX_VAR(opline->result.var));
51052 				break;
51053 			}
51054 		}
51055 
51056 #if ZEND_DEBUG
51057 		/* For non-standard object handlers, verify a declared property type in debug builds.
51058 		 * Fetch prop_info before calling read_property(), as it may deallocate the object. */
51059 		zend_property_info *prop_info = NULL;
51060 		if (zobj->handlers->read_property != zend_std_read_property) {
51061 			prop_info = zend_get_property_info(zobj->ce, name, /* silent */ true);
51062 		}
51063 #endif
51064 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_R, cache_slot, EX_VAR(opline->result.var));
51065 #if ZEND_DEBUG
51066 		if (!EG(exception) && prop_info && prop_info != ZEND_WRONG_PROPERTY_INFO
51067 				&& ZEND_TYPE_IS_SET(prop_info->type)) {
51068 			ZVAL_OPT_DEREF(retval);
51069 			zend_verify_property_type(prop_info, retval, /* strict */ true);
51070 		}
51071 #endif
51072 
51073 		if (IS_CV != IS_CONST) {
51074 			zend_tmp_string_release(tmp_name);
51075 		}
51076 
51077 		if (retval != EX_VAR(opline->result.var)) {
51078 fetch_obj_r_copy:
51079 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
51080 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
51081 			zend_unwrap_reference(retval);
51082 		}
51083 	} while (0);
51084 
51085 fetch_obj_r_finish:
51086 
51087 
51088 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51089 }
51090 
ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51091 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51092 {
51093 	USE_OPLINE
51094 	zval *property, *container, *result;
51095 
51096 	SAVE_OPLINE();
51097 
51098 	container = EX_VAR(opline->op1.var);
51099 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51100 	result = EX_VAR(opline->result.var);
51101 	zend_fetch_property_address(
51102 		result, container, IS_CV, property, IS_CV,
51103 		((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
51104 		BP_VAR_W, opline->extended_value OPLINE_CC EXECUTE_DATA_CC);
51105 
51106 	if (IS_CV == IS_VAR) {
51107 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
51108 	}
51109 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51110 }
51111 
ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51112 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51113 {
51114 	USE_OPLINE
51115 	zval *property, *container, *result;
51116 
51117 	SAVE_OPLINE();
51118 	container = EX_VAR(opline->op1.var);
51119 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51120 	result = EX_VAR(opline->result.var);
51121 	zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0 OPLINE_CC EXECUTE_DATA_CC);
51122 
51123 	if (IS_CV == IS_VAR) {
51124 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
51125 	}
51126 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51127 }
51128 
ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51129 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51130 {
51131 	USE_OPLINE
51132 	zval *container;
51133 	void **cache_slot = NULL;
51134 
51135 	SAVE_OPLINE();
51136 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
51137 
51138 	if (IS_CV == IS_CONST ||
51139 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
51140 		do {
51141 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
51142 				container = Z_REFVAL_P(container);
51143 				if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
51144 					break;
51145 				}
51146 			}
51147 			if (IS_CV == IS_CV && Z_TYPE_P(EX_VAR(opline->op2.var)) == IS_UNDEF) {
51148 				ZVAL_UNDEFINED_OP2();
51149 			}
51150 			ZVAL_NULL(EX_VAR(opline->result.var));
51151 			goto fetch_obj_is_finish;
51152 		} while (0);
51153 	}
51154 
51155 	/* here we are sure we are dealing with an object */
51156 	do {
51157 		zend_object *zobj = Z_OBJ_P(container);
51158 		zend_string *name, *tmp_name;
51159 		zval *retval;
51160 
51161 		if (IS_CV == IS_CONST) {
51162 			cache_slot = CACHE_ADDR(opline->extended_value);
51163 
51164 			if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) {
51165 				uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
51166 
51167 				if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
51168 					retval = OBJ_PROP(zobj, prop_offset);
51169 					if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) {
51170 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
51171 							goto fetch_obj_is_copy;
51172 						} else {
51173 fetch_obj_is_fast_copy:
51174 							ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
51175 							ZEND_VM_NEXT_OPCODE();
51176 						}
51177 					}
51178 				} else if (EXPECTED(zobj->properties != NULL)) {
51179 					name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51180 					if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) {
51181 						uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset);
51182 
51183 						if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) {
51184 							Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx);
51185 
51186 							if (EXPECTED(p->key == name) ||
51187 							    (EXPECTED(p->h == ZSTR_H(name)) &&
51188 							     EXPECTED(p->key != NULL) &&
51189 							     EXPECTED(zend_string_equal_content(p->key, name)))) {
51190 								retval = &p->val;
51191 								if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
51192 									goto fetch_obj_is_copy;
51193 								} else {
51194 									goto fetch_obj_is_fast_copy;
51195 								}
51196 							}
51197 						}
51198 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET);
51199 					}
51200 					retval = zend_hash_find_known_hash(zobj->properties, name);
51201 					if (EXPECTED(retval)) {
51202 						uintptr_t idx = (char*)retval - (char*)zobj->properties->arData;
51203 						CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx));
51204 						if (0 || (IS_CV & (IS_TMP_VAR|IS_VAR)) != 0) {
51205 							goto fetch_obj_is_copy;
51206 						} else {
51207 							goto fetch_obj_is_fast_copy;
51208 						}
51209 					}
51210 				}
51211 			}
51212 			name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51213 		} else {
51214 			name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
51215 			if (UNEXPECTED(!name)) {
51216 				ZVAL_UNDEF(EX_VAR(opline->result.var));
51217 				break;
51218 			}
51219 		}
51220 
51221 		retval = zobj->handlers->read_property(zobj, name, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var));
51222 
51223 		if (IS_CV != IS_CONST) {
51224 			zend_tmp_string_release(tmp_name);
51225 		}
51226 
51227 		if (retval != EX_VAR(opline->result.var)) {
51228 fetch_obj_is_copy:
51229 			ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval);
51230 		} else if (UNEXPECTED(Z_ISREF_P(retval))) {
51231 			zend_unwrap_reference(retval);
51232 		}
51233 	} while (0);
51234 
51235 fetch_obj_is_finish:
51236 
51237 
51238 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51239 }
51240 
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51241 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51242 {
51243 #if 0
51244 	USE_OPLINE
51245 #endif
51246 
51247 	if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
51248 		/* Behave like FETCH_OBJ_W */
51249 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
51250 			ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
51251 		}
51252 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
51253 	} else {
51254 		ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
51255 	}
51256 }
51257 
ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51258 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51259 {
51260 	USE_OPLINE
51261 	zval *container, *property, *result;
51262 
51263 	SAVE_OPLINE();
51264 	container = EX_VAR(opline->op1.var);
51265 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51266 	result = EX_VAR(opline->result.var);
51267 	zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET, 0 OPLINE_CC EXECUTE_DATA_CC);
51268 
51269 	if (IS_CV == IS_VAR) {
51270 		FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
51271 	}
51272 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
51273 }
51274 
ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51275 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51276 {
51277 	USE_OPLINE
51278 	zval *object, *value, tmp;
51279 	zend_object *zobj;
51280 	zend_string *name, *tmp_name;
51281 	zend_refcounted *garbage = NULL;
51282 
51283 	SAVE_OPLINE();
51284 	object = EX_VAR(opline->op1.var);
51285 	value = RT_CONSTANT((opline+1), (opline+1)->op1);
51286 
51287 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
51288 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
51289 			object = Z_REFVAL_P(object);
51290 			goto assign_object;
51291 		}
51292 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
51293 		value = &EG(uninitialized_zval);
51294 		goto free_and_exit_assign_obj;
51295 	}
51296 
51297 assign_object:
51298 	zobj = Z_OBJ_P(object);
51299 	if (IS_CV == IS_CONST) {
51300 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
51301 			void **cache_slot = CACHE_ADDR(opline->extended_value);
51302 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
51303 			zval *property_val;
51304 
51305 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
51306 				property_val = OBJ_PROP(zobj, prop_offset);
51307 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
51308 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
51309 
51310 					if (UNEXPECTED(prop_info != NULL)) {
51311 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
51312 						goto free_and_exit_assign_obj;
51313 					} else {
51314 fast_assign_obj:
51315 						value = zend_assign_to_variable_ex(property_val, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
51316 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51317 							ZVAL_COPY(EX_VAR(opline->result.var), value);
51318 						}
51319 						goto exit_assign_obj;
51320 					}
51321 				}
51322 			} else {
51323 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51324 				if (EXPECTED(zobj->properties != NULL)) {
51325 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
51326 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
51327 							GC_DELREF(zobj->properties);
51328 						}
51329 						zobj->properties = zend_array_dup(zobj->properties);
51330 					}
51331 					property_val = zend_hash_find_known_hash(zobj->properties, name);
51332 					if (property_val) {
51333 						goto fast_assign_obj;
51334 					}
51335 				}
51336 
51337 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
51338 					if (EXPECTED(zobj->properties == NULL)) {
51339 						rebuild_object_properties(zobj);
51340 					}
51341 					if (IS_CONST == IS_CONST) {
51342 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
51343 							Z_ADDREF_P(value);
51344 						}
51345 					} else if (IS_CONST != IS_TMP_VAR) {
51346 						if (Z_ISREF_P(value)) {
51347 							if (IS_CONST == IS_VAR) {
51348 								zend_reference *ref = Z_REF_P(value);
51349 								if (GC_DELREF(ref) == 0) {
51350 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
51351 									efree_size(ref, sizeof(zend_reference));
51352 									value = &tmp;
51353 								} else {
51354 									value = Z_REFVAL_P(value);
51355 									Z_TRY_ADDREF_P(value);
51356 								}
51357 							} else {
51358 								value = Z_REFVAL_P(value);
51359 								Z_TRY_ADDREF_P(value);
51360 							}
51361 						} else if (IS_CONST == IS_CV) {
51362 							Z_TRY_ADDREF_P(value);
51363 						}
51364 						}
51365 					zend_hash_add_new(zobj->properties, name, value);
51366 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51367 						ZVAL_COPY(EX_VAR(opline->result.var), value);
51368 					}
51369 					goto exit_assign_obj;
51370 				}
51371 			}
51372 		}
51373 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51374 	} else {
51375 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
51376 		if (UNEXPECTED(!name)) {
51377 
51378 			UNDEF_RESULT();
51379 			goto exit_assign_obj;
51380 		}
51381 	}
51382 
51383 	if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
51384 		ZVAL_DEREF(value);
51385 	}
51386 
51387 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
51388 
51389 	if (IS_CV != IS_CONST) {
51390 		zend_tmp_string_release(tmp_name);
51391 	}
51392 
51393 free_and_exit_assign_obj:
51394 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
51395 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
51396 	}
51397 
51398 exit_assign_obj:
51399 	if (garbage) {
51400 		GC_DTOR_NO_REF(garbage);
51401 	}
51402 
51403 
51404 	/* assign_obj has two opcodes! */
51405 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
51406 }
51407 
51408 /* 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)51409 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51410 {
51411 	USE_OPLINE
51412 	zval *object, *value, tmp;
51413 	zend_object *zobj;
51414 	zend_string *name, *tmp_name;
51415 	zend_refcounted *garbage = NULL;
51416 
51417 	SAVE_OPLINE();
51418 	object = EX_VAR(opline->op1.var);
51419 	value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
51420 
51421 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
51422 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
51423 			object = Z_REFVAL_P(object);
51424 			goto assign_object;
51425 		}
51426 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
51427 		value = &EG(uninitialized_zval);
51428 		goto free_and_exit_assign_obj;
51429 	}
51430 
51431 assign_object:
51432 	zobj = Z_OBJ_P(object);
51433 	if (IS_CV == IS_CONST) {
51434 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
51435 			void **cache_slot = CACHE_ADDR(opline->extended_value);
51436 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
51437 			zval *property_val;
51438 
51439 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
51440 				property_val = OBJ_PROP(zobj, prop_offset);
51441 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
51442 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
51443 
51444 					if (UNEXPECTED(prop_info != NULL)) {
51445 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
51446 						goto free_and_exit_assign_obj;
51447 					} else {
51448 fast_assign_obj:
51449 						value = zend_assign_to_variable_ex(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
51450 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51451 							ZVAL_COPY(EX_VAR(opline->result.var), value);
51452 						}
51453 						goto exit_assign_obj;
51454 					}
51455 				}
51456 			} else {
51457 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51458 				if (EXPECTED(zobj->properties != NULL)) {
51459 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
51460 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
51461 							GC_DELREF(zobj->properties);
51462 						}
51463 						zobj->properties = zend_array_dup(zobj->properties);
51464 					}
51465 					property_val = zend_hash_find_known_hash(zobj->properties, name);
51466 					if (property_val) {
51467 						goto fast_assign_obj;
51468 					}
51469 				}
51470 
51471 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
51472 					if (EXPECTED(zobj->properties == NULL)) {
51473 						rebuild_object_properties(zobj);
51474 					}
51475 					if (IS_TMP_VAR == IS_CONST) {
51476 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
51477 							Z_ADDREF_P(value);
51478 						}
51479 					} else if (IS_TMP_VAR != IS_TMP_VAR) {
51480 						if (Z_ISREF_P(value)) {
51481 							if (IS_TMP_VAR == IS_VAR) {
51482 								zend_reference *ref = Z_REF_P(value);
51483 								if (GC_DELREF(ref) == 0) {
51484 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
51485 									efree_size(ref, sizeof(zend_reference));
51486 									value = &tmp;
51487 								} else {
51488 									value = Z_REFVAL_P(value);
51489 									Z_TRY_ADDREF_P(value);
51490 								}
51491 							} else {
51492 								value = Z_REFVAL_P(value);
51493 								Z_TRY_ADDREF_P(value);
51494 							}
51495 						} else if (IS_TMP_VAR == IS_CV) {
51496 							Z_TRY_ADDREF_P(value);
51497 						}
51498 						}
51499 					zend_hash_add_new(zobj->properties, name, value);
51500 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51501 						ZVAL_COPY(EX_VAR(opline->result.var), value);
51502 					}
51503 					goto exit_assign_obj;
51504 				}
51505 			}
51506 		}
51507 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51508 	} else {
51509 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
51510 		if (UNEXPECTED(!name)) {
51511 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
51512 			UNDEF_RESULT();
51513 			goto exit_assign_obj;
51514 		}
51515 	}
51516 
51517 	if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
51518 		ZVAL_DEREF(value);
51519 	}
51520 
51521 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
51522 
51523 	if (IS_CV != IS_CONST) {
51524 		zend_tmp_string_release(tmp_name);
51525 	}
51526 
51527 free_and_exit_assign_obj:
51528 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
51529 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
51530 	}
51531 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
51532 exit_assign_obj:
51533 	if (garbage) {
51534 		GC_DTOR_NO_REF(garbage);
51535 	}
51536 
51537 
51538 	/* assign_obj has two opcodes! */
51539 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
51540 }
51541 
51542 /* 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)51543 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51544 {
51545 	USE_OPLINE
51546 	zval *object, *value, tmp;
51547 	zend_object *zobj;
51548 	zend_string *name, *tmp_name;
51549 	zend_refcounted *garbage = NULL;
51550 
51551 	SAVE_OPLINE();
51552 	object = EX_VAR(opline->op1.var);
51553 	value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
51554 
51555 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
51556 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
51557 			object = Z_REFVAL_P(object);
51558 			goto assign_object;
51559 		}
51560 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
51561 		value = &EG(uninitialized_zval);
51562 		goto free_and_exit_assign_obj;
51563 	}
51564 
51565 assign_object:
51566 	zobj = Z_OBJ_P(object);
51567 	if (IS_CV == IS_CONST) {
51568 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
51569 			void **cache_slot = CACHE_ADDR(opline->extended_value);
51570 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
51571 			zval *property_val;
51572 
51573 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
51574 				property_val = OBJ_PROP(zobj, prop_offset);
51575 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
51576 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
51577 
51578 					if (UNEXPECTED(prop_info != NULL)) {
51579 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
51580 						goto free_and_exit_assign_obj;
51581 					} else {
51582 fast_assign_obj:
51583 						value = zend_assign_to_variable_ex(property_val, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
51584 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51585 							ZVAL_COPY(EX_VAR(opline->result.var), value);
51586 						}
51587 						goto exit_assign_obj;
51588 					}
51589 				}
51590 			} else {
51591 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51592 				if (EXPECTED(zobj->properties != NULL)) {
51593 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
51594 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
51595 							GC_DELREF(zobj->properties);
51596 						}
51597 						zobj->properties = zend_array_dup(zobj->properties);
51598 					}
51599 					property_val = zend_hash_find_known_hash(zobj->properties, name);
51600 					if (property_val) {
51601 						goto fast_assign_obj;
51602 					}
51603 				}
51604 
51605 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
51606 					if (EXPECTED(zobj->properties == NULL)) {
51607 						rebuild_object_properties(zobj);
51608 					}
51609 					if (IS_VAR == IS_CONST) {
51610 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
51611 							Z_ADDREF_P(value);
51612 						}
51613 					} else if (IS_VAR != IS_TMP_VAR) {
51614 						if (Z_ISREF_P(value)) {
51615 							if (IS_VAR == IS_VAR) {
51616 								zend_reference *ref = Z_REF_P(value);
51617 								if (GC_DELREF(ref) == 0) {
51618 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
51619 									efree_size(ref, sizeof(zend_reference));
51620 									value = &tmp;
51621 								} else {
51622 									value = Z_REFVAL_P(value);
51623 									Z_TRY_ADDREF_P(value);
51624 								}
51625 							} else {
51626 								value = Z_REFVAL_P(value);
51627 								Z_TRY_ADDREF_P(value);
51628 							}
51629 						} else if (IS_VAR == IS_CV) {
51630 							Z_TRY_ADDREF_P(value);
51631 						}
51632 						}
51633 					zend_hash_add_new(zobj->properties, name, value);
51634 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51635 						ZVAL_COPY(EX_VAR(opline->result.var), value);
51636 					}
51637 					goto exit_assign_obj;
51638 				}
51639 			}
51640 		}
51641 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51642 	} else {
51643 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
51644 		if (UNEXPECTED(!name)) {
51645 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
51646 			UNDEF_RESULT();
51647 			goto exit_assign_obj;
51648 		}
51649 	}
51650 
51651 	if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
51652 		ZVAL_DEREF(value);
51653 	}
51654 
51655 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
51656 
51657 	if (IS_CV != IS_CONST) {
51658 		zend_tmp_string_release(tmp_name);
51659 	}
51660 
51661 free_and_exit_assign_obj:
51662 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
51663 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
51664 	}
51665 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
51666 exit_assign_obj:
51667 	if (garbage) {
51668 		GC_DTOR_NO_REF(garbage);
51669 	}
51670 
51671 
51672 	/* assign_obj has two opcodes! */
51673 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
51674 }
51675 
51676 /* 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)51677 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51678 {
51679 	USE_OPLINE
51680 	zval *object, *value, tmp;
51681 	zend_object *zobj;
51682 	zend_string *name, *tmp_name;
51683 	zend_refcounted *garbage = NULL;
51684 
51685 	SAVE_OPLINE();
51686 	object = EX_VAR(opline->op1.var);
51687 	value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
51688 
51689 	if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
51690 		if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
51691 			object = Z_REFVAL_P(object);
51692 			goto assign_object;
51693 		}
51694 		zend_throw_non_object_error(object, _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC) OPLINE_CC EXECUTE_DATA_CC);
51695 		value = &EG(uninitialized_zval);
51696 		goto free_and_exit_assign_obj;
51697 	}
51698 
51699 assign_object:
51700 	zobj = Z_OBJ_P(object);
51701 	if (IS_CV == IS_CONST) {
51702 		if (EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
51703 			void **cache_slot = CACHE_ADDR(opline->extended_value);
51704 			uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
51705 			zval *property_val;
51706 
51707 			if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
51708 				property_val = OBJ_PROP(zobj, prop_offset);
51709 				if (Z_TYPE_P(property_val) != IS_UNDEF) {
51710 					zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
51711 
51712 					if (UNEXPECTED(prop_info != NULL)) {
51713 						value = zend_assign_to_typed_prop(prop_info, property_val, value, &garbage EXECUTE_DATA_CC);
51714 						goto free_and_exit_assign_obj;
51715 					} else {
51716 fast_assign_obj:
51717 						value = zend_assign_to_variable_ex(property_val, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
51718 						if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51719 							ZVAL_COPY(EX_VAR(opline->result.var), value);
51720 						}
51721 						goto exit_assign_obj;
51722 					}
51723 				}
51724 			} else {
51725 				name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51726 				if (EXPECTED(zobj->properties != NULL)) {
51727 					if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
51728 						if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
51729 							GC_DELREF(zobj->properties);
51730 						}
51731 						zobj->properties = zend_array_dup(zobj->properties);
51732 					}
51733 					property_val = zend_hash_find_known_hash(zobj->properties, name);
51734 					if (property_val) {
51735 						goto fast_assign_obj;
51736 					}
51737 				}
51738 
51739 				if (!zobj->ce->__set && (zobj->ce->ce_flags & ZEND_ACC_ALLOW_DYNAMIC_PROPERTIES)) {
51740 					if (EXPECTED(zobj->properties == NULL)) {
51741 						rebuild_object_properties(zobj);
51742 					}
51743 					if (IS_CV == IS_CONST) {
51744 						if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
51745 							Z_ADDREF_P(value);
51746 						}
51747 					} else if (IS_CV != IS_TMP_VAR) {
51748 						if (Z_ISREF_P(value)) {
51749 							if (IS_CV == IS_VAR) {
51750 								zend_reference *ref = Z_REF_P(value);
51751 								if (GC_DELREF(ref) == 0) {
51752 									ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
51753 									efree_size(ref, sizeof(zend_reference));
51754 									value = &tmp;
51755 								} else {
51756 									value = Z_REFVAL_P(value);
51757 									Z_TRY_ADDREF_P(value);
51758 								}
51759 							} else {
51760 								value = Z_REFVAL_P(value);
51761 								Z_TRY_ADDREF_P(value);
51762 							}
51763 						} else if (IS_CV == IS_CV) {
51764 							Z_TRY_ADDREF_P(value);
51765 						}
51766 						}
51767 					zend_hash_add_new(zobj->properties, name, value);
51768 					if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51769 						ZVAL_COPY(EX_VAR(opline->result.var), value);
51770 					}
51771 					goto exit_assign_obj;
51772 				}
51773 			}
51774 		}
51775 		name = Z_STR_P(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC));
51776 	} else {
51777 		name = zval_try_get_tmp_string(_get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC), &tmp_name);
51778 		if (UNEXPECTED(!name)) {
51779 
51780 			UNDEF_RESULT();
51781 			goto exit_assign_obj;
51782 		}
51783 	}
51784 
51785 	if (IS_CV == IS_CV || IS_CV == IS_VAR) {
51786 		ZVAL_DEREF(value);
51787 	}
51788 
51789 	value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
51790 
51791 	if (IS_CV != IS_CONST) {
51792 		zend_tmp_string_release(tmp_name);
51793 	}
51794 
51795 free_and_exit_assign_obj:
51796 	if (UNEXPECTED(RETURN_VALUE_USED(opline)) && value) {
51797 		ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
51798 	}
51799 
51800 exit_assign_obj:
51801 	if (garbage) {
51802 		GC_DTOR_NO_REF(garbage);
51803 	}
51804 
51805 
51806 	/* assign_obj has two opcodes! */
51807 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
51808 }
51809 
51810 /* 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)51811 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51812 {
51813 	USE_OPLINE
51814 	zval *object_ptr, *orig_object_ptr;
51815 	zval *value;
51816 	zval *variable_ptr;
51817 	zval *dim;
51818 	zend_refcounted *garbage = NULL;
51819 
51820 	SAVE_OPLINE();
51821 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
51822 
51823 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
51824 try_assign_dim_array:
51825 		SEPARATE_ARRAY(object_ptr);
51826 		if (IS_CV == IS_UNUSED) {
51827 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
51828 			if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
51829 				HashTable *ht = Z_ARRVAL_P(object_ptr);
51830 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
51831 					GC_ADDREF(ht);
51832 				}
51833 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
51834 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
51835 					zend_array_destroy(ht);
51836 					goto assign_dim_error;
51837 				}
51838 			}
51839 			if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
51840 				ZVAL_DEREF(value);
51841 			}
51842 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
51843 			if (UNEXPECTED(value == NULL)) {
51844 				zend_cannot_add_element();
51845 				goto assign_dim_error;
51846 			} else if (IS_CONST == IS_CV) {
51847 				if (Z_REFCOUNTED_P(value)) {
51848 					Z_ADDREF_P(value);
51849 				}
51850 			} else if (IS_CONST == IS_VAR) {
51851 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
51852 				if (Z_ISREF_P(free_op_data)) {
51853 					if (Z_REFCOUNTED_P(value)) {
51854 						Z_ADDREF_P(value);
51855 					}
51856 					zval_ptr_dtor_nogc(free_op_data);
51857 				}
51858 			} else if (IS_CONST == IS_CONST) {
51859 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
51860 					Z_ADDREF_P(value);
51861 				}
51862 			}
51863 		} else {
51864 			dim = EX_VAR(opline->op2.var);
51865 			if (IS_CV == IS_CONST) {
51866 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
51867 			} else {
51868 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
51869 			}
51870 			if (UNEXPECTED(variable_ptr == NULL)) {
51871 				goto assign_dim_error;
51872 			}
51873 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
51874 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CONST, EX_USES_STRICT_TYPES(), &garbage);
51875 		}
51876 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51877 			ZVAL_COPY(EX_VAR(opline->result.var), value);
51878 		}
51879 		if (garbage) {
51880 			GC_DTOR_NO_REF(garbage);
51881 		}
51882 	} else {
51883 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
51884 			object_ptr = Z_REFVAL_P(object_ptr);
51885 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
51886 				goto try_assign_dim_array;
51887 			}
51888 		}
51889 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
51890 			zend_object *obj = Z_OBJ_P(object_ptr);
51891 
51892 			GC_ADDREF(obj);
51893 			dim = EX_VAR(opline->op2.var);
51894 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
51895 				dim = ZVAL_UNDEFINED_OP2();
51896 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
51897 				dim++;
51898 			}
51899 
51900 			value = RT_CONSTANT((opline+1), (opline+1)->op1);
51901 			if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
51902 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
51903 			} else if (IS_CONST & (IS_CV|IS_VAR)) {
51904 				ZVAL_DEREF(value);
51905 			}
51906 
51907 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
51908 
51909 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
51910 				zend_objects_store_del(obj);
51911 			}
51912 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
51913 			if (IS_CV == IS_UNUSED) {
51914 				zend_use_new_element_for_string();
51915 
51916 				UNDEF_RESULT();
51917 			} else {
51918 				dim = EX_VAR(opline->op2.var);
51919 				value = RT_CONSTANT((opline+1), (opline+1)->op1);
51920 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
51921 
51922 			}
51923 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
51924 			if (Z_ISREF_P(orig_object_ptr)
51925 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
51926 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
51927 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51928 
51929 				UNDEF_RESULT();
51930 			} else {
51931 				HashTable *ht = zend_new_array(8);
51932 				uint8_t old_type = Z_TYPE_P(object_ptr);
51933 
51934 				ZVAL_ARR(object_ptr, ht);
51935 				if (UNEXPECTED(old_type == IS_FALSE)) {
51936 					GC_ADDREF(ht);
51937 					zend_false_to_array_deprecated();
51938 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
51939 						zend_array_destroy(ht);
51940 						goto assign_dim_error;
51941 					}
51942 				}
51943 				goto try_assign_dim_array;
51944 			}
51945 		} else {
51946 			zend_use_scalar_as_array();
51947 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
51948 assign_dim_error:
51949 
51950 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
51951 				ZVAL_NULL(EX_VAR(opline->result.var));
51952 			}
51953 		}
51954 	}
51955 	if (IS_CV != IS_UNUSED) {
51956 
51957 	}
51958 
51959 	/* assign_dim has two opcodes! */
51960 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
51961 }
51962 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)51963 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
51964 {
51965 	USE_OPLINE
51966 	zval *object_ptr, *orig_object_ptr;
51967 	zval *value;
51968 	zval *variable_ptr;
51969 	zval *dim;
51970 	zend_refcounted *garbage = NULL;
51971 
51972 	SAVE_OPLINE();
51973 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
51974 
51975 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
51976 try_assign_dim_array:
51977 		SEPARATE_ARRAY(object_ptr);
51978 		if (IS_CV == IS_UNUSED) {
51979 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
51980 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
51981 				HashTable *ht = Z_ARRVAL_P(object_ptr);
51982 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
51983 					GC_ADDREF(ht);
51984 				}
51985 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
51986 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
51987 					zend_array_destroy(ht);
51988 					goto assign_dim_error;
51989 				}
51990 			}
51991 			if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
51992 				ZVAL_DEREF(value);
51993 			}
51994 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
51995 			if (UNEXPECTED(value == NULL)) {
51996 				zend_cannot_add_element();
51997 				goto assign_dim_error;
51998 			} else if (IS_TMP_VAR == IS_CV) {
51999 				if (Z_REFCOUNTED_P(value)) {
52000 					Z_ADDREF_P(value);
52001 				}
52002 			} else if (IS_TMP_VAR == IS_VAR) {
52003 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
52004 				if (Z_ISREF_P(free_op_data)) {
52005 					if (Z_REFCOUNTED_P(value)) {
52006 						Z_ADDREF_P(value);
52007 					}
52008 					zval_ptr_dtor_nogc(free_op_data);
52009 				}
52010 			} else if (IS_TMP_VAR == IS_CONST) {
52011 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
52012 					Z_ADDREF_P(value);
52013 				}
52014 			}
52015 		} else {
52016 			dim = EX_VAR(opline->op2.var);
52017 			if (IS_CV == IS_CONST) {
52018 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
52019 			} else {
52020 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
52021 			}
52022 			if (UNEXPECTED(variable_ptr == NULL)) {
52023 				goto assign_dim_error;
52024 			}
52025 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
52026 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_TMP_VAR, EX_USES_STRICT_TYPES(), &garbage);
52027 		}
52028 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52029 			ZVAL_COPY(EX_VAR(opline->result.var), value);
52030 		}
52031 		if (garbage) {
52032 			GC_DTOR_NO_REF(garbage);
52033 		}
52034 	} else {
52035 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
52036 			object_ptr = Z_REFVAL_P(object_ptr);
52037 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
52038 				goto try_assign_dim_array;
52039 			}
52040 		}
52041 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
52042 			zend_object *obj = Z_OBJ_P(object_ptr);
52043 
52044 			GC_ADDREF(obj);
52045 			dim = EX_VAR(opline->op2.var);
52046 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
52047 				dim = ZVAL_UNDEFINED_OP2();
52048 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
52049 				dim++;
52050 			}
52051 
52052 			value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
52053 			if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
52054 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
52055 			} else if (IS_TMP_VAR & (IS_CV|IS_VAR)) {
52056 				ZVAL_DEREF(value);
52057 			}
52058 
52059 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
52060 
52061 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52062 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
52063 				zend_objects_store_del(obj);
52064 			}
52065 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
52066 			if (IS_CV == IS_UNUSED) {
52067 				zend_use_new_element_for_string();
52068 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52069 				UNDEF_RESULT();
52070 			} else {
52071 				dim = EX_VAR(opline->op2.var);
52072 				value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
52073 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
52074 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52075 			}
52076 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
52077 			if (Z_ISREF_P(orig_object_ptr)
52078 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
52079 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
52080 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52081 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52082 				UNDEF_RESULT();
52083 			} else {
52084 				HashTable *ht = zend_new_array(8);
52085 				uint8_t old_type = Z_TYPE_P(object_ptr);
52086 
52087 				ZVAL_ARR(object_ptr, ht);
52088 				if (UNEXPECTED(old_type == IS_FALSE)) {
52089 					GC_ADDREF(ht);
52090 					zend_false_to_array_deprecated();
52091 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
52092 						zend_array_destroy(ht);
52093 						goto assign_dim_error;
52094 					}
52095 				}
52096 				goto try_assign_dim_array;
52097 			}
52098 		} else {
52099 			zend_use_scalar_as_array();
52100 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52101 assign_dim_error:
52102 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52103 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52104 				ZVAL_NULL(EX_VAR(opline->result.var));
52105 			}
52106 		}
52107 	}
52108 	if (IS_CV != IS_UNUSED) {
52109 
52110 	}
52111 
52112 	/* assign_dim has two opcodes! */
52113 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
52114 }
52115 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52116 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52117 {
52118 	USE_OPLINE
52119 	zval *object_ptr, *orig_object_ptr;
52120 	zval *value;
52121 	zval *variable_ptr;
52122 	zval *dim;
52123 	zend_refcounted *garbage = NULL;
52124 
52125 	SAVE_OPLINE();
52126 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
52127 
52128 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
52129 try_assign_dim_array:
52130 		SEPARATE_ARRAY(object_ptr);
52131 		if (IS_CV == IS_UNUSED) {
52132 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
52133 			if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
52134 				HashTable *ht = Z_ARRVAL_P(object_ptr);
52135 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
52136 					GC_ADDREF(ht);
52137 				}
52138 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
52139 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
52140 					zend_array_destroy(ht);
52141 					goto assign_dim_error;
52142 				}
52143 			}
52144 			if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
52145 				ZVAL_DEREF(value);
52146 			}
52147 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
52148 			if (UNEXPECTED(value == NULL)) {
52149 				zend_cannot_add_element();
52150 				goto assign_dim_error;
52151 			} else if (IS_VAR == IS_CV) {
52152 				if (Z_REFCOUNTED_P(value)) {
52153 					Z_ADDREF_P(value);
52154 				}
52155 			} else if (IS_VAR == IS_VAR) {
52156 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
52157 				if (Z_ISREF_P(free_op_data)) {
52158 					if (Z_REFCOUNTED_P(value)) {
52159 						Z_ADDREF_P(value);
52160 					}
52161 					zval_ptr_dtor_nogc(free_op_data);
52162 				}
52163 			} else if (IS_VAR == IS_CONST) {
52164 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
52165 					Z_ADDREF_P(value);
52166 				}
52167 			}
52168 		} else {
52169 			dim = EX_VAR(opline->op2.var);
52170 			if (IS_CV == IS_CONST) {
52171 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
52172 			} else {
52173 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
52174 			}
52175 			if (UNEXPECTED(variable_ptr == NULL)) {
52176 				goto assign_dim_error;
52177 			}
52178 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
52179 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_VAR, EX_USES_STRICT_TYPES(), &garbage);
52180 		}
52181 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52182 			ZVAL_COPY(EX_VAR(opline->result.var), value);
52183 		}
52184 		if (garbage) {
52185 			GC_DTOR_NO_REF(garbage);
52186 		}
52187 	} else {
52188 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
52189 			object_ptr = Z_REFVAL_P(object_ptr);
52190 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
52191 				goto try_assign_dim_array;
52192 			}
52193 		}
52194 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
52195 			zend_object *obj = Z_OBJ_P(object_ptr);
52196 
52197 			GC_ADDREF(obj);
52198 			dim = EX_VAR(opline->op2.var);
52199 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
52200 				dim = ZVAL_UNDEFINED_OP2();
52201 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
52202 				dim++;
52203 			}
52204 
52205 			value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
52206 			if (IS_VAR == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
52207 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
52208 			} else if (IS_VAR & (IS_CV|IS_VAR)) {
52209 				ZVAL_DEREF(value);
52210 			}
52211 
52212 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
52213 
52214 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52215 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
52216 				zend_objects_store_del(obj);
52217 			}
52218 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
52219 			if (IS_CV == IS_UNUSED) {
52220 				zend_use_new_element_for_string();
52221 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52222 				UNDEF_RESULT();
52223 			} else {
52224 				dim = EX_VAR(opline->op2.var);
52225 				value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
52226 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
52227 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52228 			}
52229 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
52230 			if (Z_ISREF_P(orig_object_ptr)
52231 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
52232 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
52233 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52234 				zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52235 				UNDEF_RESULT();
52236 			} else {
52237 				HashTable *ht = zend_new_array(8);
52238 				uint8_t old_type = Z_TYPE_P(object_ptr);
52239 
52240 				ZVAL_ARR(object_ptr, ht);
52241 				if (UNEXPECTED(old_type == IS_FALSE)) {
52242 					GC_ADDREF(ht);
52243 					zend_false_to_array_deprecated();
52244 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
52245 						zend_array_destroy(ht);
52246 						goto assign_dim_error;
52247 					}
52248 				}
52249 				goto try_assign_dim_array;
52250 			}
52251 		} else {
52252 			zend_use_scalar_as_array();
52253 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52254 assign_dim_error:
52255 			zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52256 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52257 				ZVAL_NULL(EX_VAR(opline->result.var));
52258 			}
52259 		}
52260 	}
52261 	if (IS_CV != IS_UNUSED) {
52262 
52263 	}
52264 
52265 	/* assign_dim has two opcodes! */
52266 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
52267 }
52268 
ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52269 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52270 {
52271 	USE_OPLINE
52272 	zval *object_ptr, *orig_object_ptr;
52273 	zval *value;
52274 	zval *variable_ptr;
52275 	zval *dim;
52276 	zend_refcounted *garbage = NULL;
52277 
52278 	SAVE_OPLINE();
52279 	orig_object_ptr = object_ptr = EX_VAR(opline->op1.var);
52280 
52281 	if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
52282 try_assign_dim_array:
52283 		SEPARATE_ARRAY(object_ptr);
52284 		if (IS_CV == IS_UNUSED) {
52285 			value = EX_VAR((opline+1)->op1.var);
52286 			if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
52287 				HashTable *ht = Z_ARRVAL_P(object_ptr);
52288 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) {
52289 					GC_ADDREF(ht);
52290 				}
52291 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
52292 				if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) && !GC_DELREF(ht)) {
52293 					zend_array_destroy(ht);
52294 					goto assign_dim_error;
52295 				}
52296 			}
52297 			if (IS_CV == IS_CV || IS_CV == IS_VAR) {
52298 				ZVAL_DEREF(value);
52299 			}
52300 			value = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value);
52301 			if (UNEXPECTED(value == NULL)) {
52302 				zend_cannot_add_element();
52303 				goto assign_dim_error;
52304 			} else if (IS_CV == IS_CV) {
52305 				if (Z_REFCOUNTED_P(value)) {
52306 					Z_ADDREF_P(value);
52307 				}
52308 			} else if (IS_CV == IS_VAR) {
52309 				zval *free_op_data = EX_VAR((opline+1)->op1.var);
52310 				if (Z_ISREF_P(free_op_data)) {
52311 					if (Z_REFCOUNTED_P(value)) {
52312 						Z_ADDREF_P(value);
52313 					}
52314 					zval_ptr_dtor_nogc(free_op_data);
52315 				}
52316 			} else if (IS_CV == IS_CONST) {
52317 				if (UNEXPECTED(Z_REFCOUNTED_P(value))) {
52318 					Z_ADDREF_P(value);
52319 				}
52320 			}
52321 		} else {
52322 			dim = EX_VAR(opline->op2.var);
52323 			if (IS_CV == IS_CONST) {
52324 				variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
52325 			} else {
52326 				variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC);
52327 			}
52328 			if (UNEXPECTED(variable_ptr == NULL)) {
52329 				goto assign_dim_error;
52330 			}
52331 			value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
52332 			value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
52333 		}
52334 		if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52335 			ZVAL_COPY(EX_VAR(opline->result.var), value);
52336 		}
52337 		if (garbage) {
52338 			GC_DTOR_NO_REF(garbage);
52339 		}
52340 	} else {
52341 		if (EXPECTED(Z_ISREF_P(object_ptr))) {
52342 			object_ptr = Z_REFVAL_P(object_ptr);
52343 			if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) {
52344 				goto try_assign_dim_array;
52345 			}
52346 		}
52347 		if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) {
52348 			zend_object *obj = Z_OBJ_P(object_ptr);
52349 
52350 			GC_ADDREF(obj);
52351 			dim = EX_VAR(opline->op2.var);
52352 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
52353 				dim = ZVAL_UNDEFINED_OP2();
52354 			} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
52355 				dim++;
52356 			}
52357 
52358 			value = EX_VAR((opline+1)->op1.var);
52359 			if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(value))) {
52360 				value = zval_undefined_cv((opline+1)->op1.var EXECUTE_DATA_CC);
52361 			} else if (IS_CV & (IS_CV|IS_VAR)) {
52362 				ZVAL_DEREF(value);
52363 			}
52364 
52365 			zend_assign_to_object_dim(obj, dim, value OPLINE_CC EXECUTE_DATA_CC);
52366 
52367 			if (UNEXPECTED(GC_DELREF(obj) == 0)) {
52368 				zend_objects_store_del(obj);
52369 			}
52370 		} else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) {
52371 			if (IS_CV == IS_UNUSED) {
52372 				zend_use_new_element_for_string();
52373 
52374 				UNDEF_RESULT();
52375 			} else {
52376 				dim = EX_VAR(opline->op2.var);
52377 				value = EX_VAR((opline+1)->op1.var);
52378 				zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC);
52379 
52380 			}
52381 		} else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) {
52382 			if (Z_ISREF_P(orig_object_ptr)
52383 			 && ZEND_REF_HAS_TYPE_SOURCES(Z_REF_P(orig_object_ptr))
52384 			 && !zend_verify_ref_array_assignable(Z_REF_P(orig_object_ptr))) {
52385 				dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52386 
52387 				UNDEF_RESULT();
52388 			} else {
52389 				HashTable *ht = zend_new_array(8);
52390 				uint8_t old_type = Z_TYPE_P(object_ptr);
52391 
52392 				ZVAL_ARR(object_ptr, ht);
52393 				if (UNEXPECTED(old_type == IS_FALSE)) {
52394 					GC_ADDREF(ht);
52395 					zend_false_to_array_deprecated();
52396 					if (UNEXPECTED(GC_DELREF(ht) == 0)) {
52397 						zend_array_destroy(ht);
52398 						goto assign_dim_error;
52399 					}
52400 				}
52401 				goto try_assign_dim_array;
52402 			}
52403 		} else {
52404 			zend_use_scalar_as_array();
52405 			dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52406 assign_dim_error:
52407 
52408 			if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52409 				ZVAL_NULL(EX_VAR(opline->result.var));
52410 			}
52411 		}
52412 	}
52413 	if (IS_CV != IS_UNUSED) {
52414 
52415 	}
52416 
52417 	/* assign_dim has two opcodes! */
52418 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
52419 }
52420 
ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52421 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52422 {
52423 	USE_OPLINE
52424 	zval *value;
52425 	zval *variable_ptr;
52426 
52427 	SAVE_OPLINE();
52428 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52429 	variable_ptr = EX_VAR(opline->op1.var);
52430 
52431 	if (0 || UNEXPECTED(0)) {
52432 		zend_refcounted *garbage = NULL;
52433 
52434 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
52435 		if (UNEXPECTED(0)) {
52436 			ZVAL_COPY(EX_VAR(opline->result.var), value);
52437 		}
52438 		if (garbage) {
52439 			GC_DTOR_NO_REF(garbage);
52440 		}
52441 	} else {
52442 		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
52443 	}
52444 
52445 	/* zend_assign_to_variable() always takes care of op2, never free it! */
52446 
52447 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52448 }
52449 
ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52450 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52451 {
52452 	USE_OPLINE
52453 	zval *value;
52454 	zval *variable_ptr;
52455 
52456 	SAVE_OPLINE();
52457 	value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52458 	variable_ptr = EX_VAR(opline->op1.var);
52459 
52460 	if (0 || UNEXPECTED(1)) {
52461 		zend_refcounted *garbage = NULL;
52462 
52463 		value = zend_assign_to_variable_ex(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES(), &garbage);
52464 		if (UNEXPECTED(1)) {
52465 			ZVAL_COPY(EX_VAR(opline->result.var), value);
52466 		}
52467 		if (garbage) {
52468 			GC_DTOR_NO_REF(garbage);
52469 		}
52470 	} else {
52471 		value = zend_assign_to_variable(variable_ptr, value, IS_CV, EX_USES_STRICT_TYPES());
52472 	}
52473 
52474 	/* zend_assign_to_variable() always takes care of op2, never free it! */
52475 
52476 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52477 }
52478 
ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52479 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52480 {
52481 	USE_OPLINE
52482 	zval *variable_ptr;
52483 	zval *value_ptr;
52484 	zend_refcounted *garbage = NULL;
52485 
52486 	SAVE_OPLINE();
52487 	value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC);
52488 	variable_ptr = EX_VAR(opline->op1.var);
52489 
52490 	if (IS_CV == IS_VAR &&
52491 	           UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) {
52492 
52493 		zend_throw_error(NULL, "Cannot assign by reference to an array dimension of an object");
52494 		variable_ptr = &EG(uninitialized_zval);
52495 	} else if (IS_CV == IS_VAR &&
52496 	           opline->extended_value == ZEND_RETURNS_FUNCTION &&
52497 			   UNEXPECTED(!Z_ISREF_P(value_ptr))) {
52498 
52499 		variable_ptr = zend_wrong_assign_to_variable_reference(
52500 			variable_ptr, value_ptr, &garbage OPLINE_CC EXECUTE_DATA_CC);
52501 	} else {
52502 		zend_assign_to_variable_reference(variable_ptr, value_ptr, &garbage);
52503 	}
52504 
52505 	if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
52506 		ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
52507 	}
52508 
52509 	if (garbage) {
52510 		GC_DTOR(garbage);
52511 	}
52512 
52513 
52514 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52515 }
52516 
ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52517 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52518 {
52519 	USE_OPLINE
52520 	zval *property, *container, *value_ptr;
52521 
52522 	SAVE_OPLINE();
52523 
52524 	container = EX_VAR(opline->op1.var);
52525 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52526 
52527 	value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
52528 
52529 	if (1) {
52530 		if (IS_CV == IS_UNUSED) {
52531 			if (IS_CV == IS_CONST) {
52532 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52533 			} else {
52534 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52535 			}
52536 		} else {
52537 			if (IS_CV == IS_CONST) {
52538 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52539 			} else {
52540 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52541 			}
52542 		}
52543 	} else {
52544 		zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52545 	}
52546 
52547 
52548 	zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
52549 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
52550 }
52551 
52552 /* 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)52553 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52554 {
52555 	USE_OPLINE
52556 	zval *property, *container, *value_ptr;
52557 
52558 	SAVE_OPLINE();
52559 
52560 	container = EX_VAR(opline->op1.var);
52561 	property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
52562 
52563 	value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
52564 
52565 	if (1) {
52566 		if (IS_CV == IS_UNUSED) {
52567 			if (IS_CV == IS_CONST) {
52568 				zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52569 			} else {
52570 				zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52571 			}
52572 		} else {
52573 			if (IS_CV == IS_CONST) {
52574 				zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52575 			} else {
52576 				zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52577 			}
52578 		}
52579 	} else {
52580 		zend_assign_to_property_reference(container, IS_CV, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
52581 	}
52582 
52583 
52584 
52585 	ZEND_VM_NEXT_OPCODE_EX(1, 2);
52586 }
52587 
52588 /* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52589 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52590 {
52591 	USE_OPLINE
52592 	zval *op1, *op2;
52593 	zend_string *op1_str, *op2_str, *str;
52594 
52595 
52596 	op1 = EX_VAR(opline->op1.var);
52597 	op2 = EX_VAR(opline->op2.var);
52598 	if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
52599 	    (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) {
52600 		zend_string *op1_str = Z_STR_P(op1);
52601 		zend_string *op2_str = Z_STR_P(op2);
52602 		zend_string *str;
52603 		uint32_t flags = ZSTR_GET_COPYABLE_CONCAT_PROPERTIES_BOTH(op1_str, op2_str);
52604 
52605 		if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
52606 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
52607 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str);
52608 			} else {
52609 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
52610 			}
52611 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
52612 				zend_string_release_ex(op1_str, 0);
52613 			}
52614 		} else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
52615 			if (IS_CV == IS_CONST || IS_CV == IS_CV) {
52616 				ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str);
52617 			} else {
52618 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
52619 			}
52620 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
52621 				zend_string_release_ex(op2_str, 0);
52622 			}
52623 		} else if (IS_CV != IS_CONST && IS_CV != IS_CV &&
52624 		    !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) {
52625 			size_t len = ZSTR_LEN(op1_str);
52626 
52627 			str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0);
52628 			memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
52629 			GC_ADD_FLAGS(str, flags);
52630 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
52631 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
52632 				zend_string_release_ex(op2_str, 0);
52633 			}
52634 		} else {
52635 			str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
52636 			memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
52637 			memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
52638 			GC_ADD_FLAGS(str, flags);
52639 			ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
52640 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
52641 				zend_string_release_ex(op1_str, 0);
52642 			}
52643 			if (IS_CV & (IS_TMP_VAR|IS_VAR)) {
52644 				zend_string_release_ex(op2_str, 0);
52645 			}
52646 		}
52647 		ZEND_VM_NEXT_OPCODE();
52648 	}
52649 
52650 	SAVE_OPLINE();
52651 	if (IS_CV == IS_CONST) {
52652 		op1_str = Z_STR_P(op1);
52653 	} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
52654 		op1_str = zend_string_copy(Z_STR_P(op1));
52655 	} else {
52656 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
52657 			ZVAL_UNDEFINED_OP1();
52658 		}
52659 		op1_str = zval_get_string_func(op1);
52660 	}
52661 	if (IS_CV == IS_CONST) {
52662 		op2_str = Z_STR_P(op2);
52663 	} else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
52664 		op2_str = zend_string_copy(Z_STR_P(op2));
52665 	} else {
52666 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
52667 			ZVAL_UNDEFINED_OP2();
52668 		}
52669 		op2_str = zval_get_string_func(op2);
52670 	}
52671 	do {
52672 		if (IS_CV != IS_CONST) {
52673 			if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) {
52674 				if (IS_CV == IS_CONST) {
52675 					if (UNEXPECTED(Z_REFCOUNTED_P(op2))) {
52676 						GC_ADDREF(op2_str);
52677 					}
52678 				}
52679 				ZVAL_STR(EX_VAR(opline->result.var), op2_str);
52680 				zend_string_release_ex(op1_str, 0);
52681 				break;
52682 			}
52683 		}
52684 		if (IS_CV != IS_CONST) {
52685 			if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) {
52686 				if (IS_CV == IS_CONST) {
52687 					if (UNEXPECTED(Z_REFCOUNTED_P(op1))) {
52688 						GC_ADDREF(op1_str);
52689 					}
52690 				}
52691 				ZVAL_STR(EX_VAR(opline->result.var), op1_str);
52692 				zend_string_release_ex(op2_str, 0);
52693 				break;
52694 			}
52695 		}
52696 		str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0);
52697 		memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str));
52698 		memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1);
52699 
52700 		ZSTR_COPY_CONCAT_PROPERTIES_BOTH(str, op1_str, op2_str);
52701 		ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
52702 		if (IS_CV != IS_CONST) {
52703 			zend_string_release_ex(op1_str, 0);
52704 		}
52705 		if (IS_CV != IS_CONST) {
52706 			zend_string_release_ex(op2_str, 0);
52707 		}
52708 	} while (0);
52709 
52710 
52711 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52712 }
52713 
ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52714 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52715 {
52716 	USE_OPLINE
52717 	zval *function_name;
52718 	zval *object;
52719 	zend_function *fbc;
52720 	zend_class_entry *called_scope;
52721 	zend_object *obj;
52722 	zend_execute_data *call;
52723 	uint32_t call_info;
52724 
52725 	SAVE_OPLINE();
52726 
52727 	object = EX_VAR(opline->op1.var);
52728 
52729 	if (IS_CV != IS_CONST) {
52730 		function_name = EX_VAR(opline->op2.var);
52731 	}
52732 
52733 	if (IS_CV != IS_CONST &&
52734 	    UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
52735 		do {
52736 			if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) {
52737 				function_name = Z_REFVAL_P(function_name);
52738 				if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
52739 					break;
52740 				}
52741 			} else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
52742 				ZVAL_UNDEFINED_OP2();
52743 				if (UNEXPECTED(EG(exception) != NULL)) {
52744 
52745 					HANDLE_EXCEPTION();
52746 				}
52747 			}
52748 			zend_throw_error(NULL, "Method name must be a string");
52749 
52750 
52751 			HANDLE_EXCEPTION();
52752 		} while (0);
52753 	}
52754 
52755 	if (IS_CV == IS_UNUSED) {
52756 		obj = Z_OBJ_P(object);
52757 	} else {
52758 		do {
52759 			if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
52760 				obj = Z_OBJ_P(object);
52761 			} else {
52762 				if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) {
52763 					zend_reference *ref = Z_REF_P(object);
52764 
52765 					object = &ref->val;
52766 					if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) {
52767 						obj = Z_OBJ_P(object);
52768 						if (IS_CV & IS_VAR) {
52769 							if (UNEXPECTED(GC_DELREF(ref) == 0)) {
52770 								efree_size(ref, sizeof(zend_reference));
52771 							} else {
52772 								Z_ADDREF_P(object);
52773 							}
52774 						}
52775 						break;
52776 					}
52777 				}
52778 				if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
52779 					object = ZVAL_UNDEFINED_OP1();
52780 					if (UNEXPECTED(EG(exception) != NULL)) {
52781 						if (IS_CV != IS_CONST) {
52782 
52783 						}
52784 						HANDLE_EXCEPTION();
52785 					}
52786 				}
52787 				if (IS_CV == IS_CONST) {
52788 					function_name = EX_VAR(opline->op2.var);
52789 				}
52790 				zend_invalid_method_call(object, function_name);
52791 
52792 
52793 				HANDLE_EXCEPTION();
52794 			}
52795 		} while (0);
52796 	}
52797 
52798 	called_scope = obj->ce;
52799 
52800 	if (IS_CV == IS_CONST &&
52801 	    EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) {
52802 		fbc = CACHED_PTR(opline->result.num + sizeof(void*));
52803 	} else {
52804 		zend_object *orig_obj = obj;
52805 
52806 		if (IS_CV == IS_CONST) {
52807 			function_name = EX_VAR(opline->op2.var);
52808 		}
52809 
52810 		/* First, locate the function. */
52811 		fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL));
52812 		if (UNEXPECTED(fbc == NULL)) {
52813 			if (EXPECTED(!EG(exception))) {
52814 				zend_undefined_method(obj->ce, Z_STR_P(function_name));
52815 			}
52816 
52817 			if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(orig_obj) == 0) {
52818 				zend_objects_store_del(orig_obj);
52819 			}
52820 			HANDLE_EXCEPTION();
52821 		}
52822 		if (IS_CV == IS_CONST &&
52823 		    EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
52824 		    EXPECTED(obj == orig_obj)) {
52825 			CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc);
52826 		}
52827 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) {
52828 			GC_ADDREF(obj); /* For $this pointer */
52829 			if (GC_DELREF(orig_obj) == 0) {
52830 				zend_objects_store_del(orig_obj);
52831 			}
52832 		}
52833 		if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
52834 			init_func_run_time_cache(&fbc->op_array);
52835 		}
52836 	}
52837 
52838 	if (IS_CV != IS_CONST) {
52839 
52840 	}
52841 
52842 	call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS;
52843 	if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
52844 		if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && GC_DELREF(obj) == 0) {
52845 			zend_objects_store_del(obj);
52846 			if (UNEXPECTED(EG(exception))) {
52847 				HANDLE_EXCEPTION();
52848 			}
52849 		}
52850 		/* call static method */
52851 		obj = (zend_object*)called_scope;
52852 		call_info = ZEND_CALL_NESTED_FUNCTION;
52853 	} else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) {
52854 		if (IS_CV == IS_CV) {
52855 			GC_ADDREF(obj); /* For $this pointer */
52856 		}
52857 		/* CV may be changed indirectly (e.g. when it's a reference) */
52858 		call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_HAS_THIS | ZEND_CALL_RELEASE_THIS;
52859 	}
52860 
52861 	call = zend_vm_stack_push_call_frame(call_info,
52862 		fbc, opline->extended_value, obj);
52863 	call->prev_execute_data = EX(call);
52864 	EX(call) = call;
52865 
52866 	ZEND_VM_NEXT_OPCODE();
52867 }
52868 
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52869 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52870 {
52871 	USE_OPLINE
52872 	zval *expr_ptr, new_expr;
52873 
52874 	SAVE_OPLINE();
52875 	if ((IS_CV == IS_VAR || IS_CV == IS_CV) &&
52876 	    UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
52877 		expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
52878 		if (Z_ISREF_P(expr_ptr)) {
52879 			Z_ADDREF_P(expr_ptr);
52880 		} else {
52881 			ZVAL_MAKE_REF_EX(expr_ptr, 2);
52882 		}
52883 
52884 	} else {
52885 		expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
52886 		if (IS_CV == IS_TMP_VAR) {
52887 			/* pass */
52888 		} else if (IS_CV == IS_CONST) {
52889 			Z_TRY_ADDREF_P(expr_ptr);
52890 		} else if (IS_CV == IS_CV) {
52891 			ZVAL_DEREF(expr_ptr);
52892 			Z_TRY_ADDREF_P(expr_ptr);
52893 		} else /* if (IS_CV == IS_VAR) */ {
52894 			if (UNEXPECTED(Z_ISREF_P(expr_ptr))) {
52895 				zend_refcounted *ref = Z_COUNTED_P(expr_ptr);
52896 
52897 				expr_ptr = Z_REFVAL_P(expr_ptr);
52898 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
52899 					ZVAL_COPY_VALUE(&new_expr, expr_ptr);
52900 					expr_ptr = &new_expr;
52901 					efree_size(ref, sizeof(zend_reference));
52902 				} else if (Z_OPT_REFCOUNTED_P(expr_ptr)) {
52903 					Z_ADDREF_P(expr_ptr);
52904 				}
52905 			}
52906 		}
52907 	}
52908 
52909 	if (IS_CV != IS_UNUSED) {
52910 		zval *offset = EX_VAR(opline->op2.var);
52911 		zend_string *str;
52912 		zend_ulong hval;
52913 
52914 add_again:
52915 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
52916 			str = Z_STR_P(offset);
52917 			if (IS_CV != IS_CONST) {
52918 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
52919 					goto num_index;
52920 				}
52921 			}
52922 str_index:
52923 			zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr);
52924 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
52925 			hval = Z_LVAL_P(offset);
52926 num_index:
52927 			zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr);
52928 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
52929 			offset = Z_REFVAL_P(offset);
52930 			goto add_again;
52931 		} else if (Z_TYPE_P(offset) == IS_NULL) {
52932 			str = ZSTR_EMPTY_ALLOC();
52933 			goto str_index;
52934 		} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
52935 			hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
52936 			goto num_index;
52937 		} else if (Z_TYPE_P(offset) == IS_FALSE) {
52938 			hval = 0;
52939 			goto num_index;
52940 		} else if (Z_TYPE_P(offset) == IS_TRUE) {
52941 			hval = 1;
52942 			goto num_index;
52943 		} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
52944 			zend_use_resource_as_offset(offset);
52945 			hval = Z_RES_HANDLE_P(offset);
52946 			goto num_index;
52947 		} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
52948 			ZVAL_UNDEFINED_OP2();
52949 			str = ZSTR_EMPTY_ALLOC();
52950 			goto str_index;
52951 		} else {
52952 			zend_illegal_array_offset_access(offset);
52953 			zval_ptr_dtor_nogc(expr_ptr);
52954 		}
52955 
52956 	} else {
52957 		if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) {
52958 			zend_cannot_add_element();
52959 			zval_ptr_dtor_nogc(expr_ptr);
52960 		}
52961 	}
52962 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
52963 }
52964 
ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52965 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52966 {
52967 	zval *array;
52968 	uint32_t size;
52969 	USE_OPLINE
52970 
52971 	array = EX_VAR(opline->result.var);
52972 	if (IS_CV != IS_UNUSED) {
52973 		size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT;
52974 		ZVAL_ARR(array, zend_new_array(size));
52975 		/* Explicitly initialize array as not-packed if flag is set */
52976 		if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) {
52977 			zend_hash_real_init_mixed(Z_ARRVAL_P(array));
52978 		}
52979 		ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
52980 	} else {
52981 		ZVAL_ARR(array, zend_new_array(0));
52982 		ZEND_VM_NEXT_OPCODE();
52983 	}
52984 }
52985 
ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)52986 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
52987 {
52988 	USE_OPLINE
52989 	zval *container;
52990 	zval *offset;
52991 	zend_ulong hval;
52992 	zend_string *key;
52993 
52994 	SAVE_OPLINE();
52995 	container = EX_VAR(opline->op1.var);
52996 	offset = EX_VAR(opline->op2.var);
52997 
52998 	do {
52999 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
53000 			HashTable *ht;
53001 
53002 unset_dim_array:
53003 			SEPARATE_ARRAY(container);
53004 			ht = Z_ARRVAL_P(container);
53005 offset_again:
53006 			if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
53007 				key = Z_STR_P(offset);
53008 				if (IS_CV != IS_CONST) {
53009 					if (ZEND_HANDLE_NUMERIC(key, hval)) {
53010 						goto num_index_dim;
53011 					}
53012 				}
53013 str_index_dim:
53014 				ZEND_ASSERT(ht != &EG(symbol_table));
53015 				zend_hash_del(ht, key);
53016 			} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
53017 				hval = Z_LVAL_P(offset);
53018 num_index_dim:
53019 				zend_hash_index_del(ht, hval);
53020 			} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
53021 				offset = Z_REFVAL_P(offset);
53022 				goto offset_again;
53023 			} else if (Z_TYPE_P(offset) == IS_DOUBLE) {
53024 				hval = zend_dval_to_lval_safe(Z_DVAL_P(offset));
53025 				goto num_index_dim;
53026 			} else if (Z_TYPE_P(offset) == IS_NULL) {
53027 				key = ZSTR_EMPTY_ALLOC();
53028 				goto str_index_dim;
53029 			} else if (Z_TYPE_P(offset) == IS_FALSE) {
53030 				hval = 0;
53031 				goto num_index_dim;
53032 			} else if (Z_TYPE_P(offset) == IS_TRUE) {
53033 				hval = 1;
53034 				goto num_index_dim;
53035 			} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
53036 				zend_use_resource_as_offset(offset);
53037 				hval = Z_RES_HANDLE_P(offset);
53038 				goto num_index_dim;
53039 			} else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
53040 				ZVAL_UNDEFINED_OP2();
53041 				key = ZSTR_EMPTY_ALLOC();
53042 				goto str_index_dim;
53043 			} else {
53044 				zend_illegal_array_offset_unset(offset);
53045 			}
53046 			break;
53047 		} else if (Z_ISREF_P(container)) {
53048 			container = Z_REFVAL_P(container);
53049 			if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
53050 				goto unset_dim_array;
53051 			}
53052 		}
53053 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
53054 			container = ZVAL_UNDEFINED_OP1();
53055 		}
53056 		if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
53057 			offset = ZVAL_UNDEFINED_OP2();
53058 		}
53059 		if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
53060 			if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
53061 				offset++;
53062 			}
53063 			Z_OBJ_HT_P(container)->unset_dimension(Z_OBJ_P(container), offset);
53064 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
53065 			zend_throw_error(NULL, "Cannot unset string offsets");
53066 		} else if (UNEXPECTED(Z_TYPE_P(container) > IS_FALSE)) {
53067 			zend_throw_error(NULL, "Cannot unset offset in a non-array variable");
53068 		} else if (UNEXPECTED(Z_TYPE_P(container) == IS_FALSE)) {
53069 			zend_false_to_array_deprecated();
53070 		}
53071 	} while (0);
53072 
53073 
53074 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53075 }
53076 
ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53077 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53078 {
53079 	USE_OPLINE
53080 	zval *container;
53081 	zval *offset;
53082 	zend_string *name, *tmp_name;
53083 
53084 	SAVE_OPLINE();
53085 	container = EX_VAR(opline->op1.var);
53086 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
53087 
53088 	do {
53089 		if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
53090 			if (Z_ISREF_P(container)) {
53091 				container = Z_REFVAL_P(container);
53092 				if (Z_TYPE_P(container) != IS_OBJECT) {
53093 					if (IS_CV == IS_CV
53094 					 && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
53095 						ZVAL_UNDEFINED_OP1();
53096 					}
53097 					break;
53098 				}
53099 			} else {
53100 				break;
53101 			}
53102 		}
53103 		if (IS_CV == IS_CONST) {
53104 			name = Z_STR_P(offset);
53105 		} else {
53106 			name = zval_try_get_tmp_string(offset, &tmp_name);
53107 			if (UNEXPECTED(!name)) {
53108 				break;
53109 			}
53110 		}
53111 		Z_OBJ_HT_P(container)->unset_property(Z_OBJ_P(container), name, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL));
53112 		if (IS_CV != IS_CONST) {
53113 			zend_tmp_string_release(tmp_name);
53114 		}
53115 	} while (0);
53116 
53117 
53118 	ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
53119 }
53120 
ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53121 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53122 {
53123 	USE_OPLINE
53124 	zval *container;
53125 	bool result;
53126 	zend_ulong hval;
53127 	zval *offset;
53128 
53129 	SAVE_OPLINE();
53130 	container = EX_VAR(opline->op1.var);
53131 	offset = EX_VAR(opline->op2.var);
53132 
53133 	if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
53134 		HashTable *ht;
53135 		zval *value;
53136 		zend_string *str;
53137 
53138 isset_dim_obj_array:
53139 		ht = Z_ARRVAL_P(container);
53140 isset_again:
53141 		if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
53142 			str = Z_STR_P(offset);
53143 			if (IS_CV != IS_CONST) {
53144 				if (ZEND_HANDLE_NUMERIC(str, hval)) {
53145 					goto num_index_prop;
53146 				}
53147 			}
53148 			value = zend_hash_find_ex(ht, str, IS_CV == IS_CONST);
53149 		} else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
53150 			hval = Z_LVAL_P(offset);
53151 num_index_prop:
53152 			value = zend_hash_index_find(ht, hval);
53153 		} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) {
53154 			offset = Z_REFVAL_P(offset);
53155 			goto isset_again;
53156 		} else {
53157 			value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC);
53158 			if (UNEXPECTED(EG(exception))) {
53159 				result = 0;
53160 				goto isset_dim_obj_exit;
53161 			}
53162 		}
53163 
53164 		if (!(opline->extended_value & ZEND_ISEMPTY)) {
53165 			/* > IS_NULL means not IS_UNDEF and not IS_NULL */
53166 			result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
53167 			    (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
53168 
53169 			if (IS_CV & (IS_CONST|IS_CV)) {
53170 				/* avoid exception check */
53171 
53172 				ZEND_VM_SMART_BRANCH(result, 0);
53173 			}
53174 		} else {
53175 			result = (value == NULL || !i_zend_is_true(value));
53176 		}
53177 		goto isset_dim_obj_exit;
53178 	} else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) {
53179 		container = Z_REFVAL_P(container);
53180 		if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
53181 			goto isset_dim_obj_array;
53182 		}
53183 	}
53184 
53185 	if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) {
53186 		offset++;
53187 	}
53188 	if (!(opline->extended_value & ZEND_ISEMPTY)) {
53189 		result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC);
53190 	} else {
53191 		result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC);
53192 	}
53193 
53194 isset_dim_obj_exit:
53195 
53196 
53197 	ZEND_VM_SMART_BRANCH(result, 1);
53198 }
53199 
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53200 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53201 {
53202 	USE_OPLINE
53203 	zval *container;
53204 	int result;
53205 	zval *offset;
53206 	zend_string *name, *tmp_name;
53207 
53208 	SAVE_OPLINE();
53209 	container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
53210 	offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
53211 
53212 	if (IS_CV == IS_CONST ||
53213 	    (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) {
53214 		if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) {
53215 			container = Z_REFVAL_P(container);
53216 			if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
53217 				result = (opline->extended_value & ZEND_ISEMPTY);
53218 				goto isset_object_finish;
53219 			}
53220 		} else {
53221 			result = (opline->extended_value & ZEND_ISEMPTY);
53222 			goto isset_object_finish;
53223 		}
53224 	}
53225 
53226 	if (IS_CV == IS_CONST) {
53227 		name = Z_STR_P(offset);
53228 	} else {
53229 		name = zval_try_get_tmp_string(offset, &tmp_name);
53230 		if (UNEXPECTED(!name)) {
53231 			result = 0;
53232 			goto isset_object_finish;
53233 		}
53234 	}
53235 
53236 	result =
53237 		(opline->extended_value & ZEND_ISEMPTY) ^
53238 		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));
53239 
53240 	if (IS_CV != IS_CONST) {
53241 		zend_tmp_string_release(tmp_name);
53242 	}
53243 
53244 isset_object_finish:
53245 
53246 
53247 	ZEND_VM_SMART_BRANCH(result, 1);
53248 }
53249 
ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53250 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53251 {
53252 	USE_OPLINE
53253 
53254 	zval *key, *subject;
53255 	HashTable *ht;
53256 	bool result;
53257 
53258 	SAVE_OPLINE();
53259 
53260 	key = EX_VAR(opline->op1.var);
53261 	subject = EX_VAR(opline->op2.var);
53262 
53263 	if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
53264 array_key_exists_array:
53265 		ht = Z_ARRVAL_P(subject);
53266 		result = zend_array_key_exists_fast(ht, key OPLINE_CC EXECUTE_DATA_CC);
53267 	} else {
53268 		if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(subject))) {
53269 			subject = Z_REFVAL_P(subject);
53270 			if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
53271 				goto array_key_exists_array;
53272 			}
53273 		}
53274 		zend_array_key_exists_error(subject, key OPLINE_CC EXECUTE_DATA_CC);
53275 		result = 0;
53276 	}
53277 
53278 
53279 	ZEND_VM_SMART_BRANCH(result, 1);
53280 }
53281 
53282 /* No specialization for op_types (CONST|TMPVAR|UNUSED|CV, ANY) */
ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53283 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53284 {
53285 	USE_OPLINE
53286 
53287 	zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
53288 
53289 	SAVE_OPLINE();
53290 	if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) {
53291 		ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
53292 	}
53293 
53294 	/* Destroy the previously yielded value */
53295 	zval_ptr_dtor(&generator->value);
53296 
53297 	/* Destroy the previously yielded key */
53298 	zval_ptr_dtor(&generator->key);
53299 
53300 	/* Set the new yielded value */
53301 	if (IS_CV != IS_UNUSED) {
53302 		if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) {
53303 			/* Constants and temporary variables aren't yieldable by reference,
53304 			 * but we still allow them with a notice. */
53305 			if (IS_CV & (IS_CONST|IS_TMP_VAR)) {
53306 				zval *value;
53307 
53308 				zend_error(E_NOTICE, "Only variable references should be yielded by reference");
53309 
53310 				value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
53311 				ZVAL_COPY_VALUE(&generator->value, value);
53312 				if (IS_CV == IS_CONST) {
53313 					if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
53314 						Z_ADDREF(generator->value);
53315 					}
53316 				}
53317 			} else {
53318 				zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
53319 
53320 				/* If a function call result is yielded and the function did
53321 				 * not return by reference we throw a notice. */
53322 				do {
53323 					if (IS_CV == IS_VAR) {
53324 						ZEND_ASSERT(value_ptr != &EG(uninitialized_zval));
53325 						if (opline->extended_value == ZEND_RETURNS_FUNCTION
53326 						 && !Z_ISREF_P(value_ptr)) {
53327 							zend_error(E_NOTICE, "Only variable references should be yielded by reference");
53328 							ZVAL_COPY(&generator->value, value_ptr);
53329 							break;
53330 						}
53331 					}
53332 					if (Z_ISREF_P(value_ptr)) {
53333 						Z_ADDREF_P(value_ptr);
53334 					} else {
53335 						ZVAL_MAKE_REF_EX(value_ptr, 2);
53336 					}
53337 					ZVAL_REF(&generator->value, Z_REF_P(value_ptr));
53338 				} while (0);
53339 
53340 			}
53341 		} else {
53342 			zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
53343 
53344 			/* Consts, temporary variables and references need copying */
53345 			if (IS_CV == IS_CONST) {
53346 				ZVAL_COPY_VALUE(&generator->value, value);
53347 				if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) {
53348 					Z_ADDREF(generator->value);
53349 				}
53350 			} else if (IS_CV == IS_TMP_VAR) {
53351 				ZVAL_COPY_VALUE(&generator->value, value);
53352 			} else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
53353 				ZVAL_COPY(&generator->value, Z_REFVAL_P(value));
53354 
53355 			} else {
53356 				ZVAL_COPY_VALUE(&generator->value, value);
53357 				if (IS_CV == IS_CV) {
53358 					if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value);
53359 				}
53360 			}
53361 		}
53362 	} else {
53363 		/* If no value was specified yield null */
53364 		ZVAL_NULL(&generator->value);
53365 	}
53366 
53367 	/* Set the new yielded key */
53368 	if (IS_CV != IS_UNUSED) {
53369 		zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
53370 		if ((IS_CV & (IS_CV|IS_VAR)) && UNEXPECTED(Z_TYPE_P(key) == IS_REFERENCE)) {
53371 			key = Z_REFVAL_P(key);
53372 		}
53373 		ZVAL_COPY(&generator->key, key);
53374 
53375 		if (Z_TYPE(generator->key) == IS_LONG
53376 		    && Z_LVAL(generator->key) > generator->largest_used_integer_key
53377 		) {
53378 			generator->largest_used_integer_key = Z_LVAL(generator->key);
53379 		}
53380 	} else {
53381 		/* If no key was specified we use auto-increment keys */
53382 		generator->largest_used_integer_key++;
53383 		ZVAL_LONG(&generator->key, generator->largest_used_integer_key);
53384 	}
53385 
53386 	if (RETURN_VALUE_USED(opline)) {
53387 		/* If the return value of yield is used set the send
53388 		 * target and initialize it to NULL */
53389 		generator->send_target = EX_VAR(opline->result.var);
53390 		ZVAL_NULL(generator->send_target);
53391 	} else {
53392 		generator->send_target = NULL;
53393 	}
53394 
53395 	/* We increment to the next op, so we are at the correct position when the
53396 	 * generator is resumed. */
53397 	ZEND_VM_INC_OPCODE();
53398 
53399 	/* The GOTO VM uses a local opline variable. We need to set the opline
53400 	 * variable in execute_data so we don't resume at an old position. */
53401 	SAVE_OPLINE();
53402 
53403 	ZEND_VM_RETURN();
53404 }
53405 
ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53406 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53407 {
53408 	/* This is declared below the specializations for MAY_BE_LONG/MAY_BE_DOUBLE so those will be used instead if possible. */
53409 	/* This optimizes $x === SOME_CONST_EXPR and $x === $y for non-refs and non-undef, which can't throw. */
53410 	/* (Infinite recursion when comparing arrays is an uncatchable fatal error) */
53411 	USE_OPLINE
53412 	zval *op1, *op2;
53413 	bool result;
53414 
53415 	op1 = EX_VAR(opline->op1.var);
53416 	op2 = EX_VAR(opline->op2.var);
53417 	result = fast_is_identical_function(op1, op2);
53418 	/* Free is a no-op for const/cv */
53419 	ZEND_VM_SMART_BRANCH(result, 0);
53420 }
53421 
ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53422 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53423 {
53424 	USE_OPLINE
53425 	zval *op1, *op2;
53426 	bool result;
53427 
53428 	op1 = EX_VAR(opline->op1.var);
53429 	op2 = EX_VAR(opline->op2.var);
53430 	result = fast_is_identical_function(op1, op2);
53431 	/* Free is a no-op for const/cv */
53432 	ZEND_VM_SMART_BRANCH(!result, 0);
53433 }
53434 
ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)53435 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
53436 {
53437 	USE_OPLINE
53438 
53439 	SAVE_OPLINE();
53440 	zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type);
53441 	ZEND_VM_NEXT_OPCODE(); /* Never reached */
53442 }
53443 
53444 
53445 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
53446 # undef ZEND_VM_TAIL_CALL
53447 # undef ZEND_VM_CONTINUE
53448 # undef ZEND_VM_RETURN
53449 
53450 # define ZEND_VM_TAIL_CALL(call) call; ZEND_VM_CONTINUE()
53451 # define ZEND_VM_CONTINUE()      HYBRID_NEXT()
53452 # define ZEND_VM_RETURN()        goto HYBRID_HALT_LABEL
53453 #endif
53454 
53455 
53456 #if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
53457 # pragma GCC push_options
53458 # pragma GCC optimize("no-gcse")
53459 # pragma GCC optimize("no-ivopts")
53460 #endif
execute_ex(zend_execute_data * ex)53461 ZEND_API void execute_ex(zend_execute_data *ex)
53462 {
53463 	DCL_OPLINE
53464 
53465 #if defined(ZEND_VM_IP_GLOBAL_REG) || defined(ZEND_VM_FP_GLOBAL_REG)
53466 	struct {
53467 #ifdef ZEND_VM_IP_GLOBAL_REG
53468 		const zend_op *orig_opline;
53469 #endif
53470 #ifdef ZEND_VM_FP_GLOBAL_REG
53471 		zend_execute_data *orig_execute_data;
53472 #ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE
53473 		char hybrid_jit_red_zone[ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE];
53474 #endif
53475 #endif
53476 	} vm_stack_data;
53477 #endif
53478 #ifdef ZEND_VM_IP_GLOBAL_REG
53479 	vm_stack_data.orig_opline = opline;
53480 #endif
53481 #ifdef ZEND_VM_FP_GLOBAL_REG
53482 	vm_stack_data.orig_execute_data = execute_data;
53483 	execute_data = ex;
53484 #else
53485 	zend_execute_data *execute_data = ex;
53486 #endif
53487 
53488 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
53489 	if (UNEXPECTED(execute_data == NULL)) {
53490 		static const void * const labels[] = {
53491 			(void*)&&ZEND_NOP_SPEC_LABEL,
53492 			(void*)&&ZEND_ADD_SPEC_CONST_CONST_LABEL,
53493 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
53494 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
53495 			(void*)&&ZEND_NULL_LABEL,
53496 			(void*)&&ZEND_ADD_SPEC_CONST_TMPVARCV_LABEL,
53497 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
53498 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53499 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53500 			(void*)&&ZEND_NULL_LABEL,
53501 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53502 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
53503 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53504 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53505 			(void*)&&ZEND_NULL_LABEL,
53506 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53507 			(void*)&&ZEND_NULL_LABEL,
53508 			(void*)&&ZEND_NULL_LABEL,
53509 			(void*)&&ZEND_NULL_LABEL,
53510 			(void*)&&ZEND_NULL_LABEL,
53511 			(void*)&&ZEND_NULL_LABEL,
53512 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_CONST_LABEL,
53513 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53514 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53515 			(void*)&&ZEND_NULL_LABEL,
53516 			(void*)&&ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53517 			(void*)&&ZEND_SUB_SPEC_CONST_CONST_LABEL,
53518 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
53519 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
53520 			(void*)&&ZEND_NULL_LABEL,
53521 			(void*)&&ZEND_SUB_SPEC_CONST_TMPVARCV_LABEL,
53522 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
53523 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53524 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53525 			(void*)&&ZEND_NULL_LABEL,
53526 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53527 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
53528 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53529 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53530 			(void*)&&ZEND_NULL_LABEL,
53531 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53532 			(void*)&&ZEND_NULL_LABEL,
53533 			(void*)&&ZEND_NULL_LABEL,
53534 			(void*)&&ZEND_NULL_LABEL,
53535 			(void*)&&ZEND_NULL_LABEL,
53536 			(void*)&&ZEND_NULL_LABEL,
53537 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_CONST_LABEL,
53538 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53539 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53540 			(void*)&&ZEND_NULL_LABEL,
53541 			(void*)&&ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_LABEL,
53542 			(void*)&&ZEND_MUL_SPEC_CONST_CONST_LABEL,
53543 			(void*)&&ZEND_NULL_LABEL,
53544 			(void*)&&ZEND_NULL_LABEL,
53545 			(void*)&&ZEND_NULL_LABEL,
53546 			(void*)&&ZEND_NULL_LABEL,
53547 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
53548 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53549 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53550 			(void*)&&ZEND_NULL_LABEL,
53551 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53552 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
53553 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53554 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53555 			(void*)&&ZEND_NULL_LABEL,
53556 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53557 			(void*)&&ZEND_NULL_LABEL,
53558 			(void*)&&ZEND_NULL_LABEL,
53559 			(void*)&&ZEND_NULL_LABEL,
53560 			(void*)&&ZEND_NULL_LABEL,
53561 			(void*)&&ZEND_NULL_LABEL,
53562 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_CONST_LABEL,
53563 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53564 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53565 			(void*)&&ZEND_NULL_LABEL,
53566 			(void*)&&ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53567 			(void*)&&ZEND_DIV_SPEC_CONST_CONST_LABEL,
53568 			(void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
53569 			(void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL,
53570 			(void*)&&ZEND_NULL_LABEL,
53571 			(void*)&&ZEND_DIV_SPEC_CONST_CV_LABEL,
53572 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
53573 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
53574 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
53575 			(void*)&&ZEND_NULL_LABEL,
53576 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
53577 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL,
53578 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
53579 			(void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL,
53580 			(void*)&&ZEND_NULL_LABEL,
53581 			(void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL,
53582 			(void*)&&ZEND_NULL_LABEL,
53583 			(void*)&&ZEND_NULL_LABEL,
53584 			(void*)&&ZEND_NULL_LABEL,
53585 			(void*)&&ZEND_NULL_LABEL,
53586 			(void*)&&ZEND_NULL_LABEL,
53587 			(void*)&&ZEND_DIV_SPEC_CV_CONST_LABEL,
53588 			(void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
53589 			(void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL,
53590 			(void*)&&ZEND_NULL_LABEL,
53591 			(void*)&&ZEND_DIV_SPEC_CV_CV_LABEL,
53592 			(void*)&&ZEND_MOD_SPEC_CONST_CONST_LABEL,
53593 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
53594 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
53595 			(void*)&&ZEND_NULL_LABEL,
53596 			(void*)&&ZEND_MOD_SPEC_CONST_TMPVARCV_LABEL,
53597 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
53598 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53599 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53600 			(void*)&&ZEND_NULL_LABEL,
53601 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53602 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_CONST_LABEL,
53603 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53604 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53605 			(void*)&&ZEND_NULL_LABEL,
53606 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_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_MOD_SPEC_TMPVARCV_CONST_LABEL,
53613 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53614 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53615 			(void*)&&ZEND_NULL_LABEL,
53616 			(void*)&&ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_LABEL,
53617 			(void*)&&ZEND_SL_SPEC_CONST_CONST_LABEL,
53618 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
53619 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
53620 			(void*)&&ZEND_NULL_LABEL,
53621 			(void*)&&ZEND_SL_SPEC_CONST_TMPVARCV_LABEL,
53622 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
53623 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53624 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53625 			(void*)&&ZEND_NULL_LABEL,
53626 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53627 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
53628 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53629 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53630 			(void*)&&ZEND_NULL_LABEL,
53631 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53632 			(void*)&&ZEND_NULL_LABEL,
53633 			(void*)&&ZEND_NULL_LABEL,
53634 			(void*)&&ZEND_NULL_LABEL,
53635 			(void*)&&ZEND_NULL_LABEL,
53636 			(void*)&&ZEND_NULL_LABEL,
53637 			(void*)&&ZEND_SL_SPEC_TMPVARCV_CONST_LABEL,
53638 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53639 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53640 			(void*)&&ZEND_NULL_LABEL,
53641 			(void*)&&ZEND_SL_SPEC_TMPVARCV_TMPVARCV_LABEL,
53642 			(void*)&&ZEND_SR_SPEC_CONST_CONST_LABEL,
53643 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
53644 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
53645 			(void*)&&ZEND_NULL_LABEL,
53646 			(void*)&&ZEND_SR_SPEC_CONST_TMPVARCV_LABEL,
53647 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
53648 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53649 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53650 			(void*)&&ZEND_NULL_LABEL,
53651 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53652 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
53653 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53654 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53655 			(void*)&&ZEND_NULL_LABEL,
53656 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53657 			(void*)&&ZEND_NULL_LABEL,
53658 			(void*)&&ZEND_NULL_LABEL,
53659 			(void*)&&ZEND_NULL_LABEL,
53660 			(void*)&&ZEND_NULL_LABEL,
53661 			(void*)&&ZEND_NULL_LABEL,
53662 			(void*)&&ZEND_SR_SPEC_TMPVARCV_CONST_LABEL,
53663 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53664 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53665 			(void*)&&ZEND_NULL_LABEL,
53666 			(void*)&&ZEND_SR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53667 			(void*)&&ZEND_NULL_LABEL,
53668 			(void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
53669 			(void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL,
53670 			(void*)&&ZEND_NULL_LABEL,
53671 			(void*)&&ZEND_CONCAT_SPEC_CONST_CV_LABEL,
53672 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
53673 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
53674 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
53675 			(void*)&&ZEND_NULL_LABEL,
53676 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
53677 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL,
53678 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
53679 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
53680 			(void*)&&ZEND_NULL_LABEL,
53681 			(void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL,
53682 			(void*)&&ZEND_NULL_LABEL,
53683 			(void*)&&ZEND_NULL_LABEL,
53684 			(void*)&&ZEND_NULL_LABEL,
53685 			(void*)&&ZEND_NULL_LABEL,
53686 			(void*)&&ZEND_NULL_LABEL,
53687 			(void*)&&ZEND_CONCAT_SPEC_CV_CONST_LABEL,
53688 			(void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
53689 			(void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL,
53690 			(void*)&&ZEND_NULL_LABEL,
53691 			(void*)&&ZEND_CONCAT_SPEC_CV_CV_LABEL,
53692 			(void*)&&ZEND_BW_OR_SPEC_CONST_CONST_LABEL,
53693 			(void*)&&ZEND_NULL_LABEL,
53694 			(void*)&&ZEND_NULL_LABEL,
53695 			(void*)&&ZEND_NULL_LABEL,
53696 			(void*)&&ZEND_NULL_LABEL,
53697 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
53698 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53699 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53700 			(void*)&&ZEND_NULL_LABEL,
53701 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53702 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
53703 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53704 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53705 			(void*)&&ZEND_NULL_LABEL,
53706 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53707 			(void*)&&ZEND_NULL_LABEL,
53708 			(void*)&&ZEND_NULL_LABEL,
53709 			(void*)&&ZEND_NULL_LABEL,
53710 			(void*)&&ZEND_NULL_LABEL,
53711 			(void*)&&ZEND_NULL_LABEL,
53712 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_CONST_LABEL,
53713 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53714 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53715 			(void*)&&ZEND_NULL_LABEL,
53716 			(void*)&&ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53717 			(void*)&&ZEND_BW_AND_SPEC_CONST_CONST_LABEL,
53718 			(void*)&&ZEND_NULL_LABEL,
53719 			(void*)&&ZEND_NULL_LABEL,
53720 			(void*)&&ZEND_NULL_LABEL,
53721 			(void*)&&ZEND_NULL_LABEL,
53722 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
53723 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
53724 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
53725 			(void*)&&ZEND_NULL_LABEL,
53726 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
53727 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
53728 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
53729 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
53730 			(void*)&&ZEND_NULL_LABEL,
53731 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
53732 			(void*)&&ZEND_NULL_LABEL,
53733 			(void*)&&ZEND_NULL_LABEL,
53734 			(void*)&&ZEND_NULL_LABEL,
53735 			(void*)&&ZEND_NULL_LABEL,
53736 			(void*)&&ZEND_NULL_LABEL,
53737 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_CONST_LABEL,
53738 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
53739 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
53740 			(void*)&&ZEND_NULL_LABEL,
53741 			(void*)&&ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_LABEL,
53742 			(void*)&&ZEND_BW_XOR_SPEC_CONST_CONST_LABEL,
53743 			(void*)&&ZEND_NULL_LABEL,
53744 			(void*)&&ZEND_NULL_LABEL,
53745 			(void*)&&ZEND_NULL_LABEL,
53746 			(void*)&&ZEND_NULL_LABEL,
53747 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
53748 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53749 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53750 			(void*)&&ZEND_NULL_LABEL,
53751 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53752 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
53753 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53754 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53755 			(void*)&&ZEND_NULL_LABEL,
53756 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53757 			(void*)&&ZEND_NULL_LABEL,
53758 			(void*)&&ZEND_NULL_LABEL,
53759 			(void*)&&ZEND_NULL_LABEL,
53760 			(void*)&&ZEND_NULL_LABEL,
53761 			(void*)&&ZEND_NULL_LABEL,
53762 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_CONST_LABEL,
53763 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53764 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53765 			(void*)&&ZEND_NULL_LABEL,
53766 			(void*)&&ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_LABEL,
53767 			(void*)&&ZEND_POW_SPEC_CONST_CONST_LABEL,
53768 			(void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
53769 			(void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL,
53770 			(void*)&&ZEND_NULL_LABEL,
53771 			(void*)&&ZEND_POW_SPEC_CONST_CV_LABEL,
53772 			(void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
53773 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
53774 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
53775 			(void*)&&ZEND_NULL_LABEL,
53776 			(void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
53777 			(void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL,
53778 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
53779 			(void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL,
53780 			(void*)&&ZEND_NULL_LABEL,
53781 			(void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL,
53782 			(void*)&&ZEND_NULL_LABEL,
53783 			(void*)&&ZEND_NULL_LABEL,
53784 			(void*)&&ZEND_NULL_LABEL,
53785 			(void*)&&ZEND_NULL_LABEL,
53786 			(void*)&&ZEND_NULL_LABEL,
53787 			(void*)&&ZEND_POW_SPEC_CV_CONST_LABEL,
53788 			(void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
53789 			(void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL,
53790 			(void*)&&ZEND_NULL_LABEL,
53791 			(void*)&&ZEND_POW_SPEC_CV_CV_LABEL,
53792 			(void*)&&ZEND_BW_NOT_SPEC_CONST_LABEL,
53793 			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
53794 			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
53795 			(void*)&&ZEND_NULL_LABEL,
53796 			(void*)&&ZEND_BW_NOT_SPEC_TMPVARCV_LABEL,
53797 			(void*)&&ZEND_BOOL_NOT_SPEC_CONST_LABEL,
53798 			(void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
53799 			(void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL,
53800 			(void*)&&ZEND_NULL_LABEL,
53801 			(void*)&&ZEND_BOOL_NOT_SPEC_CV_LABEL,
53802 			(void*)&&ZEND_BOOL_XOR_SPEC_CONST_CONST_LABEL,
53803 			(void*)&&ZEND_NULL_LABEL,
53804 			(void*)&&ZEND_NULL_LABEL,
53805 			(void*)&&ZEND_NULL_LABEL,
53806 			(void*)&&ZEND_NULL_LABEL,
53807 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
53808 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
53809 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
53810 			(void*)&&ZEND_NULL_LABEL,
53811 			(void*)&&ZEND_NULL_LABEL,
53812 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL,
53813 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
53814 			(void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL,
53815 			(void*)&&ZEND_NULL_LABEL,
53816 			(void*)&&ZEND_NULL_LABEL,
53817 			(void*)&&ZEND_NULL_LABEL,
53818 			(void*)&&ZEND_NULL_LABEL,
53819 			(void*)&&ZEND_NULL_LABEL,
53820 			(void*)&&ZEND_NULL_LABEL,
53821 			(void*)&&ZEND_NULL_LABEL,
53822 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_CONST_LABEL,
53823 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
53824 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL,
53825 			(void*)&&ZEND_NULL_LABEL,
53826 			(void*)&&ZEND_BOOL_XOR_SPEC_CV_CV_LABEL,
53827 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CONST_CONST_LABEL,
53828 			(void*)&&ZEND_NULL_LABEL,
53829 			(void*)&&ZEND_NULL_LABEL,
53830 			(void*)&&ZEND_NULL_LABEL,
53831 			(void*)&&ZEND_NULL_LABEL,
53832 			(void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_CONST_LABEL,
53833 			(void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_TMP_LABEL,
53834 			(void*)&&ZEND_NULL_LABEL,
53835 			(void*)&&ZEND_NULL_LABEL,
53836 			(void*)&&ZEND_NULL_LABEL,
53837 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_CONST_LABEL,
53838 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_TMP_LABEL,
53839 			(void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_VAR_LABEL,
53840 			(void*)&&ZEND_NULL_LABEL,
53841 			(void*)&&ZEND_NULL_LABEL,
53842 			(void*)&&ZEND_NULL_LABEL,
53843 			(void*)&&ZEND_NULL_LABEL,
53844 			(void*)&&ZEND_NULL_LABEL,
53845 			(void*)&&ZEND_NULL_LABEL,
53846 			(void*)&&ZEND_NULL_LABEL,
53847 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CONST_LABEL,
53848 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_TMP_LABEL,
53849 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_VAR_LABEL,
53850 			(void*)&&ZEND_NULL_LABEL,
53851 			(void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CV_LABEL,
53852 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_LABEL,
53853 			(void*)&&ZEND_NULL_LABEL,
53854 			(void*)&&ZEND_NULL_LABEL,
53855 			(void*)&&ZEND_NULL_LABEL,
53856 			(void*)&&ZEND_NULL_LABEL,
53857 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_LABEL,
53858 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_LABEL,
53859 			(void*)&&ZEND_NULL_LABEL,
53860 			(void*)&&ZEND_NULL_LABEL,
53861 			(void*)&&ZEND_NULL_LABEL,
53862 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_LABEL,
53863 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_LABEL,
53864 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_LABEL,
53865 			(void*)&&ZEND_NULL_LABEL,
53866 			(void*)&&ZEND_NULL_LABEL,
53867 			(void*)&&ZEND_NULL_LABEL,
53868 			(void*)&&ZEND_NULL_LABEL,
53869 			(void*)&&ZEND_NULL_LABEL,
53870 			(void*)&&ZEND_NULL_LABEL,
53871 			(void*)&&ZEND_NULL_LABEL,
53872 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_LABEL,
53873 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_LABEL,
53874 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_LABEL,
53875 			(void*)&&ZEND_NULL_LABEL,
53876 			(void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_LABEL,
53877 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
53878 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
53879 			(void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL,
53880 			(void*)&&ZEND_NULL_LABEL,
53881 			(void*)&&ZEND_NULL_LABEL,
53882 			(void*)&&ZEND_NULL_LABEL,
53883 			(void*)&&ZEND_NULL_LABEL,
53884 			(void*)&&ZEND_NULL_LABEL,
53885 			(void*)&&ZEND_NULL_LABEL,
53886 			(void*)&&ZEND_NULL_LABEL,
53887 			(void*)&&ZEND_NULL_LABEL,
53888 			(void*)&&ZEND_NULL_LABEL,
53889 			(void*)&&ZEND_NULL_LABEL,
53890 			(void*)&&ZEND_NULL_LABEL,
53891 			(void*)&&ZEND_NULL_LABEL,
53892 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
53893 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
53894 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
53895 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
53896 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
53897 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
53898 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
53899 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
53900 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
53901 			(void*)&&ZEND_NULL_LABEL,
53902 			(void*)&&ZEND_NULL_LABEL,
53903 			(void*)&&ZEND_NULL_LABEL,
53904 			(void*)&&ZEND_NULL_LABEL,
53905 			(void*)&&ZEND_NULL_LABEL,
53906 			(void*)&&ZEND_NULL_LABEL,
53907 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL,
53908 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
53909 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
53910 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
53911 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
53912 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
53913 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
53914 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
53915 			(void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
53916 			(void*)&&ZEND_NULL_LABEL,
53917 			(void*)&&ZEND_NULL_LABEL,
53918 			(void*)&&ZEND_NULL_LABEL,
53919 			(void*)&&ZEND_NULL_LABEL,
53920 			(void*)&&ZEND_NULL_LABEL,
53921 			(void*)&&ZEND_NULL_LABEL,
53922 			(void*)&&ZEND_NULL_LABEL,
53923 			(void*)&&ZEND_NULL_LABEL,
53924 			(void*)&&ZEND_NULL_LABEL,
53925 			(void*)&&ZEND_NULL_LABEL,
53926 			(void*)&&ZEND_NULL_LABEL,
53927 			(void*)&&ZEND_NULL_LABEL,
53928 			(void*)&&ZEND_NULL_LABEL,
53929 			(void*)&&ZEND_NULL_LABEL,
53930 			(void*)&&ZEND_NULL_LABEL,
53931 			(void*)&&ZEND_NULL_LABEL,
53932 			(void*)&&ZEND_NULL_LABEL,
53933 			(void*)&&ZEND_NULL_LABEL,
53934 			(void*)&&ZEND_NULL_LABEL,
53935 			(void*)&&ZEND_NULL_LABEL,
53936 			(void*)&&ZEND_NULL_LABEL,
53937 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_LABEL,
53938 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
53939 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
53940 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
53941 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
53942 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
53943 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL,
53944 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
53945 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
53946 			(void*)&&ZEND_NULL_LABEL,
53947 			(void*)&&ZEND_NULL_LABEL,
53948 			(void*)&&ZEND_NULL_LABEL,
53949 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_LABEL,
53950 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
53951 			(void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
53952 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
53953 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
53954 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL,
53955 			(void*)&&ZEND_NULL_LABEL,
53956 			(void*)&&ZEND_NULL_LABEL,
53957 			(void*)&&ZEND_NULL_LABEL,
53958 			(void*)&&ZEND_NULL_LABEL,
53959 			(void*)&&ZEND_NULL_LABEL,
53960 			(void*)&&ZEND_NULL_LABEL,
53961 			(void*)&&ZEND_NULL_LABEL,
53962 			(void*)&&ZEND_NULL_LABEL,
53963 			(void*)&&ZEND_NULL_LABEL,
53964 			(void*)&&ZEND_NULL_LABEL,
53965 			(void*)&&ZEND_NULL_LABEL,
53966 			(void*)&&ZEND_NULL_LABEL,
53967 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
53968 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
53969 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
53970 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
53971 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
53972 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
53973 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
53974 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
53975 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
53976 			(void*)&&ZEND_NULL_LABEL,
53977 			(void*)&&ZEND_NULL_LABEL,
53978 			(void*)&&ZEND_NULL_LABEL,
53979 			(void*)&&ZEND_NULL_LABEL,
53980 			(void*)&&ZEND_NULL_LABEL,
53981 			(void*)&&ZEND_NULL_LABEL,
53982 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL,
53983 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_LABEL,
53984 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_LABEL,
53985 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
53986 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
53987 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
53988 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL,
53989 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_LABEL,
53990 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_LABEL,
53991 			(void*)&&ZEND_NULL_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_NULL_LABEL,
53998 			(void*)&&ZEND_NULL_LABEL,
53999 			(void*)&&ZEND_NULL_LABEL,
54000 			(void*)&&ZEND_NULL_LABEL,
54001 			(void*)&&ZEND_NULL_LABEL,
54002 			(void*)&&ZEND_NULL_LABEL,
54003 			(void*)&&ZEND_NULL_LABEL,
54004 			(void*)&&ZEND_NULL_LABEL,
54005 			(void*)&&ZEND_NULL_LABEL,
54006 			(void*)&&ZEND_NULL_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_IS_NOT_EQUAL_SPEC_CV_CONST_LABEL,
54013 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_LABEL,
54014 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_LABEL,
54015 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
54016 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
54017 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
54018 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL,
54019 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_LABEL,
54020 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_LABEL,
54021 			(void*)&&ZEND_NULL_LABEL,
54022 			(void*)&&ZEND_NULL_LABEL,
54023 			(void*)&&ZEND_NULL_LABEL,
54024 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_LABEL,
54025 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_LABEL,
54026 			(void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_LABEL,
54027 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
54028 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
54029 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL,
54030 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
54031 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54032 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54033 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
54034 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54035 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54036 			(void*)&&ZEND_NULL_LABEL,
54037 			(void*)&&ZEND_NULL_LABEL,
54038 			(void*)&&ZEND_NULL_LABEL,
54039 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_LABEL,
54040 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54041 			(void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54042 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
54043 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54044 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54045 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54046 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54047 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54048 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54049 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54050 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54051 			(void*)&&ZEND_NULL_LABEL,
54052 			(void*)&&ZEND_NULL_LABEL,
54053 			(void*)&&ZEND_NULL_LABEL,
54054 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54055 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54056 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54057 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
54058 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54059 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54060 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54061 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54062 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54063 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54064 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54065 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54066 			(void*)&&ZEND_NULL_LABEL,
54067 			(void*)&&ZEND_NULL_LABEL,
54068 			(void*)&&ZEND_NULL_LABEL,
54069 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54070 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54071 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54072 			(void*)&&ZEND_NULL_LABEL,
54073 			(void*)&&ZEND_NULL_LABEL,
54074 			(void*)&&ZEND_NULL_LABEL,
54075 			(void*)&&ZEND_NULL_LABEL,
54076 			(void*)&&ZEND_NULL_LABEL,
54077 			(void*)&&ZEND_NULL_LABEL,
54078 			(void*)&&ZEND_NULL_LABEL,
54079 			(void*)&&ZEND_NULL_LABEL,
54080 			(void*)&&ZEND_NULL_LABEL,
54081 			(void*)&&ZEND_NULL_LABEL,
54082 			(void*)&&ZEND_NULL_LABEL,
54083 			(void*)&&ZEND_NULL_LABEL,
54084 			(void*)&&ZEND_NULL_LABEL,
54085 			(void*)&&ZEND_NULL_LABEL,
54086 			(void*)&&ZEND_NULL_LABEL,
54087 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_LABEL,
54088 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54089 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54090 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54091 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54092 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54093 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54094 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54095 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54096 			(void*)&&ZEND_NULL_LABEL,
54097 			(void*)&&ZEND_NULL_LABEL,
54098 			(void*)&&ZEND_NULL_LABEL,
54099 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_LABEL,
54100 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54101 			(void*)&&ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54102 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
54103 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
54104 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL,
54105 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
54106 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54107 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54108 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
54109 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54110 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54111 			(void*)&&ZEND_NULL_LABEL,
54112 			(void*)&&ZEND_NULL_LABEL,
54113 			(void*)&&ZEND_NULL_LABEL,
54114 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_LABEL,
54115 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
54116 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
54117 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
54118 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54119 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54120 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54121 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54122 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54123 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54124 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54125 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54126 			(void*)&&ZEND_NULL_LABEL,
54127 			(void*)&&ZEND_NULL_LABEL,
54128 			(void*)&&ZEND_NULL_LABEL,
54129 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54130 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54131 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54132 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
54133 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54134 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54135 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54136 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54137 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54138 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54139 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54140 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54141 			(void*)&&ZEND_NULL_LABEL,
54142 			(void*)&&ZEND_NULL_LABEL,
54143 			(void*)&&ZEND_NULL_LABEL,
54144 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54145 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54146 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54147 			(void*)&&ZEND_NULL_LABEL,
54148 			(void*)&&ZEND_NULL_LABEL,
54149 			(void*)&&ZEND_NULL_LABEL,
54150 			(void*)&&ZEND_NULL_LABEL,
54151 			(void*)&&ZEND_NULL_LABEL,
54152 			(void*)&&ZEND_NULL_LABEL,
54153 			(void*)&&ZEND_NULL_LABEL,
54154 			(void*)&&ZEND_NULL_LABEL,
54155 			(void*)&&ZEND_NULL_LABEL,
54156 			(void*)&&ZEND_NULL_LABEL,
54157 			(void*)&&ZEND_NULL_LABEL,
54158 			(void*)&&ZEND_NULL_LABEL,
54159 			(void*)&&ZEND_NULL_LABEL,
54160 			(void*)&&ZEND_NULL_LABEL,
54161 			(void*)&&ZEND_NULL_LABEL,
54162 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_LABEL,
54163 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
54164 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
54165 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54166 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54167 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54168 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54169 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54170 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54171 			(void*)&&ZEND_NULL_LABEL,
54172 			(void*)&&ZEND_NULL_LABEL,
54173 			(void*)&&ZEND_NULL_LABEL,
54174 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_LABEL,
54175 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
54176 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
54177 			(void*)&&ZEND_NULL_LABEL,
54178 			(void*)&&ZEND_NULL_LABEL,
54179 			(void*)&&ZEND_NULL_LABEL,
54180 			(void*)&&ZEND_NULL_LABEL,
54181 			(void*)&&ZEND_NULL_LABEL,
54182 			(void*)&&ZEND_NULL_LABEL,
54183 			(void*)&&ZEND_NULL_LABEL,
54184 			(void*)&&ZEND_NULL_LABEL,
54185 			(void*)&&ZEND_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_NULL_LABEL,
54191 			(void*)&&ZEND_NULL_LABEL,
54192 			(void*)&&ZEND_NULL_LABEL,
54193 			(void*)&&ZEND_NULL_LABEL,
54194 			(void*)&&ZEND_NULL_LABEL,
54195 			(void*)&&ZEND_NULL_LABEL,
54196 			(void*)&&ZEND_NULL_LABEL,
54197 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_LABEL,
54198 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_LABEL,
54199 			(void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_LABEL,
54200 			(void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_LABEL,
54201 			(void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_LABEL,
54202 			(void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_LABEL,
54203 			(void*)&&ZEND_NULL_LABEL,
54204 			(void*)&&ZEND_NULL_LABEL,
54205 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
54206 			(void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_LABEL,
54207 			(void*)&&ZEND_NULL_LABEL,
54208 			(void*)&&ZEND_NULL_LABEL,
54209 			(void*)&&ZEND_NULL_LABEL,
54210 			(void*)&&ZEND_NULL_LABEL,
54211 			(void*)&&ZEND_NULL_LABEL,
54212 			(void*)&&ZEND_NULL_LABEL,
54213 			(void*)&&ZEND_NULL_LABEL,
54214 			(void*)&&ZEND_NULL_LABEL,
54215 			(void*)&&ZEND_NULL_LABEL,
54216 			(void*)&&ZEND_NULL_LABEL,
54217 			(void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_LABEL,
54218 			(void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_LABEL,
54219 			(void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_LABEL,
54220 			(void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_LABEL,
54221 			(void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_LABEL,
54222 			(void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_LABEL,
54223 			(void*)&&ZEND_NULL_LABEL,
54224 			(void*)&&ZEND_NULL_LABEL,
54225 			(void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_LABEL,
54226 			(void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_LABEL,
54227 			(void*)&&ZEND_NULL_LABEL,
54228 			(void*)&&ZEND_NULL_LABEL,
54229 			(void*)&&ZEND_NULL_LABEL,
54230 			(void*)&&ZEND_NULL_LABEL,
54231 			(void*)&&ZEND_NULL_LABEL,
54232 			(void*)&&ZEND_NULL_LABEL,
54233 			(void*)&&ZEND_NULL_LABEL,
54234 			(void*)&&ZEND_NULL_LABEL,
54235 			(void*)&&ZEND_NULL_LABEL,
54236 			(void*)&&ZEND_NULL_LABEL,
54237 			(void*)&&ZEND_NULL_LABEL,
54238 			(void*)&&ZEND_NULL_LABEL,
54239 			(void*)&&ZEND_NULL_LABEL,
54240 			(void*)&&ZEND_NULL_LABEL,
54241 			(void*)&&ZEND_NULL_LABEL,
54242 			(void*)&&ZEND_NULL_LABEL,
54243 			(void*)&&ZEND_NULL_LABEL,
54244 			(void*)&&ZEND_NULL_LABEL,
54245 			(void*)&&ZEND_NULL_LABEL,
54246 			(void*)&&ZEND_NULL_LABEL,
54247 			(void*)&&ZEND_NULL_LABEL,
54248 			(void*)&&ZEND_NULL_LABEL,
54249 			(void*)&&ZEND_NULL_LABEL,
54250 			(void*)&&ZEND_NULL_LABEL,
54251 			(void*)&&ZEND_NULL_LABEL,
54252 			(void*)&&ZEND_NULL_LABEL,
54253 			(void*)&&ZEND_NULL_LABEL,
54254 			(void*)&&ZEND_NULL_LABEL,
54255 			(void*)&&ZEND_NULL_LABEL,
54256 			(void*)&&ZEND_NULL_LABEL,
54257 			(void*)&&ZEND_NULL_LABEL,
54258 			(void*)&&ZEND_NULL_LABEL,
54259 			(void*)&&ZEND_NULL_LABEL,
54260 			(void*)&&ZEND_NULL_LABEL,
54261 			(void*)&&ZEND_NULL_LABEL,
54262 			(void*)&&ZEND_NULL_LABEL,
54263 			(void*)&&ZEND_NULL_LABEL,
54264 			(void*)&&ZEND_NULL_LABEL,
54265 			(void*)&&ZEND_NULL_LABEL,
54266 			(void*)&&ZEND_NULL_LABEL,
54267 			(void*)&&ZEND_NULL_LABEL,
54268 			(void*)&&ZEND_NULL_LABEL,
54269 			(void*)&&ZEND_NULL_LABEL,
54270 			(void*)&&ZEND_NULL_LABEL,
54271 			(void*)&&ZEND_NULL_LABEL,
54272 			(void*)&&ZEND_NULL_LABEL,
54273 			(void*)&&ZEND_NULL_LABEL,
54274 			(void*)&&ZEND_NULL_LABEL,
54275 			(void*)&&ZEND_NULL_LABEL,
54276 			(void*)&&ZEND_NULL_LABEL,
54277 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
54278 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
54279 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
54280 			(void*)&&ZEND_NULL_LABEL,
54281 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
54282 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
54283 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
54284 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
54285 			(void*)&&ZEND_NULL_LABEL,
54286 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
54287 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
54288 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
54289 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
54290 			(void*)&&ZEND_NULL_LABEL,
54291 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
54292 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_LABEL,
54293 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_LABEL,
54294 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_LABEL,
54295 			(void*)&&ZEND_NULL_LABEL,
54296 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_LABEL,
54297 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
54298 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
54299 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
54300 			(void*)&&ZEND_NULL_LABEL,
54301 			(void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_LABEL,
54302 			(void*)&&ZEND_NULL_LABEL,
54303 			(void*)&&ZEND_NULL_LABEL,
54304 			(void*)&&ZEND_NULL_LABEL,
54305 			(void*)&&ZEND_NULL_LABEL,
54306 			(void*)&&ZEND_NULL_LABEL,
54307 			(void*)&&ZEND_NULL_LABEL,
54308 			(void*)&&ZEND_NULL_LABEL,
54309 			(void*)&&ZEND_NULL_LABEL,
54310 			(void*)&&ZEND_NULL_LABEL,
54311 			(void*)&&ZEND_NULL_LABEL,
54312 			(void*)&&ZEND_NULL_LABEL,
54313 			(void*)&&ZEND_NULL_LABEL,
54314 			(void*)&&ZEND_NULL_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_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
54328 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
54329 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
54330 			(void*)&&ZEND_NULL_LABEL,
54331 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_LABEL,
54332 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
54333 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
54334 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
54335 			(void*)&&ZEND_NULL_LABEL,
54336 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
54337 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
54338 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
54339 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
54340 			(void*)&&ZEND_NULL_LABEL,
54341 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
54342 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_LABEL,
54343 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_LABEL,
54344 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_LABEL,
54345 			(void*)&&ZEND_NULL_LABEL,
54346 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_LABEL,
54347 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_LABEL,
54348 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_LABEL,
54349 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_LABEL,
54350 			(void*)&&ZEND_NULL_LABEL,
54351 			(void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_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_NULL_LABEL,
54361 			(void*)&&ZEND_NULL_LABEL,
54362 			(void*)&&ZEND_NULL_LABEL,
54363 			(void*)&&ZEND_NULL_LABEL,
54364 			(void*)&&ZEND_NULL_LABEL,
54365 			(void*)&&ZEND_NULL_LABEL,
54366 			(void*)&&ZEND_NULL_LABEL,
54367 			(void*)&&ZEND_NULL_LABEL,
54368 			(void*)&&ZEND_NULL_LABEL,
54369 			(void*)&&ZEND_NULL_LABEL,
54370 			(void*)&&ZEND_NULL_LABEL,
54371 			(void*)&&ZEND_NULL_LABEL,
54372 			(void*)&&ZEND_NULL_LABEL,
54373 			(void*)&&ZEND_NULL_LABEL,
54374 			(void*)&&ZEND_NULL_LABEL,
54375 			(void*)&&ZEND_NULL_LABEL,
54376 			(void*)&&ZEND_NULL_LABEL,
54377 			(void*)&&ZEND_NULL_LABEL,
54378 			(void*)&&ZEND_NULL_LABEL,
54379 			(void*)&&ZEND_NULL_LABEL,
54380 			(void*)&&ZEND_NULL_LABEL,
54381 			(void*)&&ZEND_NULL_LABEL,
54382 			(void*)&&ZEND_NULL_LABEL,
54383 			(void*)&&ZEND_NULL_LABEL,
54384 			(void*)&&ZEND_NULL_LABEL,
54385 			(void*)&&ZEND_NULL_LABEL,
54386 			(void*)&&ZEND_NULL_LABEL,
54387 			(void*)&&ZEND_NULL_LABEL,
54388 			(void*)&&ZEND_NULL_LABEL,
54389 			(void*)&&ZEND_NULL_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_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
54403 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
54404 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
54405 			(void*)&&ZEND_NULL_LABEL,
54406 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
54407 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
54408 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
54409 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
54410 			(void*)&&ZEND_NULL_LABEL,
54411 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
54412 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
54413 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
54414 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
54415 			(void*)&&ZEND_NULL_LABEL,
54416 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
54417 			(void*)&&ZEND_NULL_LABEL,
54418 			(void*)&&ZEND_NULL_LABEL,
54419 			(void*)&&ZEND_NULL_LABEL,
54420 			(void*)&&ZEND_NULL_LABEL,
54421 			(void*)&&ZEND_NULL_LABEL,
54422 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
54423 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
54424 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
54425 			(void*)&&ZEND_NULL_LABEL,
54426 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_LABEL,
54427 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_LABEL,
54428 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_LABEL,
54429 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
54430 			(void*)&&ZEND_NULL_LABEL,
54431 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
54432 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
54433 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
54434 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
54435 			(void*)&&ZEND_NULL_LABEL,
54436 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
54437 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL,
54438 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL,
54439 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
54440 			(void*)&&ZEND_NULL_LABEL,
54441 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
54442 			(void*)&&ZEND_NULL_LABEL,
54443 			(void*)&&ZEND_NULL_LABEL,
54444 			(void*)&&ZEND_NULL_LABEL,
54445 			(void*)&&ZEND_NULL_LABEL,
54446 			(void*)&&ZEND_NULL_LABEL,
54447 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_LABEL,
54448 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_LABEL,
54449 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
54450 			(void*)&&ZEND_NULL_LABEL,
54451 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
54452 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_LABEL,
54453 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_LABEL,
54454 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
54455 			(void*)&&ZEND_NULL_LABEL,
54456 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_LABEL,
54457 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
54458 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
54459 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
54460 			(void*)&&ZEND_NULL_LABEL,
54461 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
54462 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL,
54463 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL,
54464 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
54465 			(void*)&&ZEND_NULL_LABEL,
54466 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_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_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_LABEL,
54473 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_LABEL,
54474 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_LABEL,
54475 			(void*)&&ZEND_NULL_LABEL,
54476 			(void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_LABEL,
54477 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_LABEL,
54478 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_LABEL,
54479 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_LABEL,
54480 			(void*)&&ZEND_NULL_LABEL,
54481 			(void*)&&ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_LABEL,
54482 			(void*)&&ZEND_NULL_LABEL,
54483 			(void*)&&ZEND_NULL_LABEL,
54484 			(void*)&&ZEND_NULL_LABEL,
54485 			(void*)&&ZEND_NULL_LABEL,
54486 			(void*)&&ZEND_NULL_LABEL,
54487 			(void*)&&ZEND_NULL_LABEL,
54488 			(void*)&&ZEND_NULL_LABEL,
54489 			(void*)&&ZEND_NULL_LABEL,
54490 			(void*)&&ZEND_NULL_LABEL,
54491 			(void*)&&ZEND_NULL_LABEL,
54492 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CONST_LABEL,
54493 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
54494 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_LABEL,
54495 			(void*)&&ZEND_NULL_LABEL,
54496 			(void*)&&ZEND_ASSIGN_OP_SPEC_VAR_CV_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_ASSIGN_OP_SPEC_CV_CONST_LABEL,
54503 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
54504 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_LABEL,
54505 			(void*)&&ZEND_NULL_LABEL,
54506 			(void*)&&ZEND_ASSIGN_OP_SPEC_CV_CV_LABEL,
54507 			(void*)&&ZEND_NULL_LABEL,
54508 			(void*)&&ZEND_NULL_LABEL,
54509 			(void*)&&ZEND_NULL_LABEL,
54510 			(void*)&&ZEND_NULL_LABEL,
54511 			(void*)&&ZEND_NULL_LABEL,
54512 			(void*)&&ZEND_NULL_LABEL,
54513 			(void*)&&ZEND_NULL_LABEL,
54514 			(void*)&&ZEND_NULL_LABEL,
54515 			(void*)&&ZEND_NULL_LABEL,
54516 			(void*)&&ZEND_NULL_LABEL,
54517 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_LABEL,
54518 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
54519 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_LABEL,
54520 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_LABEL,
54521 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_LABEL,
54522 			(void*)&&ZEND_NULL_LABEL,
54523 			(void*)&&ZEND_NULL_LABEL,
54524 			(void*)&&ZEND_NULL_LABEL,
54525 			(void*)&&ZEND_NULL_LABEL,
54526 			(void*)&&ZEND_NULL_LABEL,
54527 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_LABEL,
54528 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
54529 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_LABEL,
54530 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_LABEL,
54531 			(void*)&&ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_LABEL,
54532 			(void*)&&ZEND_NULL_LABEL,
54533 			(void*)&&ZEND_NULL_LABEL,
54534 			(void*)&&ZEND_NULL_LABEL,
54535 			(void*)&&ZEND_NULL_LABEL,
54536 			(void*)&&ZEND_NULL_LABEL,
54537 			(void*)&&ZEND_NULL_LABEL,
54538 			(void*)&&ZEND_NULL_LABEL,
54539 			(void*)&&ZEND_NULL_LABEL,
54540 			(void*)&&ZEND_NULL_LABEL,
54541 			(void*)&&ZEND_NULL_LABEL,
54542 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_LABEL,
54543 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
54544 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
54545 			(void*)&&ZEND_NULL_LABEL,
54546 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_LABEL,
54547 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_LABEL,
54548 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
54549 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
54550 			(void*)&&ZEND_NULL_LABEL,
54551 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_LABEL,
54552 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_LABEL,
54553 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
54554 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_LABEL,
54555 			(void*)&&ZEND_NULL_LABEL,
54556 			(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_LABEL,
54557 			(void*)&&ZEND_ASSIGN_STATIC_PROP_OP_SPEC_LABEL,
54558 			(void*)&&ZEND_NULL_LABEL,
54559 			(void*)&&ZEND_NULL_LABEL,
54560 			(void*)&&ZEND_NULL_LABEL,
54561 			(void*)&&ZEND_NULL_LABEL,
54562 			(void*)&&ZEND_NULL_LABEL,
54563 			(void*)&&ZEND_NULL_LABEL,
54564 			(void*)&&ZEND_NULL_LABEL,
54565 			(void*)&&ZEND_NULL_LABEL,
54566 			(void*)&&ZEND_NULL_LABEL,
54567 			(void*)&&ZEND_NULL_LABEL,
54568 			(void*)&&ZEND_NULL_LABEL,
54569 			(void*)&&ZEND_NULL_LABEL,
54570 			(void*)&&ZEND_ASSIGN_REF_SPEC_VAR_VAR_LABEL,
54571 			(void*)&&ZEND_NULL_LABEL,
54572 			(void*)&&ZEND_ASSIGN_REF_SPEC_VAR_CV_LABEL,
54573 			(void*)&&ZEND_NULL_LABEL,
54574 			(void*)&&ZEND_NULL_LABEL,
54575 			(void*)&&ZEND_NULL_LABEL,
54576 			(void*)&&ZEND_NULL_LABEL,
54577 			(void*)&&ZEND_NULL_LABEL,
54578 			(void*)&&ZEND_NULL_LABEL,
54579 			(void*)&&ZEND_NULL_LABEL,
54580 			(void*)&&ZEND_ASSIGN_REF_SPEC_CV_VAR_LABEL,
54581 			(void*)&&ZEND_NULL_LABEL,
54582 			(void*)&&ZEND_ASSIGN_REF_SPEC_CV_CV_LABEL,
54583 			(void*)&&ZEND_QM_ASSIGN_SPEC_CONST_LABEL,
54584 			(void*)&&ZEND_QM_ASSIGN_SPEC_TMP_LABEL,
54585 			(void*)&&ZEND_QM_ASSIGN_SPEC_VAR_LABEL,
54586 			(void*)&&ZEND_NULL_LABEL,
54587 			(void*)&&ZEND_QM_ASSIGN_SPEC_CV_LABEL,
54588 			(void*)&&ZEND_NULL_LABEL,
54589 			(void*)&&ZEND_NULL_LABEL,
54590 			(void*)&&ZEND_NULL_LABEL,
54591 			(void*)&&ZEND_NULL_LABEL,
54592 			(void*)&&ZEND_NULL_LABEL,
54593 			(void*)&&ZEND_NULL_LABEL,
54594 			(void*)&&ZEND_NULL_LABEL,
54595 			(void*)&&ZEND_NULL_LABEL,
54596 			(void*)&&ZEND_NULL_LABEL,
54597 			(void*)&&ZEND_NULL_LABEL,
54598 			(void*)&&ZEND_NULL_LABEL,
54599 			(void*)&&ZEND_NULL_LABEL,
54600 			(void*)&&ZEND_NULL_LABEL,
54601 			(void*)&&ZEND_NULL_LABEL,
54602 			(void*)&&ZEND_NULL_LABEL,
54603 			(void*)&&ZEND_NULL_LABEL,
54604 			(void*)&&ZEND_NULL_LABEL,
54605 			(void*)&&ZEND_NULL_LABEL,
54606 			(void*)&&ZEND_NULL_LABEL,
54607 			(void*)&&ZEND_NULL_LABEL,
54608 			(void*)&&ZEND_NULL_LABEL,
54609 			(void*)&&ZEND_NULL_LABEL,
54610 			(void*)&&ZEND_NULL_LABEL,
54611 			(void*)&&ZEND_NULL_LABEL,
54612 			(void*)&&ZEND_NULL_LABEL,
54613 			(void*)&&ZEND_NULL_LABEL,
54614 			(void*)&&ZEND_NULL_LABEL,
54615 			(void*)&&ZEND_NULL_LABEL,
54616 			(void*)&&ZEND_NULL_LABEL,
54617 			(void*)&&ZEND_NULL_LABEL,
54618 			(void*)&&ZEND_NULL_LABEL,
54619 			(void*)&&ZEND_NULL_LABEL,
54620 			(void*)&&ZEND_NULL_LABEL,
54621 			(void*)&&ZEND_NULL_LABEL,
54622 			(void*)&&ZEND_NULL_LABEL,
54623 			(void*)&&ZEND_NULL_LABEL,
54624 			(void*)&&ZEND_NULL_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_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
54641 			(void*)&&ZEND_NULL_LABEL,
54642 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
54643 			(void*)&&ZEND_NULL_LABEL,
54644 			(void*)&&ZEND_NULL_LABEL,
54645 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
54646 			(void*)&&ZEND_NULL_LABEL,
54647 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
54648 			(void*)&&ZEND_NULL_LABEL,
54649 			(void*)&&ZEND_NULL_LABEL,
54650 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
54651 			(void*)&&ZEND_NULL_LABEL,
54652 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
54653 			(void*)&&ZEND_NULL_LABEL,
54654 			(void*)&&ZEND_NULL_LABEL,
54655 			(void*)&&ZEND_NULL_LABEL,
54656 			(void*)&&ZEND_NULL_LABEL,
54657 			(void*)&&ZEND_NULL_LABEL,
54658 			(void*)&&ZEND_NULL_LABEL,
54659 			(void*)&&ZEND_NULL_LABEL,
54660 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
54661 			(void*)&&ZEND_NULL_LABEL,
54662 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_LABEL,
54663 			(void*)&&ZEND_NULL_LABEL,
54664 			(void*)&&ZEND_NULL_LABEL,
54665 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
54666 			(void*)&&ZEND_NULL_LABEL,
54667 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL,
54668 			(void*)&&ZEND_NULL_LABEL,
54669 			(void*)&&ZEND_NULL_LABEL,
54670 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
54671 			(void*)&&ZEND_NULL_LABEL,
54672 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
54673 			(void*)&&ZEND_NULL_LABEL,
54674 			(void*)&&ZEND_NULL_LABEL,
54675 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL,
54676 			(void*)&&ZEND_NULL_LABEL,
54677 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL,
54678 			(void*)&&ZEND_NULL_LABEL,
54679 			(void*)&&ZEND_NULL_LABEL,
54680 			(void*)&&ZEND_NULL_LABEL,
54681 			(void*)&&ZEND_NULL_LABEL,
54682 			(void*)&&ZEND_NULL_LABEL,
54683 			(void*)&&ZEND_NULL_LABEL,
54684 			(void*)&&ZEND_NULL_LABEL,
54685 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL,
54686 			(void*)&&ZEND_NULL_LABEL,
54687 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_LABEL,
54688 			(void*)&&ZEND_NULL_LABEL,
54689 			(void*)&&ZEND_NULL_LABEL,
54690 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_LABEL,
54691 			(void*)&&ZEND_NULL_LABEL,
54692 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_LABEL,
54693 			(void*)&&ZEND_NULL_LABEL,
54694 			(void*)&&ZEND_NULL_LABEL,
54695 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
54696 			(void*)&&ZEND_NULL_LABEL,
54697 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL,
54698 			(void*)&&ZEND_NULL_LABEL,
54699 			(void*)&&ZEND_NULL_LABEL,
54700 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL,
54701 			(void*)&&ZEND_NULL_LABEL,
54702 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_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_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_LABEL,
54711 			(void*)&&ZEND_NULL_LABEL,
54712 			(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_LABEL,
54713 			(void*)&&ZEND_ASSIGN_STATIC_PROP_REF_SPEC_LABEL,
54714 			(void*)&&ZEND_NULL_LABEL,
54715 			(void*)&&ZEND_NULL_LABEL,
54716 			(void*)&&ZEND_NULL_LABEL,
54717 			(void*)&&ZEND_NULL_LABEL,
54718 			(void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_LABEL,
54719 			(void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_LABEL,
54720 			(void*)&&ZEND_NULL_LABEL,
54721 			(void*)&&ZEND_NULL_LABEL,
54722 			(void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_LABEL,
54723 			(void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_USED_LABEL,
54724 			(void*)&&ZEND_NULL_LABEL,
54725 			(void*)&&ZEND_NULL_LABEL,
54726 			(void*)&&ZEND_NULL_LABEL,
54727 			(void*)&&ZEND_NULL_LABEL,
54728 			(void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_LABEL,
54729 			(void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_LABEL,
54730 			(void*)&&ZEND_NULL_LABEL,
54731 			(void*)&&ZEND_NULL_LABEL,
54732 			(void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_LABEL,
54733 			(void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_LABEL,
54734 			(void*)&&ZEND_NULL_LABEL,
54735 			(void*)&&ZEND_NULL_LABEL,
54736 			(void*)&&ZEND_POST_INC_SPEC_VAR_LABEL,
54737 			(void*)&&ZEND_NULL_LABEL,
54738 			(void*)&&ZEND_POST_INC_SPEC_CV_LABEL,
54739 			(void*)&&ZEND_NULL_LABEL,
54740 			(void*)&&ZEND_NULL_LABEL,
54741 			(void*)&&ZEND_POST_DEC_SPEC_VAR_LABEL,
54742 			(void*)&&ZEND_NULL_LABEL,
54743 			(void*)&&ZEND_POST_DEC_SPEC_CV_LABEL,
54744 			(void*)&&ZEND_PRE_INC_STATIC_PROP_SPEC_LABEL,
54745 			(void*)&&ZEND_POST_INC_STATIC_PROP_SPEC_LABEL,
54746 			(void*)&&ZEND_JMP_SPEC_LABEL,
54747 			(void*)&&ZEND_JMPZ_SPEC_CONST_LABEL,
54748 			(void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
54749 			(void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL,
54750 			(void*)&&ZEND_NULL_LABEL,
54751 			(void*)&&ZEND_JMPZ_SPEC_CV_LABEL,
54752 			(void*)&&ZEND_JMPNZ_SPEC_CONST_LABEL,
54753 			(void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
54754 			(void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL,
54755 			(void*)&&ZEND_NULL_LABEL,
54756 			(void*)&&ZEND_JMPNZ_SPEC_CV_LABEL,
54757 			(void*)&&ZEND_JMPZ_EX_SPEC_CONST_LABEL,
54758 			(void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
54759 			(void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL,
54760 			(void*)&&ZEND_NULL_LABEL,
54761 			(void*)&&ZEND_JMPZ_EX_SPEC_CV_LABEL,
54762 			(void*)&&ZEND_JMPNZ_EX_SPEC_CONST_LABEL,
54763 			(void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
54764 			(void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL,
54765 			(void*)&&ZEND_NULL_LABEL,
54766 			(void*)&&ZEND_JMPNZ_EX_SPEC_CV_LABEL,
54767 			(void*)&&ZEND_CASE_SPEC_TMPVAR_CONST_LABEL,
54768 			(void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
54769 			(void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL,
54770 			(void*)&&ZEND_NULL_LABEL,
54771 			(void*)&&ZEND_CASE_SPEC_TMPVAR_CV_LABEL,
54772 			(void*)&&ZEND_CHECK_VAR_SPEC_CV_UNUSED_LABEL,
54773 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_LABEL,
54774 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_LABEL,
54775 			(void*)&&ZEND_NULL_LABEL,
54776 			(void*)&&ZEND_NULL_LABEL,
54777 			(void*)&&ZEND_NULL_LABEL,
54778 			(void*)&&ZEND_NULL_LABEL,
54779 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_LABEL,
54780 			(void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_LABEL,
54781 			(void*)&&ZEND_NULL_LABEL,
54782 			(void*)&&ZEND_NULL_LABEL,
54783 			(void*)&&ZEND_CAST_SPEC_CONST_LABEL,
54784 			(void*)&&ZEND_CAST_SPEC_TMP_LABEL,
54785 			(void*)&&ZEND_CAST_SPEC_VAR_LABEL,
54786 			(void*)&&ZEND_NULL_LABEL,
54787 			(void*)&&ZEND_CAST_SPEC_CV_LABEL,
54788 			(void*)&&ZEND_BOOL_SPEC_CONST_LABEL,
54789 			(void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
54790 			(void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL,
54791 			(void*)&&ZEND_NULL_LABEL,
54792 			(void*)&&ZEND_BOOL_SPEC_CV_LABEL,
54793 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CONST_LABEL,
54794 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
54795 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL,
54796 			(void*)&&ZEND_NULL_LABEL,
54797 			(void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CV_LABEL,
54798 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
54799 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
54800 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
54801 			(void*)&&ZEND_NULL_LABEL,
54802 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
54803 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL,
54804 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
54805 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL,
54806 			(void*)&&ZEND_NULL_LABEL,
54807 			(void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL,
54808 			(void*)&&ZEND_NULL_LABEL,
54809 			(void*)&&ZEND_NULL_LABEL,
54810 			(void*)&&ZEND_NULL_LABEL,
54811 			(void*)&&ZEND_NULL_LABEL,
54812 			(void*)&&ZEND_NULL_LABEL,
54813 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_CONST_LABEL,
54814 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
54815 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL,
54816 			(void*)&&ZEND_NULL_LABEL,
54817 			(void*)&&ZEND_FAST_CONCAT_SPEC_CV_CV_LABEL,
54818 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CONST_LABEL,
54819 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
54820 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL,
54821 			(void*)&&ZEND_NULL_LABEL,
54822 			(void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CV_LABEL,
54823 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_CONST_LABEL,
54824 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
54825 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL,
54826 			(void*)&&ZEND_NULL_LABEL,
54827 			(void*)&&ZEND_ROPE_ADD_SPEC_TMP_CV_LABEL,
54828 			(void*)&&ZEND_ROPE_END_SPEC_TMP_CONST_LABEL,
54829 			(void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
54830 			(void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL,
54831 			(void*)&&ZEND_NULL_LABEL,
54832 			(void*)&&ZEND_ROPE_END_SPEC_TMP_CV_LABEL,
54833 			(void*)&&ZEND_BEGIN_SILENCE_SPEC_LABEL,
54834 			(void*)&&ZEND_END_SILENCE_SPEC_TMP_LABEL,
54835 			(void*)&&ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_LABEL,
54836 			(void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_LABEL,
54837 			(void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_LABEL,
54838 			(void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL,
54839 			(void*)&&ZEND_DO_FCALL_SPEC_OBSERVER_LABEL,
54840 			(void*)&&ZEND_INIT_FCALL_SPEC_CONST_LABEL,
54841 			(void*)&&ZEND_RETURN_SPEC_CONST_LABEL,
54842 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
54843 			(void*)&&ZEND_RETURN_SPEC_TMP_LABEL,
54844 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
54845 			(void*)&&ZEND_RETURN_SPEC_VAR_LABEL,
54846 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
54847 			(void*)&&ZEND_NULL_LABEL,
54848 			(void*)&&ZEND_NULL_LABEL,
54849 			(void*)&&ZEND_RETURN_SPEC_CV_LABEL,
54850 			(void*)&&ZEND_RETURN_SPEC_OBSERVER_LABEL,
54851 			(void*)&&ZEND_RECV_SPEC_UNUSED_LABEL,
54852 			(void*)&&ZEND_RECV_INIT_SPEC_CONST_LABEL,
54853 			(void*)&&ZEND_SEND_VAL_SPEC_CONST_CONST_LABEL,
54854 			(void*)&&ZEND_NULL_LABEL,
54855 			(void*)&&ZEND_NULL_LABEL,
54856 			(void*)&&ZEND_SEND_VAL_SPEC_CONST_UNUSED_LABEL,
54857 			(void*)&&ZEND_NULL_LABEL,
54858 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_CONST_LABEL,
54859 			(void*)&&ZEND_NULL_LABEL,
54860 			(void*)&&ZEND_NULL_LABEL,
54861 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_LABEL,
54862 			(void*)&&ZEND_NULL_LABEL,
54863 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_CONST_LABEL,
54864 			(void*)&&ZEND_NULL_LABEL,
54865 			(void*)&&ZEND_NULL_LABEL,
54866 			(void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_LABEL,
54867 			(void*)&&ZEND_NULL_LABEL,
54868 			(void*)&&ZEND_NULL_LABEL,
54869 			(void*)&&ZEND_NULL_LABEL,
54870 			(void*)&&ZEND_NULL_LABEL,
54871 			(void*)&&ZEND_NULL_LABEL,
54872 			(void*)&&ZEND_NULL_LABEL,
54873 			(void*)&&ZEND_NULL_LABEL,
54874 			(void*)&&ZEND_NULL_LABEL,
54875 			(void*)&&ZEND_NULL_LABEL,
54876 			(void*)&&ZEND_NULL_LABEL,
54877 			(void*)&&ZEND_NULL_LABEL,
54878 			(void*)&&ZEND_NULL_LABEL,
54879 			(void*)&&ZEND_NULL_LABEL,
54880 			(void*)&&ZEND_NULL_LABEL,
54881 			(void*)&&ZEND_NULL_LABEL,
54882 			(void*)&&ZEND_NULL_LABEL,
54883 			(void*)&&ZEND_NULL_LABEL,
54884 			(void*)&&ZEND_NULL_LABEL,
54885 			(void*)&&ZEND_NULL_LABEL,
54886 			(void*)&&ZEND_NULL_LABEL,
54887 			(void*)&&ZEND_NULL_LABEL,
54888 			(void*)&&ZEND_NULL_LABEL,
54889 			(void*)&&ZEND_NULL_LABEL,
54890 			(void*)&&ZEND_NULL_LABEL,
54891 			(void*)&&ZEND_NULL_LABEL,
54892 			(void*)&&ZEND_NULL_LABEL,
54893 			(void*)&&ZEND_NULL_LABEL,
54894 			(void*)&&ZEND_NULL_LABEL,
54895 			(void*)&&ZEND_NULL_LABEL,
54896 			(void*)&&ZEND_NULL_LABEL,
54897 			(void*)&&ZEND_NULL_LABEL,
54898 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_CONST_LABEL,
54899 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_CONST_LABEL,
54900 			(void*)&&ZEND_NULL_LABEL,
54901 			(void*)&&ZEND_NULL_LABEL,
54902 			(void*)&&ZEND_NULL_LABEL,
54903 			(void*)&&ZEND_NULL_LABEL,
54904 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_LABEL,
54905 			(void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_LABEL,
54906 			(void*)&&ZEND_NULL_LABEL,
54907 			(void*)&&ZEND_NULL_LABEL,
54908 			(void*)&&ZEND_NULL_LABEL,
54909 			(void*)&&ZEND_NULL_LABEL,
54910 			(void*)&&ZEND_NULL_LABEL,
54911 			(void*)&&ZEND_NULL_LABEL,
54912 			(void*)&&ZEND_NULL_LABEL,
54913 			(void*)&&ZEND_NULL_LABEL,
54914 			(void*)&&ZEND_NULL_LABEL,
54915 			(void*)&&ZEND_NULL_LABEL,
54916 			(void*)&&ZEND_NULL_LABEL,
54917 			(void*)&&ZEND_NULL_LABEL,
54918 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_CONST_LABEL,
54919 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_CONST_LABEL,
54920 			(void*)&&ZEND_NULL_LABEL,
54921 			(void*)&&ZEND_NULL_LABEL,
54922 			(void*)&&ZEND_NULL_LABEL,
54923 			(void*)&&ZEND_NULL_LABEL,
54924 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_LABEL,
54925 			(void*)&&ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_LABEL,
54926 			(void*)&&ZEND_NULL_LABEL,
54927 			(void*)&&ZEND_NULL_LABEL,
54928 			(void*)&&ZEND_NULL_LABEL,
54929 			(void*)&&ZEND_NULL_LABEL,
54930 			(void*)&&ZEND_NULL_LABEL,
54931 			(void*)&&ZEND_NULL_LABEL,
54932 			(void*)&&ZEND_NULL_LABEL,
54933 			(void*)&&ZEND_NULL_LABEL,
54934 			(void*)&&ZEND_NULL_LABEL,
54935 			(void*)&&ZEND_NULL_LABEL,
54936 			(void*)&&ZEND_NULL_LABEL,
54937 			(void*)&&ZEND_NULL_LABEL,
54938 			(void*)&&ZEND_SEND_REF_SPEC_VAR_CONST_LABEL,
54939 			(void*)&&ZEND_NULL_LABEL,
54940 			(void*)&&ZEND_NULL_LABEL,
54941 			(void*)&&ZEND_SEND_REF_SPEC_VAR_UNUSED_LABEL,
54942 			(void*)&&ZEND_NULL_LABEL,
54943 			(void*)&&ZEND_NULL_LABEL,
54944 			(void*)&&ZEND_NULL_LABEL,
54945 			(void*)&&ZEND_NULL_LABEL,
54946 			(void*)&&ZEND_NULL_LABEL,
54947 			(void*)&&ZEND_NULL_LABEL,
54948 			(void*)&&ZEND_SEND_REF_SPEC_CV_CONST_LABEL,
54949 			(void*)&&ZEND_NULL_LABEL,
54950 			(void*)&&ZEND_NULL_LABEL,
54951 			(void*)&&ZEND_SEND_REF_SPEC_CV_UNUSED_LABEL,
54952 			(void*)&&ZEND_NULL_LABEL,
54953 			(void*)&&ZEND_NEW_SPEC_CONST_UNUSED_LABEL,
54954 			(void*)&&ZEND_NULL_LABEL,
54955 			(void*)&&ZEND_NEW_SPEC_VAR_UNUSED_LABEL,
54956 			(void*)&&ZEND_NEW_SPEC_UNUSED_UNUSED_LABEL,
54957 			(void*)&&ZEND_NULL_LABEL,
54958 			(void*)&&ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_LABEL,
54959 			(void*)&&ZEND_FREE_SPEC_TMPVAR_LABEL,
54960 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CONST_LABEL,
54961 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
54962 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL,
54963 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_LABEL,
54964 			(void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CV_LABEL,
54965 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CONST_LABEL,
54966 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
54967 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL,
54968 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_LABEL,
54969 			(void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CV_LABEL,
54970 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CONST_LABEL,
54971 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
54972 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL,
54973 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_LABEL,
54974 			(void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CV_LABEL,
54975 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_LABEL,
54976 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
54977 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_LABEL,
54978 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_LABEL,
54979 			(void*)&&ZEND_INIT_ARRAY_SPEC_UNUSED_CV_LABEL,
54980 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_CONST_LABEL,
54981 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
54982 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL,
54983 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_UNUSED_LABEL,
54984 			(void*)&&ZEND_INIT_ARRAY_SPEC_CV_CV_LABEL,
54985 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_LABEL,
54986 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
54987 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL,
54988 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_LABEL,
54989 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_LABEL,
54990 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_LABEL,
54991 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
54992 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL,
54993 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_LABEL,
54994 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_LABEL,
54995 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_LABEL,
54996 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
54997 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL,
54998 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_LABEL,
54999 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_LABEL,
55000 			(void*)&&ZEND_NULL_LABEL,
55001 			(void*)&&ZEND_NULL_LABEL,
55002 			(void*)&&ZEND_NULL_LABEL,
55003 			(void*)&&ZEND_NULL_LABEL,
55004 			(void*)&&ZEND_NULL_LABEL,
55005 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_LABEL,
55006 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
55007 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL,
55008 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_LABEL,
55009 			(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_LABEL,
55010 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_LABEL,
55011 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
55012 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
55013 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
55014 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
55015 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
55016 			(void*)&&ZEND_NULL_LABEL,
55017 			(void*)&&ZEND_NULL_LABEL,
55018 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_LABEL,
55019 			(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_LABEL,
55020 			(void*)&&ZEND_UNSET_VAR_SPEC_CONST_UNUSED_LABEL,
55021 			(void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
55022 			(void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
55023 			(void*)&&ZEND_NULL_LABEL,
55024 			(void*)&&ZEND_UNSET_VAR_SPEC_CV_UNUSED_LABEL,
55025 			(void*)&&ZEND_NULL_LABEL,
55026 			(void*)&&ZEND_NULL_LABEL,
55027 			(void*)&&ZEND_NULL_LABEL,
55028 			(void*)&&ZEND_NULL_LABEL,
55029 			(void*)&&ZEND_NULL_LABEL,
55030 			(void*)&&ZEND_NULL_LABEL,
55031 			(void*)&&ZEND_NULL_LABEL,
55032 			(void*)&&ZEND_NULL_LABEL,
55033 			(void*)&&ZEND_NULL_LABEL,
55034 			(void*)&&ZEND_NULL_LABEL,
55035 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_CONST_LABEL,
55036 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
55037 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL,
55038 			(void*)&&ZEND_NULL_LABEL,
55039 			(void*)&&ZEND_UNSET_DIM_SPEC_VAR_CV_LABEL,
55040 			(void*)&&ZEND_NULL_LABEL,
55041 			(void*)&&ZEND_NULL_LABEL,
55042 			(void*)&&ZEND_NULL_LABEL,
55043 			(void*)&&ZEND_NULL_LABEL,
55044 			(void*)&&ZEND_NULL_LABEL,
55045 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_CONST_LABEL,
55046 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
55047 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL,
55048 			(void*)&&ZEND_NULL_LABEL,
55049 			(void*)&&ZEND_UNSET_DIM_SPEC_CV_CV_LABEL,
55050 			(void*)&&ZEND_NULL_LABEL,
55051 			(void*)&&ZEND_NULL_LABEL,
55052 			(void*)&&ZEND_NULL_LABEL,
55053 			(void*)&&ZEND_NULL_LABEL,
55054 			(void*)&&ZEND_NULL_LABEL,
55055 			(void*)&&ZEND_NULL_LABEL,
55056 			(void*)&&ZEND_NULL_LABEL,
55057 			(void*)&&ZEND_NULL_LABEL,
55058 			(void*)&&ZEND_NULL_LABEL,
55059 			(void*)&&ZEND_NULL_LABEL,
55060 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CONST_LABEL,
55061 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
55062 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL,
55063 			(void*)&&ZEND_NULL_LABEL,
55064 			(void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CV_LABEL,
55065 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_LABEL,
55066 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
55067 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
55068 			(void*)&&ZEND_NULL_LABEL,
55069 			(void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CV_LABEL,
55070 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_CONST_LABEL,
55071 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
55072 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL,
55073 			(void*)&&ZEND_NULL_LABEL,
55074 			(void*)&&ZEND_UNSET_OBJ_SPEC_CV_CV_LABEL,
55075 			(void*)&&ZEND_FE_RESET_R_SPEC_CONST_LABEL,
55076 			(void*)&&ZEND_FE_RESET_R_SPEC_TMP_LABEL,
55077 			(void*)&&ZEND_FE_RESET_R_SPEC_VAR_LABEL,
55078 			(void*)&&ZEND_NULL_LABEL,
55079 			(void*)&&ZEND_FE_RESET_R_SPEC_CV_LABEL,
55080 			(void*)&&ZEND_FE_FETCH_R_SPEC_VAR_LABEL,
55081 			(void*)&&ZEND_EXIT_SPEC_LABEL,
55082 			(void*)&&ZEND_FETCH_R_SPEC_CONST_UNUSED_LABEL,
55083 			(void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
55084 			(void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL,
55085 			(void*)&&ZEND_NULL_LABEL,
55086 			(void*)&&ZEND_FETCH_R_SPEC_CV_UNUSED_LABEL,
55087 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CONST_LABEL,
55088 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
55089 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL,
55090 			(void*)&&ZEND_NULL_LABEL,
55091 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CV_LABEL,
55092 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
55093 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
55094 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
55095 			(void*)&&ZEND_NULL_LABEL,
55096 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
55097 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL,
55098 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
55099 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL,
55100 			(void*)&&ZEND_NULL_LABEL,
55101 			(void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL,
55102 			(void*)&&ZEND_NULL_LABEL,
55103 			(void*)&&ZEND_NULL_LABEL,
55104 			(void*)&&ZEND_NULL_LABEL,
55105 			(void*)&&ZEND_NULL_LABEL,
55106 			(void*)&&ZEND_NULL_LABEL,
55107 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CONST_LABEL,
55108 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
55109 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL,
55110 			(void*)&&ZEND_NULL_LABEL,
55111 			(void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CV_LABEL,
55112 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_LABEL,
55113 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
55114 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL,
55115 			(void*)&&ZEND_NULL_LABEL,
55116 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CV_LABEL,
55117 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
55118 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
55119 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
55120 			(void*)&&ZEND_NULL_LABEL,
55121 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
55122 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL,
55123 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
55124 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL,
55125 			(void*)&&ZEND_NULL_LABEL,
55126 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL,
55127 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_LABEL,
55128 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
55129 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL,
55130 			(void*)&&ZEND_NULL_LABEL,
55131 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_LABEL,
55132 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CONST_LABEL,
55133 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
55134 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL,
55135 			(void*)&&ZEND_NULL_LABEL,
55136 			(void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CV_LABEL,
55137 			(void*)&&ZEND_FETCH_W_SPEC_CONST_UNUSED_LABEL,
55138 			(void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
55139 			(void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL,
55140 			(void*)&&ZEND_NULL_LABEL,
55141 			(void*)&&ZEND_FETCH_W_SPEC_CV_UNUSED_LABEL,
55142 			(void*)&&ZEND_NULL_LABEL,
55143 			(void*)&&ZEND_NULL_LABEL,
55144 			(void*)&&ZEND_NULL_LABEL,
55145 			(void*)&&ZEND_NULL_LABEL,
55146 			(void*)&&ZEND_NULL_LABEL,
55147 			(void*)&&ZEND_NULL_LABEL,
55148 			(void*)&&ZEND_NULL_LABEL,
55149 			(void*)&&ZEND_NULL_LABEL,
55150 			(void*)&&ZEND_NULL_LABEL,
55151 			(void*)&&ZEND_NULL_LABEL,
55152 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CONST_LABEL,
55153 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
55154 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL,
55155 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_LABEL,
55156 			(void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CV_LABEL,
55157 			(void*)&&ZEND_NULL_LABEL,
55158 			(void*)&&ZEND_NULL_LABEL,
55159 			(void*)&&ZEND_NULL_LABEL,
55160 			(void*)&&ZEND_NULL_LABEL,
55161 			(void*)&&ZEND_NULL_LABEL,
55162 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CONST_LABEL,
55163 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
55164 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL,
55165 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_LABEL,
55166 			(void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CV_LABEL,
55167 			(void*)&&ZEND_NULL_LABEL,
55168 			(void*)&&ZEND_NULL_LABEL,
55169 			(void*)&&ZEND_NULL_LABEL,
55170 			(void*)&&ZEND_NULL_LABEL,
55171 			(void*)&&ZEND_NULL_LABEL,
55172 			(void*)&&ZEND_NULL_LABEL,
55173 			(void*)&&ZEND_NULL_LABEL,
55174 			(void*)&&ZEND_NULL_LABEL,
55175 			(void*)&&ZEND_NULL_LABEL,
55176 			(void*)&&ZEND_NULL_LABEL,
55177 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_LABEL,
55178 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
55179 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
55180 			(void*)&&ZEND_NULL_LABEL,
55181 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CV_LABEL,
55182 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_LABEL,
55183 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
55184 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
55185 			(void*)&&ZEND_NULL_LABEL,
55186 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_LABEL,
55187 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CONST_LABEL,
55188 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
55189 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL,
55190 			(void*)&&ZEND_NULL_LABEL,
55191 			(void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CV_LABEL,
55192 			(void*)&&ZEND_FETCH_RW_SPEC_CONST_UNUSED_LABEL,
55193 			(void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
55194 			(void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL,
55195 			(void*)&&ZEND_NULL_LABEL,
55196 			(void*)&&ZEND_FETCH_RW_SPEC_CV_UNUSED_LABEL,
55197 			(void*)&&ZEND_NULL_LABEL,
55198 			(void*)&&ZEND_NULL_LABEL,
55199 			(void*)&&ZEND_NULL_LABEL,
55200 			(void*)&&ZEND_NULL_LABEL,
55201 			(void*)&&ZEND_NULL_LABEL,
55202 			(void*)&&ZEND_NULL_LABEL,
55203 			(void*)&&ZEND_NULL_LABEL,
55204 			(void*)&&ZEND_NULL_LABEL,
55205 			(void*)&&ZEND_NULL_LABEL,
55206 			(void*)&&ZEND_NULL_LABEL,
55207 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_LABEL,
55208 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
55209 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL,
55210 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_LABEL,
55211 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CV_LABEL,
55212 			(void*)&&ZEND_NULL_LABEL,
55213 			(void*)&&ZEND_NULL_LABEL,
55214 			(void*)&&ZEND_NULL_LABEL,
55215 			(void*)&&ZEND_NULL_LABEL,
55216 			(void*)&&ZEND_NULL_LABEL,
55217 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CONST_LABEL,
55218 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
55219 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL,
55220 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_LABEL,
55221 			(void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CV_LABEL,
55222 			(void*)&&ZEND_NULL_LABEL,
55223 			(void*)&&ZEND_NULL_LABEL,
55224 			(void*)&&ZEND_NULL_LABEL,
55225 			(void*)&&ZEND_NULL_LABEL,
55226 			(void*)&&ZEND_NULL_LABEL,
55227 			(void*)&&ZEND_NULL_LABEL,
55228 			(void*)&&ZEND_NULL_LABEL,
55229 			(void*)&&ZEND_NULL_LABEL,
55230 			(void*)&&ZEND_NULL_LABEL,
55231 			(void*)&&ZEND_NULL_LABEL,
55232 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_LABEL,
55233 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
55234 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
55235 			(void*)&&ZEND_NULL_LABEL,
55236 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_LABEL,
55237 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_LABEL,
55238 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
55239 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
55240 			(void*)&&ZEND_NULL_LABEL,
55241 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_LABEL,
55242 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_LABEL,
55243 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
55244 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL,
55245 			(void*)&&ZEND_NULL_LABEL,
55246 			(void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CV_LABEL,
55247 			(void*)&&ZEND_FETCH_IS_SPEC_CONST_UNUSED_LABEL,
55248 			(void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
55249 			(void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL,
55250 			(void*)&&ZEND_NULL_LABEL,
55251 			(void*)&&ZEND_FETCH_IS_SPEC_CV_UNUSED_LABEL,
55252 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_LABEL,
55253 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
55254 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL,
55255 			(void*)&&ZEND_NULL_LABEL,
55256 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CV_LABEL,
55257 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
55258 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55259 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55260 			(void*)&&ZEND_NULL_LABEL,
55261 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
55262 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL,
55263 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55264 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55265 			(void*)&&ZEND_NULL_LABEL,
55266 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL,
55267 			(void*)&&ZEND_NULL_LABEL,
55268 			(void*)&&ZEND_NULL_LABEL,
55269 			(void*)&&ZEND_NULL_LABEL,
55270 			(void*)&&ZEND_NULL_LABEL,
55271 			(void*)&&ZEND_NULL_LABEL,
55272 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CONST_LABEL,
55273 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
55274 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL,
55275 			(void*)&&ZEND_NULL_LABEL,
55276 			(void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CV_LABEL,
55277 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_LABEL,
55278 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
55279 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL,
55280 			(void*)&&ZEND_NULL_LABEL,
55281 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_LABEL,
55282 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
55283 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55284 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55285 			(void*)&&ZEND_NULL_LABEL,
55286 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
55287 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL,
55288 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55289 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL,
55290 			(void*)&&ZEND_NULL_LABEL,
55291 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL,
55292 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_LABEL,
55293 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
55294 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL,
55295 			(void*)&&ZEND_NULL_LABEL,
55296 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_LABEL,
55297 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_LABEL,
55298 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
55299 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL,
55300 			(void*)&&ZEND_NULL_LABEL,
55301 			(void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CV_LABEL,
55302 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
55303 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
55304 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL,
55305 			(void*)&&ZEND_NULL_LABEL,
55306 			(void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
55307 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_LABEL,
55308 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
55309 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
55310 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_LABEL,
55311 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_LABEL,
55312 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_LABEL,
55313 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
55314 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
55315 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_LABEL,
55316 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_LABEL,
55317 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_LABEL,
55318 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
55319 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
55320 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
55321 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_LABEL,
55322 			(void*)&&ZEND_NULL_LABEL,
55323 			(void*)&&ZEND_NULL_LABEL,
55324 			(void*)&&ZEND_NULL_LABEL,
55325 			(void*)&&ZEND_NULL_LABEL,
55326 			(void*)&&ZEND_NULL_LABEL,
55327 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_LABEL,
55328 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
55329 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
55330 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_LABEL,
55331 			(void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_LABEL,
55332 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_LABEL,
55333 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
55334 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
55335 			(void*)&&ZEND_NULL_LABEL,
55336 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_LABEL,
55337 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_LABEL,
55338 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
55339 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
55340 			(void*)&&ZEND_NULL_LABEL,
55341 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_LABEL,
55342 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_LABEL,
55343 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
55344 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
55345 			(void*)&&ZEND_NULL_LABEL,
55346 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_LABEL,
55347 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
55348 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
55349 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
55350 			(void*)&&ZEND_NULL_LABEL,
55351 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_LABEL,
55352 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_LABEL,
55353 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
55354 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL,
55355 			(void*)&&ZEND_NULL_LABEL,
55356 			(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_LABEL,
55357 			(void*)&&ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_LABEL,
55358 			(void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
55359 			(void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL,
55360 			(void*)&&ZEND_NULL_LABEL,
55361 			(void*)&&ZEND_FETCH_UNSET_SPEC_CV_UNUSED_LABEL,
55362 			(void*)&&ZEND_NULL_LABEL,
55363 			(void*)&&ZEND_NULL_LABEL,
55364 			(void*)&&ZEND_NULL_LABEL,
55365 			(void*)&&ZEND_NULL_LABEL,
55366 			(void*)&&ZEND_NULL_LABEL,
55367 			(void*)&&ZEND_NULL_LABEL,
55368 			(void*)&&ZEND_NULL_LABEL,
55369 			(void*)&&ZEND_NULL_LABEL,
55370 			(void*)&&ZEND_NULL_LABEL,
55371 			(void*)&&ZEND_NULL_LABEL,
55372 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_LABEL,
55373 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
55374 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL,
55375 			(void*)&&ZEND_NULL_LABEL,
55376 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_LABEL,
55377 			(void*)&&ZEND_NULL_LABEL,
55378 			(void*)&&ZEND_NULL_LABEL,
55379 			(void*)&&ZEND_NULL_LABEL,
55380 			(void*)&&ZEND_NULL_LABEL,
55381 			(void*)&&ZEND_NULL_LABEL,
55382 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_LABEL,
55383 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
55384 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL,
55385 			(void*)&&ZEND_NULL_LABEL,
55386 			(void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_LABEL,
55387 			(void*)&&ZEND_NULL_LABEL,
55388 			(void*)&&ZEND_NULL_LABEL,
55389 			(void*)&&ZEND_NULL_LABEL,
55390 			(void*)&&ZEND_NULL_LABEL,
55391 			(void*)&&ZEND_NULL_LABEL,
55392 			(void*)&&ZEND_NULL_LABEL,
55393 			(void*)&&ZEND_NULL_LABEL,
55394 			(void*)&&ZEND_NULL_LABEL,
55395 			(void*)&&ZEND_NULL_LABEL,
55396 			(void*)&&ZEND_NULL_LABEL,
55397 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_LABEL,
55398 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
55399 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL,
55400 			(void*)&&ZEND_NULL_LABEL,
55401 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_LABEL,
55402 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_LABEL,
55403 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
55404 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL,
55405 			(void*)&&ZEND_NULL_LABEL,
55406 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_LABEL,
55407 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_LABEL,
55408 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
55409 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL,
55410 			(void*)&&ZEND_NULL_LABEL,
55411 			(void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_LABEL,
55412 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CONST_LABEL,
55413 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
55414 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL,
55415 			(void*)&&ZEND_NULL_LABEL,
55416 			(void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CV_LABEL,
55417 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
55418 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
55419 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
55420 			(void*)&&ZEND_NULL_LABEL,
55421 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
55422 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
55423 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
55424 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
55425 			(void*)&&ZEND_NULL_LABEL,
55426 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
55427 			(void*)&&ZEND_NULL_LABEL,
55428 			(void*)&&ZEND_NULL_LABEL,
55429 			(void*)&&ZEND_NULL_LABEL,
55430 			(void*)&&ZEND_NULL_LABEL,
55431 			(void*)&&ZEND_NULL_LABEL,
55432 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL,
55433 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
55434 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL,
55435 			(void*)&&ZEND_NULL_LABEL,
55436 			(void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL,
55437 			(void*)&&ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_LABEL,
55438 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
55439 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
55440 			(void*)&&ZEND_NULL_LABEL,
55441 			(void*)&&ZEND_NULL_LABEL,
55442 			(void*)&&ZEND_NULL_LABEL,
55443 			(void*)&&ZEND_NULL_LABEL,
55444 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_LABEL,
55445 			(void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_LABEL,
55446 			(void*)&&ZEND_NULL_LABEL,
55447 			(void*)&&ZEND_NULL_LABEL,
55448 			(void*)&&ZEND_EXT_STMT_SPEC_LABEL,
55449 			(void*)&&ZEND_EXT_FCALL_BEGIN_SPEC_LABEL,
55450 			(void*)&&ZEND_EXT_FCALL_END_SPEC_LABEL,
55451 			(void*)&&ZEND_EXT_NOP_SPEC_LABEL,
55452 			(void*)&&ZEND_TICKS_SPEC_LABEL,
55453 			(void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_LABEL,
55454 			(void*)&&ZEND_NULL_LABEL,
55455 			(void*)&&ZEND_NULL_LABEL,
55456 			(void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_LABEL,
55457 			(void*)&&ZEND_NULL_LABEL,
55458 			(void*)&&ZEND_CATCH_SPEC_CONST_LABEL,
55459 			(void*)&&ZEND_THROW_SPEC_CONST_LABEL,
55460 			(void*)&&ZEND_THROW_SPEC_TMPVAR_LABEL,
55461 			(void*)&&ZEND_THROW_SPEC_TMPVAR_LABEL,
55462 			(void*)&&ZEND_NULL_LABEL,
55463 			(void*)&&ZEND_THROW_SPEC_CV_LABEL,
55464 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_LABEL,
55465 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
55466 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL,
55467 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_LABEL,
55468 			(void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CV_LABEL,
55469 			(void*)&&ZEND_CLONE_SPEC_CONST_LABEL,
55470 			(void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
55471 			(void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL,
55472 			(void*)&&ZEND_CLONE_SPEC_UNUSED_LABEL,
55473 			(void*)&&ZEND_CLONE_SPEC_CV_LABEL,
55474 			(void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_LABEL,
55475 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
55476 			(void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_LABEL,
55477 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
55478 			(void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_LABEL,
55479 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
55480 			(void*)&&ZEND_NULL_LABEL,
55481 			(void*)&&ZEND_NULL_LABEL,
55482 			(void*)&&ZEND_RETURN_BY_REF_SPEC_CV_LABEL,
55483 			(void*)&&ZEND_RETURN_BY_REF_SPEC_OBSERVER_LABEL,
55484 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_LABEL,
55485 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
55486 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
55487 			(void*)&&ZEND_NULL_LABEL,
55488 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_LABEL,
55489 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
55490 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
55491 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
55492 			(void*)&&ZEND_NULL_LABEL,
55493 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
55494 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL,
55495 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
55496 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL,
55497 			(void*)&&ZEND_NULL_LABEL,
55498 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL,
55499 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
55500 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
55501 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
55502 			(void*)&&ZEND_NULL_LABEL,
55503 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
55504 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_LABEL,
55505 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
55506 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL,
55507 			(void*)&&ZEND_NULL_LABEL,
55508 			(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CV_LABEL,
55509 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_LABEL,
55510 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
55511 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
55512 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_LABEL,
55513 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_LABEL,
55514 			(void*)&&ZEND_NULL_LABEL,
55515 			(void*)&&ZEND_NULL_LABEL,
55516 			(void*)&&ZEND_NULL_LABEL,
55517 			(void*)&&ZEND_NULL_LABEL,
55518 			(void*)&&ZEND_NULL_LABEL,
55519 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_LABEL,
55520 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
55521 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL,
55522 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_LABEL,
55523 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_LABEL,
55524 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_LABEL,
55525 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
55526 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL,
55527 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_LABEL,
55528 			(void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_LABEL,
55529 			(void*)&&ZEND_NULL_LABEL,
55530 			(void*)&&ZEND_NULL_LABEL,
55531 			(void*)&&ZEND_NULL_LABEL,
55532 			(void*)&&ZEND_NULL_LABEL,
55533 			(void*)&&ZEND_NULL_LABEL,
55534 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_LABEL,
55535 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
55536 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL,
55537 			(void*)&&ZEND_NULL_LABEL,
55538 			(void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_LABEL,
55539 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_LABEL,
55540 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
55541 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL,
55542 			(void*)&&ZEND_NULL_LABEL,
55543 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_LABEL,
55544 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
55545 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
55546 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
55547 			(void*)&&ZEND_NULL_LABEL,
55548 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
55549 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL,
55550 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
55551 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
55552 			(void*)&&ZEND_NULL_LABEL,
55553 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL,
55554 			(void*)&&ZEND_NULL_LABEL,
55555 			(void*)&&ZEND_NULL_LABEL,
55556 			(void*)&&ZEND_NULL_LABEL,
55557 			(void*)&&ZEND_NULL_LABEL,
55558 			(void*)&&ZEND_NULL_LABEL,
55559 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_LABEL,
55560 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
55561 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL,
55562 			(void*)&&ZEND_NULL_LABEL,
55563 			(void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_LABEL,
55564 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_CONST_LABEL,
55565 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_CONST_LABEL,
55566 			(void*)&&ZEND_NULL_LABEL,
55567 			(void*)&&ZEND_NULL_LABEL,
55568 			(void*)&&ZEND_NULL_LABEL,
55569 			(void*)&&ZEND_NULL_LABEL,
55570 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_LABEL,
55571 			(void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_LABEL,
55572 			(void*)&&ZEND_NULL_LABEL,
55573 			(void*)&&ZEND_NULL_LABEL,
55574 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_CONST_LABEL,
55575 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_CONST_LABEL,
55576 			(void*)&&ZEND_NULL_LABEL,
55577 			(void*)&&ZEND_NULL_LABEL,
55578 			(void*)&&ZEND_NULL_LABEL,
55579 			(void*)&&ZEND_NULL_LABEL,
55580 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_LABEL,
55581 			(void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_LABEL,
55582 			(void*)&&ZEND_NULL_LABEL,
55583 			(void*)&&ZEND_NULL_LABEL,
55584 			(void*)&&ZEND_NULL_LABEL,
55585 			(void*)&&ZEND_NULL_LABEL,
55586 			(void*)&&ZEND_NULL_LABEL,
55587 			(void*)&&ZEND_NULL_LABEL,
55588 			(void*)&&ZEND_NULL_LABEL,
55589 			(void*)&&ZEND_NULL_LABEL,
55590 			(void*)&&ZEND_NULL_LABEL,
55591 			(void*)&&ZEND_NULL_LABEL,
55592 			(void*)&&ZEND_NULL_LABEL,
55593 			(void*)&&ZEND_NULL_LABEL,
55594 			(void*)&&ZEND_NULL_LABEL,
55595 			(void*)&&ZEND_NULL_LABEL,
55596 			(void*)&&ZEND_NULL_LABEL,
55597 			(void*)&&ZEND_NULL_LABEL,
55598 			(void*)&&ZEND_NULL_LABEL,
55599 			(void*)&&ZEND_NULL_LABEL,
55600 			(void*)&&ZEND_NULL_LABEL,
55601 			(void*)&&ZEND_NULL_LABEL,
55602 			(void*)&&ZEND_NULL_LABEL,
55603 			(void*)&&ZEND_NULL_LABEL,
55604 			(void*)&&ZEND_NULL_LABEL,
55605 			(void*)&&ZEND_NULL_LABEL,
55606 			(void*)&&ZEND_NULL_LABEL,
55607 			(void*)&&ZEND_NULL_LABEL,
55608 			(void*)&&ZEND_NULL_LABEL,
55609 			(void*)&&ZEND_NULL_LABEL,
55610 			(void*)&&ZEND_NULL_LABEL,
55611 			(void*)&&ZEND_NULL_LABEL,
55612 			(void*)&&ZEND_NULL_LABEL,
55613 			(void*)&&ZEND_NULL_LABEL,
55614 			(void*)&&ZEND_NULL_LABEL,
55615 			(void*)&&ZEND_NULL_LABEL,
55616 			(void*)&&ZEND_NULL_LABEL,
55617 			(void*)&&ZEND_NULL_LABEL,
55618 			(void*)&&ZEND_NULL_LABEL,
55619 			(void*)&&ZEND_NULL_LABEL,
55620 			(void*)&&ZEND_NULL_LABEL,
55621 			(void*)&&ZEND_NULL_LABEL,
55622 			(void*)&&ZEND_NULL_LABEL,
55623 			(void*)&&ZEND_NULL_LABEL,
55624 			(void*)&&ZEND_SEND_VAR_SPEC_VAR_CONST_LABEL,
55625 			(void*)&&ZEND_NULL_LABEL,
55626 			(void*)&&ZEND_NULL_LABEL,
55627 			(void*)&&ZEND_SEND_VAR_SPEC_VAR_UNUSED_LABEL,
55628 			(void*)&&ZEND_NULL_LABEL,
55629 			(void*)&&ZEND_NULL_LABEL,
55630 			(void*)&&ZEND_NULL_LABEL,
55631 			(void*)&&ZEND_NULL_LABEL,
55632 			(void*)&&ZEND_NULL_LABEL,
55633 			(void*)&&ZEND_NULL_LABEL,
55634 			(void*)&&ZEND_SEND_VAR_SPEC_CV_CONST_LABEL,
55635 			(void*)&&ZEND_NULL_LABEL,
55636 			(void*)&&ZEND_NULL_LABEL,
55637 			(void*)&&ZEND_SEND_VAR_SPEC_CV_UNUSED_LABEL,
55638 			(void*)&&ZEND_NULL_LABEL,
55639 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CONST_LABEL,
55640 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
55641 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL,
55642 			(void*)&&ZEND_NULL_LABEL,
55643 			(void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CV_LABEL,
55644 			(void*)&&ZEND_SEND_ARRAY_SPEC_LABEL,
55645 			(void*)&&ZEND_SEND_USER_SPEC_CONST_LABEL,
55646 			(void*)&&ZEND_SEND_USER_SPEC_TMP_LABEL,
55647 			(void*)&&ZEND_SEND_USER_SPEC_VAR_LABEL,
55648 			(void*)&&ZEND_NULL_LABEL,
55649 			(void*)&&ZEND_SEND_USER_SPEC_CV_LABEL,
55650 			(void*)&&ZEND_STRLEN_SPEC_CONST_LABEL,
55651 			(void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
55652 			(void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL,
55653 			(void*)&&ZEND_NULL_LABEL,
55654 			(void*)&&ZEND_STRLEN_SPEC_CV_LABEL,
55655 			(void*)&&ZEND_DEFINED_SPEC_CONST_LABEL,
55656 			(void*)&&ZEND_TYPE_CHECK_SPEC_CONST_LABEL,
55657 			(void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
55658 			(void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL,
55659 			(void*)&&ZEND_NULL_LABEL,
55660 			(void*)&&ZEND_TYPE_CHECK_SPEC_CV_LABEL,
55661 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_LABEL,
55662 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_LABEL,
55663 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_LABEL,
55664 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_LABEL,
55665 			(void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_LABEL,
55666 			(void*)&&ZEND_FE_RESET_RW_SPEC_CONST_LABEL,
55667 			(void*)&&ZEND_FE_RESET_RW_SPEC_TMP_LABEL,
55668 			(void*)&&ZEND_FE_RESET_RW_SPEC_VAR_LABEL,
55669 			(void*)&&ZEND_NULL_LABEL,
55670 			(void*)&&ZEND_FE_RESET_RW_SPEC_CV_LABEL,
55671 			(void*)&&ZEND_FE_FETCH_RW_SPEC_VAR_LABEL,
55672 			(void*)&&ZEND_FE_FREE_SPEC_TMPVAR_LABEL,
55673 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_LABEL,
55674 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
55675 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL,
55676 			(void*)&&ZEND_NULL_LABEL,
55677 			(void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CV_LABEL,
55678 			(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_LABEL,
55679 			(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_USED_LABEL,
55680 			(void*)&&ZEND_DO_ICALL_SPEC_OBSERVER_LABEL,
55681 			(void*)&&ZEND_DO_ICALL_SPEC_OBSERVER_LABEL,
55682 			(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_LABEL,
55683 			(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_LABEL,
55684 			(void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
55685 			(void*)&&ZEND_DO_UCALL_SPEC_OBSERVER_LABEL,
55686 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_LABEL,
55687 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_LABEL,
55688 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL,
55689 			(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_LABEL,
55690 			(void*)&&ZEND_NULL_LABEL,
55691 			(void*)&&ZEND_NULL_LABEL,
55692 			(void*)&&ZEND_NULL_LABEL,
55693 			(void*)&&ZEND_NULL_LABEL,
55694 			(void*)&&ZEND_NULL_LABEL,
55695 			(void*)&&ZEND_NULL_LABEL,
55696 			(void*)&&ZEND_NULL_LABEL,
55697 			(void*)&&ZEND_NULL_LABEL,
55698 			(void*)&&ZEND_NULL_LABEL,
55699 			(void*)&&ZEND_NULL_LABEL,
55700 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_LABEL,
55701 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
55702 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
55703 			(void*)&&ZEND_NULL_LABEL,
55704 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CV_LABEL,
55705 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
55706 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
55707 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
55708 			(void*)&&ZEND_NULL_LABEL,
55709 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_LABEL,
55710 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CONST_LABEL,
55711 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
55712 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
55713 			(void*)&&ZEND_NULL_LABEL,
55714 			(void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CV_LABEL,
55715 			(void*)&&ZEND_NULL_LABEL,
55716 			(void*)&&ZEND_NULL_LABEL,
55717 			(void*)&&ZEND_NULL_LABEL,
55718 			(void*)&&ZEND_NULL_LABEL,
55719 			(void*)&&ZEND_NULL_LABEL,
55720 			(void*)&&ZEND_NULL_LABEL,
55721 			(void*)&&ZEND_NULL_LABEL,
55722 			(void*)&&ZEND_NULL_LABEL,
55723 			(void*)&&ZEND_NULL_LABEL,
55724 			(void*)&&ZEND_NULL_LABEL,
55725 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CONST_LABEL,
55726 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
55727 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
55728 			(void*)&&ZEND_NULL_LABEL,
55729 			(void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CV_LABEL,
55730 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
55731 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
55732 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
55733 			(void*)&&ZEND_NULL_LABEL,
55734 			(void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_LABEL,
55735 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CONST_LABEL,
55736 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
55737 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL,
55738 			(void*)&&ZEND_NULL_LABEL,
55739 			(void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CV_LABEL,
55740 			(void*)&&ZEND_ECHO_SPEC_CONST_LABEL,
55741 			(void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
55742 			(void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL,
55743 			(void*)&&ZEND_NULL_LABEL,
55744 			(void*)&&ZEND_ECHO_SPEC_CV_LABEL,
55745 			(void*)&&ZEND_NULL_LABEL,
55746 			(void*)&&ZEND_NULL_LABEL,
55747 			(void*)&&ZEND_NULL_LABEL,
55748 			(void*)&&ZEND_NULL_LABEL,
55749 			(void*)&&ZEND_NULL_LABEL,
55750 			(void*)&&ZEND_NULL_LABEL,
55751 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
55752 			(void*)&&ZEND_NULL_LABEL,
55753 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
55754 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
55755 			(void*)&&ZEND_NULL_LABEL,
55756 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL,
55757 			(void*)&&ZEND_NULL_LABEL,
55758 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL,
55759 			(void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL,
55760 			(void*)&&ZEND_NULL_LABEL,
55761 			(void*)&&ZEND_NULL_LABEL,
55762 			(void*)&&ZEND_NULL_LABEL,
55763 			(void*)&&ZEND_NULL_LABEL,
55764 			(void*)&&ZEND_NULL_LABEL,
55765 			(void*)&&ZEND_NULL_LABEL,
55766 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_CONST_LABEL,
55767 			(void*)&&ZEND_NULL_LABEL,
55768 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_VAR_LABEL,
55769 			(void*)&&ZEND_INSTANCEOF_SPEC_CV_UNUSED_LABEL,
55770 			(void*)&&ZEND_NULL_LABEL,
55771 			(void*)&&ZEND_GENERATOR_CREATE_SPEC_LABEL,
55772 			(void*)&&ZEND_NULL_LABEL,
55773 			(void*)&&ZEND_NULL_LABEL,
55774 			(void*)&&ZEND_MAKE_REF_SPEC_VAR_UNUSED_LABEL,
55775 			(void*)&&ZEND_NULL_LABEL,
55776 			(void*)&&ZEND_MAKE_REF_SPEC_CV_UNUSED_LABEL,
55777 			(void*)&&ZEND_DECLARE_FUNCTION_SPEC_LABEL,
55778 			(void*)&&ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_LABEL,
55779 			(void*)&&ZEND_DECLARE_CONST_SPEC_CONST_CONST_LABEL,
55780 			(void*)&&ZEND_DECLARE_CLASS_SPEC_CONST_LABEL,
55781 			(void*)&&ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_LABEL,
55782 			(void*)&&ZEND_DECLARE_ANON_CLASS_SPEC_LABEL,
55783 			(void*)&&ZEND_ADD_ARRAY_UNPACK_SPEC_LABEL,
55784 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_LABEL,
55785 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
55786 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL,
55787 			(void*)&&ZEND_NULL_LABEL,
55788 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_LABEL,
55789 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
55790 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
55791 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
55792 			(void*)&&ZEND_NULL_LABEL,
55793 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
55794 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL,
55795 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
55796 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
55797 			(void*)&&ZEND_NULL_LABEL,
55798 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL,
55799 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_LABEL,
55800 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
55801 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
55802 			(void*)&&ZEND_NULL_LABEL,
55803 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_LABEL,
55804 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_LABEL,
55805 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
55806 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL,
55807 			(void*)&&ZEND_NULL_LABEL,
55808 			(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_LABEL,
55809 			(void*)&&ZEND_HANDLE_EXCEPTION_SPEC_LABEL,
55810 			(void*)&&ZEND_USER_OPCODE_SPEC_LABEL,
55811 			(void*)&&ZEND_ASSERT_CHECK_SPEC_LABEL,
55812 			(void*)&&ZEND_JMP_SET_SPEC_CONST_LABEL,
55813 			(void*)&&ZEND_JMP_SET_SPEC_TMP_LABEL,
55814 			(void*)&&ZEND_JMP_SET_SPEC_VAR_LABEL,
55815 			(void*)&&ZEND_NULL_LABEL,
55816 			(void*)&&ZEND_JMP_SET_SPEC_CV_LABEL,
55817 			(void*)&&ZEND_UNSET_CV_SPEC_CV_UNUSED_LABEL,
55818 			(void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_LABEL,
55819 			(void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_LABEL,
55820 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CONST_LABEL,
55821 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
55822 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL,
55823 			(void*)&&ZEND_NULL_LABEL,
55824 			(void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CV_LABEL,
55825 			(void*)&&ZEND_SEPARATE_SPEC_VAR_UNUSED_LABEL,
55826 			(void*)&&ZEND_NULL_LABEL,
55827 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_LABEL,
55828 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_LABEL,
55829 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_LABEL,
55830 			(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_CV_LABEL,
55831 			(void*)&&ZEND_CALL_TRAMPOLINE_SPEC_LABEL,
55832 			(void*)&&ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_LABEL,
55833 			(void*)&&ZEND_DISCARD_EXCEPTION_SPEC_LABEL,
55834 			(void*)&&ZEND_YIELD_SPEC_CONST_CONST_LABEL,
55835 			(void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
55836 			(void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
55837 			(void*)&&ZEND_YIELD_SPEC_CONST_UNUSED_LABEL,
55838 			(void*)&&ZEND_YIELD_SPEC_CONST_CV_LABEL,
55839 			(void*)&&ZEND_YIELD_SPEC_TMP_CONST_LABEL,
55840 			(void*)&&ZEND_YIELD_SPEC_TMP_TMPVAR_LABEL,
55841 			(void*)&&ZEND_YIELD_SPEC_TMP_TMPVAR_LABEL,
55842 			(void*)&&ZEND_YIELD_SPEC_TMP_UNUSED_LABEL,
55843 			(void*)&&ZEND_YIELD_SPEC_TMP_CV_LABEL,
55844 			(void*)&&ZEND_YIELD_SPEC_VAR_CONST_LABEL,
55845 			(void*)&&ZEND_YIELD_SPEC_VAR_TMPVAR_LABEL,
55846 			(void*)&&ZEND_YIELD_SPEC_VAR_TMPVAR_LABEL,
55847 			(void*)&&ZEND_YIELD_SPEC_VAR_UNUSED_LABEL,
55848 			(void*)&&ZEND_YIELD_SPEC_VAR_CV_LABEL,
55849 			(void*)&&ZEND_YIELD_SPEC_UNUSED_CONST_LABEL,
55850 			(void*)&&ZEND_YIELD_SPEC_UNUSED_TMPVAR_LABEL,
55851 			(void*)&&ZEND_YIELD_SPEC_UNUSED_TMPVAR_LABEL,
55852 			(void*)&&ZEND_YIELD_SPEC_UNUSED_UNUSED_LABEL,
55853 			(void*)&&ZEND_YIELD_SPEC_UNUSED_CV_LABEL,
55854 			(void*)&&ZEND_YIELD_SPEC_CV_CONST_LABEL,
55855 			(void*)&&ZEND_YIELD_SPEC_CV_TMPVAR_LABEL,
55856 			(void*)&&ZEND_YIELD_SPEC_CV_TMPVAR_LABEL,
55857 			(void*)&&ZEND_YIELD_SPEC_CV_UNUSED_LABEL,
55858 			(void*)&&ZEND_YIELD_SPEC_CV_CV_LABEL,
55859 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_LABEL,
55860 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
55861 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_LABEL,
55862 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
55863 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_LABEL,
55864 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
55865 			(void*)&&ZEND_NULL_LABEL,
55866 			(void*)&&ZEND_NULL_LABEL,
55867 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_LABEL,
55868 			(void*)&&ZEND_GENERATOR_RETURN_SPEC_OBSERVER_LABEL,
55869 			(void*)&&ZEND_FAST_CALL_SPEC_LABEL,
55870 			(void*)&&ZEND_FAST_RET_SPEC_LABEL,
55871 			(void*)&&ZEND_RECV_VARIADIC_SPEC_UNUSED_LABEL,
55872 			(void*)&&ZEND_SEND_UNPACK_SPEC_LABEL,
55873 			(void*)&&ZEND_YIELD_FROM_SPEC_CONST_LABEL,
55874 			(void*)&&ZEND_YIELD_FROM_SPEC_TMPVAR_LABEL,
55875 			(void*)&&ZEND_YIELD_FROM_SPEC_TMPVAR_LABEL,
55876 			(void*)&&ZEND_NULL_LABEL,
55877 			(void*)&&ZEND_YIELD_FROM_SPEC_CV_LABEL,
55878 			(void*)&&ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_LABEL,
55879 			(void*)&&ZEND_BIND_GLOBAL_SPEC_CV_CONST_LABEL,
55880 			(void*)&&ZEND_COALESCE_SPEC_CONST_LABEL,
55881 			(void*)&&ZEND_COALESCE_SPEC_TMP_LABEL,
55882 			(void*)&&ZEND_COALESCE_SPEC_VAR_LABEL,
55883 			(void*)&&ZEND_NULL_LABEL,
55884 			(void*)&&ZEND_COALESCE_SPEC_CV_LABEL,
55885 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_CONST_LABEL,
55886 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
55887 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL,
55888 			(void*)&&ZEND_NULL_LABEL,
55889 			(void*)&&ZEND_SPACESHIP_SPEC_CONST_CV_LABEL,
55890 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
55891 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
55892 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
55893 			(void*)&&ZEND_NULL_LABEL,
55894 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
55895 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL,
55896 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
55897 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL,
55898 			(void*)&&ZEND_NULL_LABEL,
55899 			(void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL,
55900 			(void*)&&ZEND_NULL_LABEL,
55901 			(void*)&&ZEND_NULL_LABEL,
55902 			(void*)&&ZEND_NULL_LABEL,
55903 			(void*)&&ZEND_NULL_LABEL,
55904 			(void*)&&ZEND_NULL_LABEL,
55905 			(void*)&&ZEND_SPACESHIP_SPEC_CV_CONST_LABEL,
55906 			(void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
55907 			(void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL,
55908 			(void*)&&ZEND_NULL_LABEL,
55909 			(void*)&&ZEND_SPACESHIP_SPEC_CV_CV_LABEL,
55910 			(void*)&&ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_LABEL,
55911 			(void*)&&ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_LABEL,
55912 			(void*)&&ZEND_NULL_LABEL,
55913 			(void*)&&ZEND_NULL_LABEL,
55914 			(void*)&&ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_LABEL,
55915 			(void*)&&ZEND_NULL_LABEL,
55916 			(void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_LABEL,
55917 			(void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_LABEL,
55918 			(void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_LABEL,
55919 			(void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_LABEL,
55920 			(void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_LABEL,
55921 			(void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_LABEL,
55922 			(void*)&&ZEND_UNSET_STATIC_PROP_SPEC_LABEL,
55923 			(void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_LABEL,
55924 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_LABEL,
55925 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_LABEL,
55926 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_LABEL,
55927 			(void*)&&ZEND_NULL_LABEL,
55928 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_LABEL,
55929 			(void*)&&ZEND_NULL_LABEL,
55930 			(void*)&&ZEND_NULL_LABEL,
55931 			(void*)&&ZEND_NULL_LABEL,
55932 			(void*)&&ZEND_NULL_LABEL,
55933 			(void*)&&ZEND_NULL_LABEL,
55934 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_LABEL,
55935 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_LABEL,
55936 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_LABEL,
55937 			(void*)&&ZEND_NULL_LABEL,
55938 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_LABEL,
55939 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_LABEL,
55940 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_LABEL,
55941 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_LABEL,
55942 			(void*)&&ZEND_NULL_LABEL,
55943 			(void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_LABEL,
55944 			(void*)&&ZEND_NULL_LABEL,
55945 			(void*)&&ZEND_NULL_LABEL,
55946 			(void*)&&ZEND_NULL_LABEL,
55947 			(void*)&&ZEND_NULL_LABEL,
55948 			(void*)&&ZEND_NULL_LABEL,
55949 			(void*)&&ZEND_BIND_LEXICAL_SPEC_TMP_CV_LABEL,
55950 			(void*)&&ZEND_BIND_STATIC_SPEC_CV_LABEL,
55951 			(void*)&&ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_LABEL,
55952 			(void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_LABEL,
55953 			(void*)&&ZEND_NULL_LABEL,
55954 			(void*)&&ZEND_NULL_LABEL,
55955 			(void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_LABEL,
55956 			(void*)&&ZEND_NULL_LABEL,
55957 			(void*)&&ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_LABEL,
55958 			(void*)&&ZEND_SWITCH_LONG_SPEC_CONST_CONST_LABEL,
55959 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
55960 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
55961 			(void*)&&ZEND_NULL_LABEL,
55962 			(void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL,
55963 			(void*)&&ZEND_SWITCH_STRING_SPEC_CONST_CONST_LABEL,
55964 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
55965 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
55966 			(void*)&&ZEND_NULL_LABEL,
55967 			(void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL,
55968 			(void*)&&ZEND_IN_ARRAY_SPEC_CONST_CONST_LABEL,
55969 			(void*)&&ZEND_IN_ARRAY_SPEC_TMP_CONST_LABEL,
55970 			(void*)&&ZEND_IN_ARRAY_SPEC_VAR_CONST_LABEL,
55971 			(void*)&&ZEND_NULL_LABEL,
55972 			(void*)&&ZEND_IN_ARRAY_SPEC_CV_CONST_LABEL,
55973 			(void*)&&ZEND_COUNT_SPEC_CONST_UNUSED_LABEL,
55974 			(void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
55975 			(void*)&&ZEND_COUNT_SPEC_TMPVAR_UNUSED_LABEL,
55976 			(void*)&&ZEND_NULL_LABEL,
55977 			(void*)&&ZEND_COUNT_SPEC_CV_UNUSED_LABEL,
55978 			(void*)&&ZEND_GET_CLASS_SPEC_CONST_UNUSED_LABEL,
55979 			(void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
55980 			(void*)&&ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_LABEL,
55981 			(void*)&&ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_LABEL,
55982 			(void*)&&ZEND_GET_CLASS_SPEC_CV_UNUSED_LABEL,
55983 			(void*)&&ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_LABEL,
55984 			(void*)&&ZEND_GET_TYPE_SPEC_CONST_UNUSED_LABEL,
55985 			(void*)&&ZEND_GET_TYPE_SPEC_TMP_UNUSED_LABEL,
55986 			(void*)&&ZEND_GET_TYPE_SPEC_VAR_UNUSED_LABEL,
55987 			(void*)&&ZEND_NULL_LABEL,
55988 			(void*)&&ZEND_GET_TYPE_SPEC_CV_UNUSED_LABEL,
55989 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_LABEL,
55990 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
55991 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_LABEL,
55992 			(void*)&&ZEND_NULL_LABEL,
55993 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_LABEL,
55994 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
55995 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
55996 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
55997 			(void*)&&ZEND_NULL_LABEL,
55998 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
55999 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_LABEL,
56000 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
56001 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_LABEL,
56002 			(void*)&&ZEND_NULL_LABEL,
56003 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_LABEL,
56004 			(void*)&&ZEND_NULL_LABEL,
56005 			(void*)&&ZEND_NULL_LABEL,
56006 			(void*)&&ZEND_NULL_LABEL,
56007 			(void*)&&ZEND_NULL_LABEL,
56008 			(void*)&&ZEND_NULL_LABEL,
56009 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_LABEL,
56010 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
56011 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_LABEL,
56012 			(void*)&&ZEND_NULL_LABEL,
56013 			(void*)&&ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_LABEL,
56014 			(void*)&&ZEND_MATCH_SPEC_CONST_CONST_LABEL,
56015 			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
56016 			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
56017 			(void*)&&ZEND_NULL_LABEL,
56018 			(void*)&&ZEND_MATCH_SPEC_TMPVARCV_CONST_LABEL,
56019 			(void*)&&ZEND_NULL_LABEL,
56020 			(void*)&&ZEND_NULL_LABEL,
56021 			(void*)&&ZEND_NULL_LABEL,
56022 			(void*)&&ZEND_NULL_LABEL,
56023 			(void*)&&ZEND_NULL_LABEL,
56024 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_CONST_LABEL,
56025 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_TMP_LABEL,
56026 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_VAR_LABEL,
56027 			(void*)&&ZEND_NULL_LABEL,
56028 			(void*)&&ZEND_CASE_STRICT_SPEC_TMP_CV_LABEL,
56029 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_CONST_LABEL,
56030 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_TMP_LABEL,
56031 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_VAR_LABEL,
56032 			(void*)&&ZEND_NULL_LABEL,
56033 			(void*)&&ZEND_CASE_STRICT_SPEC_VAR_CV_LABEL,
56034 			(void*)&&ZEND_NULL_LABEL,
56035 			(void*)&&ZEND_NULL_LABEL,
56036 			(void*)&&ZEND_NULL_LABEL,
56037 			(void*)&&ZEND_NULL_LABEL,
56038 			(void*)&&ZEND_NULL_LABEL,
56039 			(void*)&&ZEND_NULL_LABEL,
56040 			(void*)&&ZEND_NULL_LABEL,
56041 			(void*)&&ZEND_NULL_LABEL,
56042 			(void*)&&ZEND_NULL_LABEL,
56043 			(void*)&&ZEND_NULL_LABEL,
56044 			(void*)&&ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_LABEL,
56045 			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
56046 			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
56047 			(void*)&&ZEND_NULL_LABEL,
56048 			(void*)&&ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_LABEL,
56049 			(void*)&&ZEND_JMP_NULL_SPEC_CONST_LABEL,
56050 			(void*)&&ZEND_JMP_NULL_SPEC_TMP_LABEL,
56051 			(void*)&&ZEND_JMP_NULL_SPEC_VAR_LABEL,
56052 			(void*)&&ZEND_NULL_LABEL,
56053 			(void*)&&ZEND_JMP_NULL_SPEC_CV_LABEL,
56054 			(void*)&&ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_LABEL,
56055 			(void*)&&ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_LABEL,
56056 			(void*)&&ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_LABEL,
56057 			(void*)&&ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_LABEL,
56058 			(void*)&&ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_LABEL,
56059 			(void*)&&ZEND_RECV_NOTYPE_SPEC_LABEL,
56060 			(void*)&&ZEND_NULL_LABEL,
56061 			(void*)&&ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_LABEL,
56062 			(void*)&&ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_LABEL,
56063 			(void*)&&ZEND_NULL_LABEL,
56064 			(void*)&&ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_LABEL,
56065 			(void*)&&ZEND_JMP_FORWARD_SPEC_LABEL,
56066 			(void*)&&ZEND_NULL_LABEL,
56067 			(void*)&&ZEND_NULL_LABEL,
56068 			(void*)&&ZEND_NULL_LABEL,
56069 			(void*)&&ZEND_NULL_LABEL,
56070 			(void*)&&ZEND_NULL_LABEL,
56071 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56072 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56073 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56074 			(void*)&&ZEND_NULL_LABEL,
56075 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56076 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56077 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56078 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56079 			(void*)&&ZEND_NULL_LABEL,
56080 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56081 			(void*)&&ZEND_NULL_LABEL,
56082 			(void*)&&ZEND_NULL_LABEL,
56083 			(void*)&&ZEND_NULL_LABEL,
56084 			(void*)&&ZEND_NULL_LABEL,
56085 			(void*)&&ZEND_NULL_LABEL,
56086 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56087 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56088 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56089 			(void*)&&ZEND_NULL_LABEL,
56090 			(void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56091 			(void*)&&ZEND_NULL_LABEL,
56092 			(void*)&&ZEND_NULL_LABEL,
56093 			(void*)&&ZEND_NULL_LABEL,
56094 			(void*)&&ZEND_NULL_LABEL,
56095 			(void*)&&ZEND_NULL_LABEL,
56096 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
56097 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56098 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56099 			(void*)&&ZEND_NULL_LABEL,
56100 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56101 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
56102 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56103 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56104 			(void*)&&ZEND_NULL_LABEL,
56105 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56106 			(void*)&&ZEND_NULL_LABEL,
56107 			(void*)&&ZEND_NULL_LABEL,
56108 			(void*)&&ZEND_NULL_LABEL,
56109 			(void*)&&ZEND_NULL_LABEL,
56110 			(void*)&&ZEND_NULL_LABEL,
56111 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL,
56112 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56113 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56114 			(void*)&&ZEND_NULL_LABEL,
56115 			(void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56116 			(void*)&&ZEND_NULL_LABEL,
56117 			(void*)&&ZEND_NULL_LABEL,
56118 			(void*)&&ZEND_NULL_LABEL,
56119 			(void*)&&ZEND_NULL_LABEL,
56120 			(void*)&&ZEND_NULL_LABEL,
56121 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56122 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56123 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56124 			(void*)&&ZEND_NULL_LABEL,
56125 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56126 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56127 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56128 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56129 			(void*)&&ZEND_NULL_LABEL,
56130 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56131 			(void*)&&ZEND_NULL_LABEL,
56132 			(void*)&&ZEND_NULL_LABEL,
56133 			(void*)&&ZEND_NULL_LABEL,
56134 			(void*)&&ZEND_NULL_LABEL,
56135 			(void*)&&ZEND_NULL_LABEL,
56136 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56137 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56138 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56139 			(void*)&&ZEND_NULL_LABEL,
56140 			(void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56141 			(void*)&&ZEND_NULL_LABEL,
56142 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
56143 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
56144 			(void*)&&ZEND_NULL_LABEL,
56145 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL,
56146 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56147 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56148 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56149 			(void*)&&ZEND_NULL_LABEL,
56150 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56151 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56152 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56153 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56154 			(void*)&&ZEND_NULL_LABEL,
56155 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56156 			(void*)&&ZEND_NULL_LABEL,
56157 			(void*)&&ZEND_NULL_LABEL,
56158 			(void*)&&ZEND_NULL_LABEL,
56159 			(void*)&&ZEND_NULL_LABEL,
56160 			(void*)&&ZEND_NULL_LABEL,
56161 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56162 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56163 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56164 			(void*)&&ZEND_NULL_LABEL,
56165 			(void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56166 			(void*)&&ZEND_NULL_LABEL,
56167 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
56168 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
56169 			(void*)&&ZEND_NULL_LABEL,
56170 			(void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL,
56171 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
56172 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56173 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56174 			(void*)&&ZEND_NULL_LABEL,
56175 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56176 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
56177 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56178 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56179 			(void*)&&ZEND_NULL_LABEL,
56180 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56181 			(void*)&&ZEND_NULL_LABEL,
56182 			(void*)&&ZEND_NULL_LABEL,
56183 			(void*)&&ZEND_NULL_LABEL,
56184 			(void*)&&ZEND_NULL_LABEL,
56185 			(void*)&&ZEND_NULL_LABEL,
56186 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL,
56187 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56188 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56189 			(void*)&&ZEND_NULL_LABEL,
56190 			(void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56191 			(void*)&&ZEND_NULL_LABEL,
56192 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56193 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56194 			(void*)&&ZEND_NULL_LABEL,
56195 			(void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56196 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56197 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56198 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56199 			(void*)&&ZEND_NULL_LABEL,
56200 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56201 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56202 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56203 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56204 			(void*)&&ZEND_NULL_LABEL,
56205 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56206 			(void*)&&ZEND_NULL_LABEL,
56207 			(void*)&&ZEND_NULL_LABEL,
56208 			(void*)&&ZEND_NULL_LABEL,
56209 			(void*)&&ZEND_NULL_LABEL,
56210 			(void*)&&ZEND_NULL_LABEL,
56211 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56212 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56213 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56214 			(void*)&&ZEND_NULL_LABEL,
56215 			(void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56216 			(void*)&&ZEND_NULL_LABEL,
56217 			(void*)&&ZEND_NULL_LABEL,
56218 			(void*)&&ZEND_NULL_LABEL,
56219 			(void*)&&ZEND_NULL_LABEL,
56220 			(void*)&&ZEND_NULL_LABEL,
56221 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56222 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56223 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56224 			(void*)&&ZEND_NULL_LABEL,
56225 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56226 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56227 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56228 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56229 			(void*)&&ZEND_NULL_LABEL,
56230 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56231 			(void*)&&ZEND_NULL_LABEL,
56232 			(void*)&&ZEND_NULL_LABEL,
56233 			(void*)&&ZEND_NULL_LABEL,
56234 			(void*)&&ZEND_NULL_LABEL,
56235 			(void*)&&ZEND_NULL_LABEL,
56236 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL,
56237 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56238 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56239 			(void*)&&ZEND_NULL_LABEL,
56240 			(void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL,
56241 			(void*)&&ZEND_NULL_LABEL,
56242 			(void*)&&ZEND_NULL_LABEL,
56243 			(void*)&&ZEND_NULL_LABEL,
56244 			(void*)&&ZEND_NULL_LABEL,
56245 			(void*)&&ZEND_NULL_LABEL,
56246 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56247 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56248 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56249 			(void*)&&ZEND_NULL_LABEL,
56250 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56251 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56252 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56253 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56254 			(void*)&&ZEND_NULL_LABEL,
56255 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56256 			(void*)&&ZEND_NULL_LABEL,
56257 			(void*)&&ZEND_NULL_LABEL,
56258 			(void*)&&ZEND_NULL_LABEL,
56259 			(void*)&&ZEND_NULL_LABEL,
56260 			(void*)&&ZEND_NULL_LABEL,
56261 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56262 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56263 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56264 			(void*)&&ZEND_NULL_LABEL,
56265 			(void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56266 			(void*)&&ZEND_NULL_LABEL,
56267 			(void*)&&ZEND_NULL_LABEL,
56268 			(void*)&&ZEND_NULL_LABEL,
56269 			(void*)&&ZEND_NULL_LABEL,
56270 			(void*)&&ZEND_NULL_LABEL,
56271 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56272 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56273 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56274 			(void*)&&ZEND_NULL_LABEL,
56275 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56276 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56277 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56278 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56279 			(void*)&&ZEND_NULL_LABEL,
56280 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56281 			(void*)&&ZEND_NULL_LABEL,
56282 			(void*)&&ZEND_NULL_LABEL,
56283 			(void*)&&ZEND_NULL_LABEL,
56284 			(void*)&&ZEND_NULL_LABEL,
56285 			(void*)&&ZEND_NULL_LABEL,
56286 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56287 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56288 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56289 			(void*)&&ZEND_NULL_LABEL,
56290 			(void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56291 			(void*)&&ZEND_NULL_LABEL,
56292 			(void*)&&ZEND_NULL_LABEL,
56293 			(void*)&&ZEND_NULL_LABEL,
56294 			(void*)&&ZEND_NULL_LABEL,
56295 			(void*)&&ZEND_NULL_LABEL,
56296 			(void*)&&ZEND_NULL_LABEL,
56297 			(void*)&&ZEND_NULL_LABEL,
56298 			(void*)&&ZEND_NULL_LABEL,
56299 			(void*)&&ZEND_NULL_LABEL,
56300 			(void*)&&ZEND_NULL_LABEL,
56301 			(void*)&&ZEND_NULL_LABEL,
56302 			(void*)&&ZEND_NULL_LABEL,
56303 			(void*)&&ZEND_NULL_LABEL,
56304 			(void*)&&ZEND_NULL_LABEL,
56305 			(void*)&&ZEND_NULL_LABEL,
56306 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56307 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56308 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56309 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56310 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56311 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56312 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56313 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56314 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56315 			(void*)&&ZEND_NULL_LABEL,
56316 			(void*)&&ZEND_NULL_LABEL,
56317 			(void*)&&ZEND_NULL_LABEL,
56318 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56319 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56320 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56321 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56322 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56323 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56324 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56325 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56326 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56327 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56328 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56329 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56330 			(void*)&&ZEND_NULL_LABEL,
56331 			(void*)&&ZEND_NULL_LABEL,
56332 			(void*)&&ZEND_NULL_LABEL,
56333 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56334 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56335 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56336 			(void*)&&ZEND_NULL_LABEL,
56337 			(void*)&&ZEND_NULL_LABEL,
56338 			(void*)&&ZEND_NULL_LABEL,
56339 			(void*)&&ZEND_NULL_LABEL,
56340 			(void*)&&ZEND_NULL_LABEL,
56341 			(void*)&&ZEND_NULL_LABEL,
56342 			(void*)&&ZEND_NULL_LABEL,
56343 			(void*)&&ZEND_NULL_LABEL,
56344 			(void*)&&ZEND_NULL_LABEL,
56345 			(void*)&&ZEND_NULL_LABEL,
56346 			(void*)&&ZEND_NULL_LABEL,
56347 			(void*)&&ZEND_NULL_LABEL,
56348 			(void*)&&ZEND_NULL_LABEL,
56349 			(void*)&&ZEND_NULL_LABEL,
56350 			(void*)&&ZEND_NULL_LABEL,
56351 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56352 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56353 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56354 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56355 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56356 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56357 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56358 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56359 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56360 			(void*)&&ZEND_NULL_LABEL,
56361 			(void*)&&ZEND_NULL_LABEL,
56362 			(void*)&&ZEND_NULL_LABEL,
56363 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56364 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56365 			(void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56366 			(void*)&&ZEND_NULL_LABEL,
56367 			(void*)&&ZEND_NULL_LABEL,
56368 			(void*)&&ZEND_NULL_LABEL,
56369 			(void*)&&ZEND_NULL_LABEL,
56370 			(void*)&&ZEND_NULL_LABEL,
56371 			(void*)&&ZEND_NULL_LABEL,
56372 			(void*)&&ZEND_NULL_LABEL,
56373 			(void*)&&ZEND_NULL_LABEL,
56374 			(void*)&&ZEND_NULL_LABEL,
56375 			(void*)&&ZEND_NULL_LABEL,
56376 			(void*)&&ZEND_NULL_LABEL,
56377 			(void*)&&ZEND_NULL_LABEL,
56378 			(void*)&&ZEND_NULL_LABEL,
56379 			(void*)&&ZEND_NULL_LABEL,
56380 			(void*)&&ZEND_NULL_LABEL,
56381 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56382 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56383 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56384 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56385 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56386 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56387 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56388 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56389 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56390 			(void*)&&ZEND_NULL_LABEL,
56391 			(void*)&&ZEND_NULL_LABEL,
56392 			(void*)&&ZEND_NULL_LABEL,
56393 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56394 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56395 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56396 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56397 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56398 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56399 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56400 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56401 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56402 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56403 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56404 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56405 			(void*)&&ZEND_NULL_LABEL,
56406 			(void*)&&ZEND_NULL_LABEL,
56407 			(void*)&&ZEND_NULL_LABEL,
56408 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56409 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56410 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56411 			(void*)&&ZEND_NULL_LABEL,
56412 			(void*)&&ZEND_NULL_LABEL,
56413 			(void*)&&ZEND_NULL_LABEL,
56414 			(void*)&&ZEND_NULL_LABEL,
56415 			(void*)&&ZEND_NULL_LABEL,
56416 			(void*)&&ZEND_NULL_LABEL,
56417 			(void*)&&ZEND_NULL_LABEL,
56418 			(void*)&&ZEND_NULL_LABEL,
56419 			(void*)&&ZEND_NULL_LABEL,
56420 			(void*)&&ZEND_NULL_LABEL,
56421 			(void*)&&ZEND_NULL_LABEL,
56422 			(void*)&&ZEND_NULL_LABEL,
56423 			(void*)&&ZEND_NULL_LABEL,
56424 			(void*)&&ZEND_NULL_LABEL,
56425 			(void*)&&ZEND_NULL_LABEL,
56426 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56427 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56428 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56429 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56430 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56431 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56432 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56433 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56434 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56435 			(void*)&&ZEND_NULL_LABEL,
56436 			(void*)&&ZEND_NULL_LABEL,
56437 			(void*)&&ZEND_NULL_LABEL,
56438 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56439 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56440 			(void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56441 			(void*)&&ZEND_NULL_LABEL,
56442 			(void*)&&ZEND_NULL_LABEL,
56443 			(void*)&&ZEND_NULL_LABEL,
56444 			(void*)&&ZEND_NULL_LABEL,
56445 			(void*)&&ZEND_NULL_LABEL,
56446 			(void*)&&ZEND_NULL_LABEL,
56447 			(void*)&&ZEND_NULL_LABEL,
56448 			(void*)&&ZEND_NULL_LABEL,
56449 			(void*)&&ZEND_NULL_LABEL,
56450 			(void*)&&ZEND_NULL_LABEL,
56451 			(void*)&&ZEND_NULL_LABEL,
56452 			(void*)&&ZEND_NULL_LABEL,
56453 			(void*)&&ZEND_NULL_LABEL,
56454 			(void*)&&ZEND_NULL_LABEL,
56455 			(void*)&&ZEND_NULL_LABEL,
56456 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56457 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56458 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56459 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56460 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56461 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56462 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56463 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56464 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56465 			(void*)&&ZEND_NULL_LABEL,
56466 			(void*)&&ZEND_NULL_LABEL,
56467 			(void*)&&ZEND_NULL_LABEL,
56468 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56469 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56470 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56471 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56472 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56473 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56474 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56475 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56476 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56477 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56478 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56479 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56480 			(void*)&&ZEND_NULL_LABEL,
56481 			(void*)&&ZEND_NULL_LABEL,
56482 			(void*)&&ZEND_NULL_LABEL,
56483 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56484 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56485 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56486 			(void*)&&ZEND_NULL_LABEL,
56487 			(void*)&&ZEND_NULL_LABEL,
56488 			(void*)&&ZEND_NULL_LABEL,
56489 			(void*)&&ZEND_NULL_LABEL,
56490 			(void*)&&ZEND_NULL_LABEL,
56491 			(void*)&&ZEND_NULL_LABEL,
56492 			(void*)&&ZEND_NULL_LABEL,
56493 			(void*)&&ZEND_NULL_LABEL,
56494 			(void*)&&ZEND_NULL_LABEL,
56495 			(void*)&&ZEND_NULL_LABEL,
56496 			(void*)&&ZEND_NULL_LABEL,
56497 			(void*)&&ZEND_NULL_LABEL,
56498 			(void*)&&ZEND_NULL_LABEL,
56499 			(void*)&&ZEND_NULL_LABEL,
56500 			(void*)&&ZEND_NULL_LABEL,
56501 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56502 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56503 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56504 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56505 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56506 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56507 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56508 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56509 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56510 			(void*)&&ZEND_NULL_LABEL,
56511 			(void*)&&ZEND_NULL_LABEL,
56512 			(void*)&&ZEND_NULL_LABEL,
56513 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56514 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56515 			(void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56516 			(void*)&&ZEND_NULL_LABEL,
56517 			(void*)&&ZEND_NULL_LABEL,
56518 			(void*)&&ZEND_NULL_LABEL,
56519 			(void*)&&ZEND_NULL_LABEL,
56520 			(void*)&&ZEND_NULL_LABEL,
56521 			(void*)&&ZEND_NULL_LABEL,
56522 			(void*)&&ZEND_NULL_LABEL,
56523 			(void*)&&ZEND_NULL_LABEL,
56524 			(void*)&&ZEND_NULL_LABEL,
56525 			(void*)&&ZEND_NULL_LABEL,
56526 			(void*)&&ZEND_NULL_LABEL,
56527 			(void*)&&ZEND_NULL_LABEL,
56528 			(void*)&&ZEND_NULL_LABEL,
56529 			(void*)&&ZEND_NULL_LABEL,
56530 			(void*)&&ZEND_NULL_LABEL,
56531 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56532 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56533 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56534 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56535 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56536 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56537 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56538 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56539 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56540 			(void*)&&ZEND_NULL_LABEL,
56541 			(void*)&&ZEND_NULL_LABEL,
56542 			(void*)&&ZEND_NULL_LABEL,
56543 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56544 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56545 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56546 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56547 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56548 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56549 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56550 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56551 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56552 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56553 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56554 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56555 			(void*)&&ZEND_NULL_LABEL,
56556 			(void*)&&ZEND_NULL_LABEL,
56557 			(void*)&&ZEND_NULL_LABEL,
56558 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56559 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56560 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56561 			(void*)&&ZEND_NULL_LABEL,
56562 			(void*)&&ZEND_NULL_LABEL,
56563 			(void*)&&ZEND_NULL_LABEL,
56564 			(void*)&&ZEND_NULL_LABEL,
56565 			(void*)&&ZEND_NULL_LABEL,
56566 			(void*)&&ZEND_NULL_LABEL,
56567 			(void*)&&ZEND_NULL_LABEL,
56568 			(void*)&&ZEND_NULL_LABEL,
56569 			(void*)&&ZEND_NULL_LABEL,
56570 			(void*)&&ZEND_NULL_LABEL,
56571 			(void*)&&ZEND_NULL_LABEL,
56572 			(void*)&&ZEND_NULL_LABEL,
56573 			(void*)&&ZEND_NULL_LABEL,
56574 			(void*)&&ZEND_NULL_LABEL,
56575 			(void*)&&ZEND_NULL_LABEL,
56576 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56577 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56578 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56579 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56580 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56581 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56582 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56583 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56584 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56585 			(void*)&&ZEND_NULL_LABEL,
56586 			(void*)&&ZEND_NULL_LABEL,
56587 			(void*)&&ZEND_NULL_LABEL,
56588 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56589 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56590 			(void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56591 			(void*)&&ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_LABEL,
56592 			(void*)&&ZEND_NULL_LABEL,
56593 			(void*)&&ZEND_NULL_LABEL,
56594 			(void*)&&ZEND_NULL_LABEL,
56595 			(void*)&&ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_LABEL,
56596 			(void*)&&ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_LABEL,
56597 			(void*)&&ZEND_NULL_LABEL,
56598 			(void*)&&ZEND_NULL_LABEL,
56599 			(void*)&&ZEND_NULL_LABEL,
56600 			(void*)&&ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_LABEL,
56601 			(void*)&&ZEND_NULL_LABEL,
56602 			(void*)&&ZEND_NULL_LABEL,
56603 			(void*)&&ZEND_NULL_LABEL,
56604 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
56605 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56606 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56607 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
56608 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56609 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56610 			(void*)&&ZEND_NULL_LABEL,
56611 			(void*)&&ZEND_NULL_LABEL,
56612 			(void*)&&ZEND_NULL_LABEL,
56613 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL,
56614 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56615 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56616 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
56617 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56618 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56619 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56620 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56621 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56622 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56623 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56624 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56625 			(void*)&&ZEND_NULL_LABEL,
56626 			(void*)&&ZEND_NULL_LABEL,
56627 			(void*)&&ZEND_NULL_LABEL,
56628 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56629 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56630 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56631 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
56632 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56633 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56634 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56635 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56636 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56637 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56638 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56639 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56640 			(void*)&&ZEND_NULL_LABEL,
56641 			(void*)&&ZEND_NULL_LABEL,
56642 			(void*)&&ZEND_NULL_LABEL,
56643 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56644 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56645 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56646 			(void*)&&ZEND_NULL_LABEL,
56647 			(void*)&&ZEND_NULL_LABEL,
56648 			(void*)&&ZEND_NULL_LABEL,
56649 			(void*)&&ZEND_NULL_LABEL,
56650 			(void*)&&ZEND_NULL_LABEL,
56651 			(void*)&&ZEND_NULL_LABEL,
56652 			(void*)&&ZEND_NULL_LABEL,
56653 			(void*)&&ZEND_NULL_LABEL,
56654 			(void*)&&ZEND_NULL_LABEL,
56655 			(void*)&&ZEND_NULL_LABEL,
56656 			(void*)&&ZEND_NULL_LABEL,
56657 			(void*)&&ZEND_NULL_LABEL,
56658 			(void*)&&ZEND_NULL_LABEL,
56659 			(void*)&&ZEND_NULL_LABEL,
56660 			(void*)&&ZEND_NULL_LABEL,
56661 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL,
56662 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56663 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56664 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56665 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56666 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56667 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56668 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56669 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56670 			(void*)&&ZEND_NULL_LABEL,
56671 			(void*)&&ZEND_NULL_LABEL,
56672 			(void*)&&ZEND_NULL_LABEL,
56673 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56674 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56675 			(void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56676 			(void*)&&ZEND_NULL_LABEL,
56677 			(void*)&&ZEND_NULL_LABEL,
56678 			(void*)&&ZEND_NULL_LABEL,
56679 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56680 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56681 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56682 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56683 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56684 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56685 			(void*)&&ZEND_NULL_LABEL,
56686 			(void*)&&ZEND_NULL_LABEL,
56687 			(void*)&&ZEND_NULL_LABEL,
56688 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56689 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56690 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56691 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56692 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56693 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56694 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56695 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56696 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56697 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56698 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56699 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56700 			(void*)&&ZEND_NULL_LABEL,
56701 			(void*)&&ZEND_NULL_LABEL,
56702 			(void*)&&ZEND_NULL_LABEL,
56703 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56704 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56705 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56706 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56707 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56708 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56709 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56710 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56711 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56712 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56713 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56714 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56715 			(void*)&&ZEND_NULL_LABEL,
56716 			(void*)&&ZEND_NULL_LABEL,
56717 			(void*)&&ZEND_NULL_LABEL,
56718 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56719 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56720 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56721 			(void*)&&ZEND_NULL_LABEL,
56722 			(void*)&&ZEND_NULL_LABEL,
56723 			(void*)&&ZEND_NULL_LABEL,
56724 			(void*)&&ZEND_NULL_LABEL,
56725 			(void*)&&ZEND_NULL_LABEL,
56726 			(void*)&&ZEND_NULL_LABEL,
56727 			(void*)&&ZEND_NULL_LABEL,
56728 			(void*)&&ZEND_NULL_LABEL,
56729 			(void*)&&ZEND_NULL_LABEL,
56730 			(void*)&&ZEND_NULL_LABEL,
56731 			(void*)&&ZEND_NULL_LABEL,
56732 			(void*)&&ZEND_NULL_LABEL,
56733 			(void*)&&ZEND_NULL_LABEL,
56734 			(void*)&&ZEND_NULL_LABEL,
56735 			(void*)&&ZEND_NULL_LABEL,
56736 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56737 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56738 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56739 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56740 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56741 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56742 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56743 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56744 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56745 			(void*)&&ZEND_NULL_LABEL,
56746 			(void*)&&ZEND_NULL_LABEL,
56747 			(void*)&&ZEND_NULL_LABEL,
56748 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56749 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56750 			(void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56751 			(void*)&&ZEND_NULL_LABEL,
56752 			(void*)&&ZEND_NULL_LABEL,
56753 			(void*)&&ZEND_NULL_LABEL,
56754 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
56755 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56756 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56757 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
56758 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56759 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56760 			(void*)&&ZEND_NULL_LABEL,
56761 			(void*)&&ZEND_NULL_LABEL,
56762 			(void*)&&ZEND_NULL_LABEL,
56763 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL,
56764 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56765 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56766 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56767 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56768 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56769 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56770 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56771 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56772 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56773 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56774 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56775 			(void*)&&ZEND_NULL_LABEL,
56776 			(void*)&&ZEND_NULL_LABEL,
56777 			(void*)&&ZEND_NULL_LABEL,
56778 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56779 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56780 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56781 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56782 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56783 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56784 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56785 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56786 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56787 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56788 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56789 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56790 			(void*)&&ZEND_NULL_LABEL,
56791 			(void*)&&ZEND_NULL_LABEL,
56792 			(void*)&&ZEND_NULL_LABEL,
56793 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56794 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56795 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56796 			(void*)&&ZEND_NULL_LABEL,
56797 			(void*)&&ZEND_NULL_LABEL,
56798 			(void*)&&ZEND_NULL_LABEL,
56799 			(void*)&&ZEND_NULL_LABEL,
56800 			(void*)&&ZEND_NULL_LABEL,
56801 			(void*)&&ZEND_NULL_LABEL,
56802 			(void*)&&ZEND_NULL_LABEL,
56803 			(void*)&&ZEND_NULL_LABEL,
56804 			(void*)&&ZEND_NULL_LABEL,
56805 			(void*)&&ZEND_NULL_LABEL,
56806 			(void*)&&ZEND_NULL_LABEL,
56807 			(void*)&&ZEND_NULL_LABEL,
56808 			(void*)&&ZEND_NULL_LABEL,
56809 			(void*)&&ZEND_NULL_LABEL,
56810 			(void*)&&ZEND_NULL_LABEL,
56811 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL,
56812 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56813 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56814 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56815 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56816 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56817 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56818 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56819 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56820 			(void*)&&ZEND_NULL_LABEL,
56821 			(void*)&&ZEND_NULL_LABEL,
56822 			(void*)&&ZEND_NULL_LABEL,
56823 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL,
56824 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56825 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56826 			(void*)&&ZEND_NULL_LABEL,
56827 			(void*)&&ZEND_NULL_LABEL,
56828 			(void*)&&ZEND_NULL_LABEL,
56829 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56830 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56831 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56832 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56833 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56834 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56835 			(void*)&&ZEND_NULL_LABEL,
56836 			(void*)&&ZEND_NULL_LABEL,
56837 			(void*)&&ZEND_NULL_LABEL,
56838 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL,
56839 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL,
56840 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL,
56841 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56842 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56843 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56844 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56845 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56846 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56847 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56848 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56849 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56850 			(void*)&&ZEND_NULL_LABEL,
56851 			(void*)&&ZEND_NULL_LABEL,
56852 			(void*)&&ZEND_NULL_LABEL,
56853 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56854 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56855 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56856 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56857 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56858 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56859 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56860 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56861 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56862 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56863 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56864 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56865 			(void*)&&ZEND_NULL_LABEL,
56866 			(void*)&&ZEND_NULL_LABEL,
56867 			(void*)&&ZEND_NULL_LABEL,
56868 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56869 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56870 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56871 			(void*)&&ZEND_NULL_LABEL,
56872 			(void*)&&ZEND_NULL_LABEL,
56873 			(void*)&&ZEND_NULL_LABEL,
56874 			(void*)&&ZEND_NULL_LABEL,
56875 			(void*)&&ZEND_NULL_LABEL,
56876 			(void*)&&ZEND_NULL_LABEL,
56877 			(void*)&&ZEND_NULL_LABEL,
56878 			(void*)&&ZEND_NULL_LABEL,
56879 			(void*)&&ZEND_NULL_LABEL,
56880 			(void*)&&ZEND_NULL_LABEL,
56881 			(void*)&&ZEND_NULL_LABEL,
56882 			(void*)&&ZEND_NULL_LABEL,
56883 			(void*)&&ZEND_NULL_LABEL,
56884 			(void*)&&ZEND_NULL_LABEL,
56885 			(void*)&&ZEND_NULL_LABEL,
56886 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL,
56887 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL,
56888 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL,
56889 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56890 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56891 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56892 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56893 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56894 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56895 			(void*)&&ZEND_NULL_LABEL,
56896 			(void*)&&ZEND_NULL_LABEL,
56897 			(void*)&&ZEND_NULL_LABEL,
56898 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL,
56899 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL,
56900 			(void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL,
56901 			(void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
56902 			(void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
56903 			(void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
56904 			(void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_LABEL,
56905 			(void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL,
56906 			(void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL,
56907 			(void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL,
56908 			(void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_LABEL,
56909 			(void*)&&ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
56910 			(void*)&&ZEND_POST_INC_LONG_SPEC_CV_LABEL,
56911 			(void*)&&ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_LABEL,
56912 			(void*)&&ZEND_POST_DEC_LONG_SPEC_CV_LABEL,
56913 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_CONST_LABEL,
56914 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
56915 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
56916 			(void*)&&ZEND_NULL_LABEL,
56917 			(void*)&&ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_LABEL,
56918 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_LABEL,
56919 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
56920 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
56921 			(void*)&&ZEND_NULL_LABEL,
56922 			(void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL,
56923 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_CONST_LABEL,
56924 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
56925 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
56926 			(void*)&&ZEND_NULL_LABEL,
56927 			(void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL,
56928 			(void*)&&ZEND_NULL_LABEL,
56929 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
56930 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
56931 			(void*)&&ZEND_NULL_LABEL,
56932 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL,
56933 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
56934 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
56935 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
56936 			(void*)&&ZEND_NULL_LABEL,
56937 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
56938 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL,
56939 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
56940 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
56941 			(void*)&&ZEND_NULL_LABEL,
56942 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL,
56943 			(void*)&&ZEND_NULL_LABEL,
56944 			(void*)&&ZEND_NULL_LABEL,
56945 			(void*)&&ZEND_NULL_LABEL,
56946 			(void*)&&ZEND_NULL_LABEL,
56947 			(void*)&&ZEND_NULL_LABEL,
56948 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_LABEL,
56949 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
56950 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
56951 			(void*)&&ZEND_NULL_LABEL,
56952 			(void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL,
56953 			(void*)&&ZEND_NULL_LABEL,
56954 			(void*)&&ZEND_NULL_LABEL,
56955 			(void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_VAR_LABEL,
56956 			(void*)&&ZEND_NULL_LABEL,
56957 			(void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_CV_LABEL,
56958 			(void*)&&ZEND_NULL_LABEL,
56959 			(void*)&&ZEND_NULL_LABEL,
56960 			(void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_LABEL,
56961 			(void*)&&ZEND_NULL_LABEL,
56962 			(void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_LABEL,
56963 			(void*)&&ZEND_SEND_VAL_SIMPLE_SPEC_CONST_LABEL,
56964 			(void*)&&ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_LABEL,
56965 			(void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_LABEL,
56966 			(void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_LABEL,
56967 			(void*)&&ZEND_NULL_LABEL
56968 		};
56969 		zend_opcode_handlers = (const void **) labels;
56970 		zend_handlers_count = sizeof(labels) / sizeof(void*);
56971 		memset(&hybrid_halt_op, 0, sizeof(hybrid_halt_op));
56972 		hybrid_halt_op.handler = (void*)&&HYBRID_HALT_LABEL;
56973 #ifdef ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE
56974 		memset(vm_stack_data.hybrid_jit_red_zone, 0, ZEND_VM_HYBRID_JIT_RED_ZONE_SIZE);
56975 #endif
56976 		if (zend_touch_vm_stack_data) {
56977 			zend_touch_vm_stack_data(&vm_stack_data);
56978 		}
56979 		goto HYBRID_HALT_LABEL;
56980 	}
56981 #endif
56982 
56983 	LOAD_OPLINE();
56984 	ZEND_VM_LOOP_INTERRUPT_CHECK();
56985 
56986 #ifdef ZEND_CHECK_STACK_LIMIT
56987 	if (UNEXPECTED(zend_call_stack_overflowed(EG(stack_limit)))) {
56988 		zend_call_stack_size_error();
56989 		/* No opline was executed before exception */
56990 		EG(opline_before_exception) = NULL;
56991 		LOAD_OPLINE();
56992 		/* Fall through to handle exception below. */
56993 	}
56994 #endif /* ZEND_CHECK_STACK_LIMIT */
56995 
56996 	while (1) {
56997 #if !defined(ZEND_VM_FP_GLOBAL_REG) || !defined(ZEND_VM_IP_GLOBAL_REG)
56998 			int ret;
56999 #endif
57000 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
57001 		HYBRID_SWITCH() {
57002 #else
57003 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
57004 		((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57005 		if (UNEXPECTED(!OPLINE)) {
57006 #else
57007 		if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0)) {
57008 #endif
57009 #endif
57010 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
57011 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC):
57012 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_OP_SPEC)
57013 				ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57014 				HYBRID_BREAK();
57015 			HYBRID_CASE(ZEND_PRE_INC_STATIC_PROP_SPEC):
57016 				VM_TRACE(ZEND_PRE_INC_STATIC_PROP_SPEC)
57017 				ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57018 				HYBRID_BREAK();
57019 			HYBRID_CASE(ZEND_POST_INC_STATIC_PROP_SPEC):
57020 				VM_TRACE(ZEND_POST_INC_STATIC_PROP_SPEC)
57021 				ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57022 				HYBRID_BREAK();
57023 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC):
57024 				VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC)
57025 				ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57026 				HYBRID_BREAK();
57027 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC):
57028 				VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC)
57029 				ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57030 				HYBRID_BREAK();
57031 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC):
57032 				VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC)
57033 				ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57034 				HYBRID_BREAK();
57035 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC):
57036 				VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC)
57037 				ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57038 				HYBRID_BREAK();
57039 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC):
57040 				VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC)
57041 				ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57042 				HYBRID_BREAK();
57043 			HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC):
57044 				VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC)
57045 				ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57046 				HYBRID_BREAK();
57047 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST):
57048 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST)
57049 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57050 				HYBRID_BREAK();
57051 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP):
57052 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP)
57053 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57054 				HYBRID_BREAK();
57055 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR):
57056 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR)
57057 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57058 				HYBRID_BREAK();
57059 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV):
57060 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV)
57061 				ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57062 				HYBRID_BREAK();
57063 			HYBRID_CASE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC):
57064 				VM_TRACE(ZEND_ASSIGN_STATIC_PROP_REF_SPEC)
57065 				ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57066 				HYBRID_BREAK();
57067 zend_leave_helper_SPEC_LABEL:
57068 {
57069 	zend_execute_data *old_execute_data;
57070 	uint32_t call_info = EX_CALL_INFO();
57071 	SAVE_OPLINE();
57072 
57073 	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)) {
57074 		EG(current_execute_data) = EX(prev_execute_data);
57075 		i_free_compiled_variables(execute_data);
57076 
57077 #ifdef ZEND_PREFER_RELOAD
57078 		call_info = EX_CALL_INFO();
57079 #endif
57080 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
57081 			OBJ_RELEASE(Z_OBJ(execute_data->This));
57082 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
57083 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
57084 		}
57085 		EG(vm_stack_top) = (zval*)execute_data;
57086 		execute_data = EX(prev_execute_data);
57087 
57088 		if (UNEXPECTED(EG(exception) != NULL)) {
57089 			zend_rethrow_exception(execute_data);
57090 			HANDLE_EXCEPTION_LEAVE();
57091 		}
57092 
57093 		LOAD_NEXT_OPLINE();
57094 		ZEND_VM_LEAVE();
57095 	} else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) {
57096 		EG(current_execute_data) = EX(prev_execute_data);
57097 		i_free_compiled_variables(execute_data);
57098 
57099 #ifdef ZEND_PREFER_RELOAD
57100 		call_info = EX_CALL_INFO();
57101 #endif
57102 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
57103 			zend_clean_and_cache_symbol_table(EX(symbol_table));
57104 		}
57105 
57106 		if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
57107 			zend_free_extra_named_params(EX(extra_named_params));
57108 		}
57109 
57110 		/* Free extra args before releasing the closure,
57111 		 * as that may free the op_array. */
57112 		zend_vm_stack_free_extra_args_ex(call_info, execute_data);
57113 
57114 		if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
57115 			OBJ_RELEASE(Z_OBJ(execute_data->This));
57116 		} else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
57117 			OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
57118 		}
57119 
57120 		old_execute_data = execute_data;
57121 		execute_data = EX(prev_execute_data);
57122 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
57123 
57124 		if (UNEXPECTED(EG(exception) != NULL)) {
57125 			zend_rethrow_exception(execute_data);
57126 			HANDLE_EXCEPTION_LEAVE();
57127 		}
57128 
57129 		LOAD_NEXT_OPLINE();
57130 		ZEND_VM_LEAVE();
57131 	} else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) {
57132 		if (EX(func)->op_array.last_var > 0) {
57133 			zend_detach_symbol_table(execute_data);
57134 			call_info |= ZEND_CALL_NEEDS_REATTACH;
57135 		}
57136 		zend_destroy_static_vars(&EX(func)->op_array);
57137 		destroy_op_array(&EX(func)->op_array);
57138 		efree_size(EX(func), sizeof(zend_op_array));
57139 		old_execute_data = execute_data;
57140 		execute_data = EG(current_execute_data) = EX(prev_execute_data);
57141 		zend_vm_stack_free_call_frame_ex(call_info, old_execute_data);
57142 
57143 		if (call_info & ZEND_CALL_NEEDS_REATTACH) {
57144 			if (EX(func)->op_array.last_var > 0) {
57145 				zend_attach_symbol_table(execute_data);
57146 			} else {
57147 				ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_NEEDS_REATTACH);
57148 			}
57149 		}
57150 		if (UNEXPECTED(EG(exception) != NULL)) {
57151 			zend_rethrow_exception(execute_data);
57152 			HANDLE_EXCEPTION_LEAVE();
57153 		}
57154 
57155 		LOAD_NEXT_OPLINE();
57156 		ZEND_VM_LEAVE();
57157 	} else {
57158 		if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) {
57159 			EG(current_execute_data) = EX(prev_execute_data);
57160 			i_free_compiled_variables(execute_data);
57161 #ifdef ZEND_PREFER_RELOAD
57162 			call_info = EX_CALL_INFO();
57163 #endif
57164 			if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_HAS_EXTRA_NAMED_PARAMS))) {
57165 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) {
57166 					zend_clean_and_cache_symbol_table(EX(symbol_table));
57167 				}
57168 				zend_vm_stack_free_extra_args_ex(call_info, execute_data);
57169 				if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
57170 					zend_free_extra_named_params(EX(extra_named_params));
57171 				}
57172 			}
57173 			if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) {
57174 				OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func)));
57175 			}
57176 			ZEND_VM_RETURN();
57177 		} else /* if (call_kind == ZEND_CALL_TOP_CODE) */ {
57178 			zend_array *symbol_table = EX(symbol_table);
57179 
57180 			if (EX(func)->op_array.last_var > 0) {
57181 				zend_detach_symbol_table(execute_data);
57182 				call_info |= ZEND_CALL_NEEDS_REATTACH;
57183 			}
57184 			if (call_info & ZEND_CALL_NEEDS_REATTACH) {
57185 				old_execute_data = EX(prev_execute_data);
57186 				while (old_execute_data) {
57187 					if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) {
57188 						if (old_execute_data->symbol_table == symbol_table) {
57189 							if (old_execute_data->func->op_array.last_var > 0) {
57190 								zend_attach_symbol_table(old_execute_data);
57191 							} else {
57192 								ZEND_ADD_CALL_FLAG(old_execute_data, ZEND_CALL_NEEDS_REATTACH);
57193 							}
57194 						}
57195 						break;
57196 					}
57197 					old_execute_data = old_execute_data->prev_execute_data;
57198 				}
57199 			}
57200 			EG(current_execute_data) = EX(prev_execute_data);
57201 			ZEND_VM_RETURN();
57202 		}
57203 	}
57204 }
57205 
57206 			HYBRID_CASE(ZEND_JMP_SPEC):
57207 				VM_TRACE(ZEND_JMP_SPEC)
57208 				ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57209 				HYBRID_BREAK();
57210 			HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED):
57211 				VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED)
57212 				ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57213 				HYBRID_BREAK();
57214 			HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_USED):
57215 				VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_USED)
57216 				ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57217 				HYBRID_BREAK();
57218 			HYBRID_CASE(ZEND_DO_ICALL_SPEC_OBSERVER):
57219 				VM_TRACE(ZEND_DO_ICALL_SPEC_OBSERVER)
57220 				ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57221 				HYBRID_BREAK();
57222 			HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED):
57223 				VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED)
57224 				ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57225 				HYBRID_BREAK();
57226 			HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_USED):
57227 				VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_USED)
57228 				ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57229 				HYBRID_BREAK();
57230 			HYBRID_CASE(ZEND_DO_UCALL_SPEC_OBSERVER):
57231 				VM_TRACE(ZEND_DO_UCALL_SPEC_OBSERVER)
57232 				ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57233 				HYBRID_BREAK();
57234 			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED):
57235 				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED)
57236 				ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57237 				HYBRID_BREAK();
57238 			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED):
57239 				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED)
57240 				ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57241 				HYBRID_BREAK();
57242 			HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER):
57243 				VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER)
57244 				ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57245 				HYBRID_BREAK();
57246 			HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED):
57247 				VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED)
57248 				ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57249 				HYBRID_BREAK();
57250 			HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_USED):
57251 				VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_USED)
57252 				ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57253 				HYBRID_BREAK();
57254 			HYBRID_CASE(ZEND_DO_FCALL_SPEC_OBSERVER):
57255 				VM_TRACE(ZEND_DO_FCALL_SPEC_OBSERVER)
57256 				ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57257 				HYBRID_BREAK();
57258 			HYBRID_CASE(ZEND_GENERATOR_CREATE_SPEC):
57259 				VM_TRACE(ZEND_GENERATOR_CREATE_SPEC)
57260 				ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57261 				HYBRID_BREAK();
57262 			HYBRID_CASE(ZEND_SEND_UNPACK_SPEC):
57263 				VM_TRACE(ZEND_SEND_UNPACK_SPEC)
57264 				ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57265 				HYBRID_BREAK();
57266 			HYBRID_CASE(ZEND_SEND_ARRAY_SPEC):
57267 				VM_TRACE(ZEND_SEND_ARRAY_SPEC)
57268 				ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57269 				HYBRID_BREAK();
57270 			HYBRID_CASE(ZEND_RECV_NOTYPE_SPEC):
57271 				VM_TRACE(ZEND_RECV_NOTYPE_SPEC)
57272 				ZEND_RECV_NOTYPE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57273 				HYBRID_BREAK();
57274 			HYBRID_CASE(ZEND_ADD_ARRAY_UNPACK_SPEC):
57275 				VM_TRACE(ZEND_ADD_ARRAY_UNPACK_SPEC)
57276 				ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57277 				HYBRID_BREAK();
57278 			HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC):
57279 				VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC)
57280 				ZEND_UNSET_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57281 				HYBRID_BREAK();
57282 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC):
57283 				VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC)
57284 				ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57285 				HYBRID_BREAK();
57286 			HYBRID_CASE(ZEND_EXIT_SPEC):
57287 				VM_TRACE(ZEND_EXIT_SPEC)
57288 				ZEND_EXIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57289 				HYBRID_BREAK();
57290 			HYBRID_CASE(ZEND_BEGIN_SILENCE_SPEC):
57291 				VM_TRACE(ZEND_BEGIN_SILENCE_SPEC)
57292 				ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57293 				HYBRID_BREAK();
57294 			HYBRID_CASE(ZEND_EXT_STMT_SPEC):
57295 				VM_TRACE(ZEND_EXT_STMT_SPEC)
57296 				ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57297 				HYBRID_BREAK();
57298 			HYBRID_CASE(ZEND_EXT_FCALL_BEGIN_SPEC):
57299 				VM_TRACE(ZEND_EXT_FCALL_BEGIN_SPEC)
57300 				ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57301 				HYBRID_BREAK();
57302 			HYBRID_CASE(ZEND_EXT_FCALL_END_SPEC):
57303 				VM_TRACE(ZEND_EXT_FCALL_END_SPEC)
57304 				ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57305 				HYBRID_BREAK();
57306 			HYBRID_CASE(ZEND_DECLARE_ANON_CLASS_SPEC):
57307 				VM_TRACE(ZEND_DECLARE_ANON_CLASS_SPEC)
57308 				ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57309 				HYBRID_BREAK();
57310 			HYBRID_CASE(ZEND_DECLARE_FUNCTION_SPEC):
57311 				VM_TRACE(ZEND_DECLARE_FUNCTION_SPEC)
57312 				ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57313 				HYBRID_BREAK();
57314 			HYBRID_CASE(ZEND_TICKS_SPEC):
57315 				VM_TRACE(ZEND_TICKS_SPEC)
57316 				ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57317 				HYBRID_BREAK();
57318 			HYBRID_CASE(ZEND_EXT_NOP_SPEC):
57319 				VM_TRACE(ZEND_EXT_NOP_SPEC)
57320 				ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57321 				HYBRID_BREAK();
57322 			HYBRID_CASE(ZEND_NOP_SPEC):
57323 				VM_TRACE(ZEND_NOP_SPEC)
57324 				ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57325 				HYBRID_BREAK();
57326 			HYBRID_CASE(ZEND_HANDLE_EXCEPTION_SPEC):
57327 				VM_TRACE(ZEND_HANDLE_EXCEPTION_SPEC)
57328 				ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57329 				HYBRID_BREAK();
57330 			HYBRID_CASE(ZEND_USER_OPCODE_SPEC):
57331 				VM_TRACE(ZEND_USER_OPCODE_SPEC)
57332 				ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57333 				HYBRID_BREAK();
57334 			HYBRID_CASE(ZEND_DISCARD_EXCEPTION_SPEC):
57335 				VM_TRACE(ZEND_DISCARD_EXCEPTION_SPEC)
57336 				ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57337 				HYBRID_BREAK();
57338 			HYBRID_CASE(ZEND_FAST_CALL_SPEC):
57339 				VM_TRACE(ZEND_FAST_CALL_SPEC)
57340 				ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57341 				HYBRID_BREAK();
57342 			HYBRID_CASE(ZEND_FAST_RET_SPEC):
57343 				VM_TRACE(ZEND_FAST_RET_SPEC)
57344 				ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57345 				HYBRID_BREAK();
57346 			HYBRID_CASE(ZEND_ASSERT_CHECK_SPEC):
57347 				VM_TRACE(ZEND_ASSERT_CHECK_SPEC)
57348 				ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57349 				HYBRID_BREAK();
57350 			HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC):
57351 				VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC)
57352 				ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57353 				HYBRID_BREAK();
57354 			HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER):
57355 				VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER)
57356 				ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57357 				HYBRID_BREAK();
57358 			HYBRID_CASE(ZEND_JMP_FORWARD_SPEC):
57359 				VM_TRACE(ZEND_JMP_FORWARD_SPEC)
57360 				ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57361 				HYBRID_BREAK();
57362 			HYBRID_CASE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST):
57363 				VM_TRACE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST)
57364 				ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57365 				HYBRID_BREAK();
57366 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST):
57367 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST)
57368 				ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57369 				HYBRID_BREAK();
57370 			HYBRID_CASE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST):
57371 				VM_TRACE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST)
57372 				ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57373 				HYBRID_BREAK();
57374 			HYBRID_CASE(ZEND_INIT_FCALL_SPEC_CONST):
57375 				VM_TRACE(ZEND_INIT_FCALL_SPEC_CONST)
57376 				ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57377 				HYBRID_BREAK();
57378 			HYBRID_CASE(ZEND_RECV_INIT_SPEC_CONST):
57379 				VM_TRACE(ZEND_RECV_INIT_SPEC_CONST)
57380 				ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57381 				HYBRID_BREAK();
57382 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR):
57383 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR)
57384 				ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57385 				HYBRID_BREAK();
57386 			HYBRID_CASE(ZEND_RECV_SPEC_UNUSED):
57387 				VM_TRACE(ZEND_RECV_SPEC_UNUSED)
57388 				ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57389 				HYBRID_BREAK();
57390 			HYBRID_CASE(ZEND_RECV_VARIADIC_SPEC_UNUSED):
57391 				VM_TRACE(ZEND_RECV_VARIADIC_SPEC_UNUSED)
57392 				ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57393 				HYBRID_BREAK();
57394 			HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV):
57395 				VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV)
57396 				ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57397 				HYBRID_BREAK();
57398 			HYBRID_CASE(ZEND_BW_NOT_SPEC_CONST):
57399 				VM_TRACE(ZEND_BW_NOT_SPEC_CONST)
57400 				ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57401 				HYBRID_BREAK();
57402 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CONST):
57403 				VM_TRACE(ZEND_BOOL_NOT_SPEC_CONST)
57404 				ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57405 				HYBRID_BREAK();
57406 			HYBRID_CASE(ZEND_ECHO_SPEC_CONST):
57407 				VM_TRACE(ZEND_ECHO_SPEC_CONST)
57408 				ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57409 				HYBRID_BREAK();
57410 			HYBRID_CASE(ZEND_JMPZ_SPEC_CONST):
57411 				VM_TRACE(ZEND_JMPZ_SPEC_CONST)
57412 				ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57413 				HYBRID_BREAK();
57414 			HYBRID_CASE(ZEND_JMPNZ_SPEC_CONST):
57415 				VM_TRACE(ZEND_JMPNZ_SPEC_CONST)
57416 				ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57417 				HYBRID_BREAK();
57418 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CONST):
57419 				VM_TRACE(ZEND_JMPZ_EX_SPEC_CONST)
57420 				ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57421 				HYBRID_BREAK();
57422 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CONST):
57423 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_CONST)
57424 				ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57425 				HYBRID_BREAK();
57426 			HYBRID_CASE(ZEND_RETURN_SPEC_CONST):
57427 				VM_TRACE(ZEND_RETURN_SPEC_CONST)
57428 {
57429 	USE_OPLINE
57430 	zval *retval_ptr;
57431 	zval *return_value;
57432 
57433 	retval_ptr = RT_CONSTANT(opline, opline->op1);
57434 	return_value = EX(return_value);
57435 
57436 	if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
57437 		SAVE_OPLINE();
57438 		retval_ptr = ZVAL_UNDEFINED_OP1();
57439 		if (return_value) {
57440 			ZVAL_NULL(return_value);
57441 		}
57442 	} else if (!return_value) {
57443 		if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
57444 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
57445 				SAVE_OPLINE();
57446 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
57447 			}
57448 		}
57449 	} else {
57450 		if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
57451 			ZVAL_COPY_VALUE(return_value, retval_ptr);
57452 			if (IS_CONST == IS_CONST) {
57453 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
57454 					Z_ADDREF_P(return_value);
57455 				}
57456 			}
57457 		} else if (IS_CONST == IS_CV) {
57458 			do {
57459 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57460 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
57461 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
57462 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57463 							ZVAL_COPY_VALUE(return_value, retval_ptr);
57464 							if (GC_MAY_LEAK(ref)) {
57465 								SAVE_OPLINE();
57466 								gc_possible_root(ref);
57467 							}
57468 							ZVAL_NULL(retval_ptr);
57469 							break;
57470 						} else {
57471 							Z_ADDREF_P(retval_ptr);
57472 						}
57473 					} else {
57474 						retval_ptr = Z_REFVAL_P(retval_ptr);
57475 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57476 							Z_ADDREF_P(retval_ptr);
57477 						}
57478 					}
57479 				}
57480 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57481 			} while (0);
57482 		} else /* if (IS_CONST == IS_VAR) */ {
57483 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
57484 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57485 
57486 				retval_ptr = Z_REFVAL_P(retval_ptr);
57487 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57488 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
57489 					efree_size(ref, sizeof(zend_reference));
57490 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57491 					Z_ADDREF_P(retval_ptr);
57492 				}
57493 			} else {
57494 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57495 			}
57496 		}
57497 	}
57498 
57499 
57500 
57501 	goto zend_leave_helper_SPEC_LABEL;
57502 }
57503 
57504 			HYBRID_CASE(ZEND_RETURN_SPEC_OBSERVER):
57505 				VM_TRACE(ZEND_RETURN_SPEC_OBSERVER)
57506 {
57507 	USE_OPLINE
57508 	zval *retval_ptr;
57509 	zval *return_value;
57510 	zval observer_retval;
57511 
57512 	retval_ptr = get_zval_ptr_undef(opline->op1_type, opline->op1, BP_VAR_R);
57513 	return_value = EX(return_value);
57514 	if (!return_value) { return_value = &observer_retval; };
57515 	if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
57516 		SAVE_OPLINE();
57517 		retval_ptr = ZVAL_UNDEFINED_OP1();
57518 		if (return_value) {
57519 			ZVAL_NULL(return_value);
57520 		}
57521 	} else if (!return_value) {
57522 		if (opline->op1_type & (IS_VAR|IS_TMP_VAR)) {
57523 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
57524 				SAVE_OPLINE();
57525 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
57526 			}
57527 		}
57528 	} else {
57529 		if ((opline->op1_type & (IS_CONST|IS_TMP_VAR))) {
57530 			ZVAL_COPY_VALUE(return_value, retval_ptr);
57531 			if (opline->op1_type == IS_CONST) {
57532 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
57533 					Z_ADDREF_P(return_value);
57534 				}
57535 			}
57536 		} else if (opline->op1_type == IS_CV) {
57537 			do {
57538 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57539 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
57540 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
57541 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57542 							ZVAL_COPY_VALUE(return_value, retval_ptr);
57543 							if (GC_MAY_LEAK(ref)) {
57544 								SAVE_OPLINE();
57545 								gc_possible_root(ref);
57546 							}
57547 							ZVAL_NULL(retval_ptr);
57548 							break;
57549 						} else {
57550 							Z_ADDREF_P(retval_ptr);
57551 						}
57552 					} else {
57553 						retval_ptr = Z_REFVAL_P(retval_ptr);
57554 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57555 							Z_ADDREF_P(retval_ptr);
57556 						}
57557 					}
57558 				}
57559 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57560 			} while (0);
57561 		} else /* if (opline->op1_type == IS_VAR) */ {
57562 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
57563 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
57564 
57565 				retval_ptr = Z_REFVAL_P(retval_ptr);
57566 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57567 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
57568 					efree_size(ref, sizeof(zend_reference));
57569 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
57570 					Z_ADDREF_P(retval_ptr);
57571 				}
57572 			} else {
57573 				ZVAL_COPY_VALUE(return_value, retval_ptr);
57574 			}
57575 		}
57576 	}
57577 	SAVE_OPLINE();
57578 	zend_observer_fcall_end(execute_data, return_value);
57579 	if (return_value == &observer_retval) { zval_ptr_dtor_nogc(&observer_retval); };
57580 	goto zend_leave_helper_SPEC_LABEL;
57581 }
57582 
57583 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CONST):
57584 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CONST)
57585 				ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57586 				HYBRID_BREAK();
57587 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_OBSERVER):
57588 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_OBSERVER)
57589 				ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57590 				HYBRID_BREAK();
57591 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST):
57592 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CONST)
57593 				ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57594 				HYBRID_BREAK();
57595 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER):
57596 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_OBSERVER)
57597 				ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57598 				HYBRID_BREAK();
57599 			HYBRID_CASE(ZEND_THROW_SPEC_CONST):
57600 				VM_TRACE(ZEND_THROW_SPEC_CONST)
57601 				ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57602 				HYBRID_BREAK();
57603 			HYBRID_CASE(ZEND_CATCH_SPEC_CONST):
57604 				VM_TRACE(ZEND_CATCH_SPEC_CONST)
57605 				ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57606 				HYBRID_BREAK();
57607 			HYBRID_CASE(ZEND_SEND_USER_SPEC_CONST):
57608 				VM_TRACE(ZEND_SEND_USER_SPEC_CONST)
57609 				ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57610 				HYBRID_BREAK();
57611 			HYBRID_CASE(ZEND_BOOL_SPEC_CONST):
57612 				VM_TRACE(ZEND_BOOL_SPEC_CONST)
57613 				ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57614 				HYBRID_BREAK();
57615 			HYBRID_CASE(ZEND_CLONE_SPEC_CONST):
57616 				VM_TRACE(ZEND_CLONE_SPEC_CONST)
57617 				ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57618 				HYBRID_BREAK();
57619 			HYBRID_CASE(ZEND_CAST_SPEC_CONST):
57620 				VM_TRACE(ZEND_CAST_SPEC_CONST)
57621 				ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57622 				HYBRID_BREAK();
57623 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST):
57624 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST)
57625 				ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57626 				HYBRID_BREAK();
57627 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER):
57628 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER)
57629 				ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57630 				HYBRID_BREAK();
57631 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CONST):
57632 				VM_TRACE(ZEND_FE_RESET_R_SPEC_CONST)
57633 				ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57634 				HYBRID_BREAK();
57635 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CONST):
57636 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_CONST)
57637 				ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57638 				HYBRID_BREAK();
57639 			HYBRID_CASE(ZEND_JMP_SET_SPEC_CONST):
57640 				VM_TRACE(ZEND_JMP_SET_SPEC_CONST)
57641 				ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57642 				HYBRID_BREAK();
57643 			HYBRID_CASE(ZEND_COALESCE_SPEC_CONST):
57644 				VM_TRACE(ZEND_COALESCE_SPEC_CONST)
57645 				ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57646 				HYBRID_BREAK();
57647 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_CONST):
57648 				VM_TRACE(ZEND_JMP_NULL_SPEC_CONST)
57649 				ZEND_JMP_NULL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57650 				HYBRID_BREAK();
57651 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CONST):
57652 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_CONST)
57653 				ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57654 				HYBRID_BREAK();
57655 			HYBRID_CASE(ZEND_DECLARE_CLASS_SPEC_CONST):
57656 				VM_TRACE(ZEND_DECLARE_CLASS_SPEC_CONST)
57657 				ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57658 				HYBRID_BREAK();
57659 			HYBRID_CASE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST):
57660 				VM_TRACE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST)
57661 				ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57662 				HYBRID_BREAK();
57663 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CONST):
57664 				VM_TRACE(ZEND_YIELD_FROM_SPEC_CONST)
57665 				ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57666 				HYBRID_BREAK();
57667 			HYBRID_CASE(ZEND_STRLEN_SPEC_CONST):
57668 				VM_TRACE(ZEND_STRLEN_SPEC_CONST)
57669 				ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57670 				HYBRID_BREAK();
57671 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CONST):
57672 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_CONST)
57673 				ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57674 				HYBRID_BREAK();
57675 			HYBRID_CASE(ZEND_DEFINED_SPEC_CONST):
57676 				VM_TRACE(ZEND_DEFINED_SPEC_CONST)
57677 				ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57678 				HYBRID_BREAK();
57679 			HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_CONST):
57680 				VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_CONST)
57681 				ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57682 				HYBRID_BREAK();
57683 			HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST):
57684 				VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST)
57685 				ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57686 				HYBRID_BREAK();
57687 			HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST):
57688 				VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST)
57689 				ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57690 				HYBRID_BREAK();
57691 			HYBRID_CASE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST):
57692 				VM_TRACE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST)
57693 				ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57694 				HYBRID_BREAK();
57695 			HYBRID_CASE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST):
57696 				VM_TRACE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST)
57697 				ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57698 				HYBRID_BREAK();
57699 			HYBRID_CASE(ZEND_ADD_SPEC_CONST_CONST):
57700 				VM_TRACE(ZEND_ADD_SPEC_CONST_CONST)
57701 				ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57702 				HYBRID_BREAK();
57703 			HYBRID_CASE(ZEND_SUB_SPEC_CONST_CONST):
57704 				VM_TRACE(ZEND_SUB_SPEC_CONST_CONST)
57705 				ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57706 				HYBRID_BREAK();
57707 			HYBRID_CASE(ZEND_MUL_SPEC_CONST_CONST):
57708 				VM_TRACE(ZEND_MUL_SPEC_CONST_CONST)
57709 				ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57710 				HYBRID_BREAK();
57711 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_CONST):
57712 				VM_TRACE(ZEND_DIV_SPEC_CONST_CONST)
57713 				ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57714 				HYBRID_BREAK();
57715 			HYBRID_CASE(ZEND_MOD_SPEC_CONST_CONST):
57716 				VM_TRACE(ZEND_MOD_SPEC_CONST_CONST)
57717 				ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57718 				HYBRID_BREAK();
57719 			HYBRID_CASE(ZEND_SL_SPEC_CONST_CONST):
57720 				VM_TRACE(ZEND_SL_SPEC_CONST_CONST)
57721 				ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57722 				HYBRID_BREAK();
57723 			HYBRID_CASE(ZEND_SR_SPEC_CONST_CONST):
57724 				VM_TRACE(ZEND_SR_SPEC_CONST_CONST)
57725 				ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57726 				HYBRID_BREAK();
57727 			HYBRID_CASE(ZEND_POW_SPEC_CONST_CONST):
57728 				VM_TRACE(ZEND_POW_SPEC_CONST_CONST)
57729 				ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57730 				HYBRID_BREAK();
57731 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST):
57732 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST)
57733 				ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57734 				HYBRID_BREAK();
57735 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST):
57736 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST)
57737 				ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57738 				HYBRID_BREAK();
57739 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CONST_CONST):
57740 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CONST_CONST)
57741 				ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57742 				HYBRID_BREAK();
57743 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST):
57744 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST)
57745 				ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57746 				HYBRID_BREAK();
57747 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_CONST):
57748 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_CONST)
57749 				ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57750 				HYBRID_BREAK();
57751 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST):
57752 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST)
57753 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57754 				HYBRID_BREAK();
57755 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CONST):
57756 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CONST)
57757 				ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57758 				HYBRID_BREAK();
57759 			HYBRID_CASE(ZEND_BW_OR_SPEC_CONST_CONST):
57760 				VM_TRACE(ZEND_BW_OR_SPEC_CONST_CONST)
57761 				ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57762 				HYBRID_BREAK();
57763 			HYBRID_CASE(ZEND_BW_AND_SPEC_CONST_CONST):
57764 				VM_TRACE(ZEND_BW_AND_SPEC_CONST_CONST)
57765 				ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57766 				HYBRID_BREAK();
57767 			HYBRID_CASE(ZEND_BW_XOR_SPEC_CONST_CONST):
57768 				VM_TRACE(ZEND_BW_XOR_SPEC_CONST_CONST)
57769 				ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57770 				HYBRID_BREAK();
57771 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CONST_CONST):
57772 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CONST_CONST)
57773 				ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57774 				HYBRID_BREAK();
57775 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST):
57776 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST)
57777 				ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57778 				HYBRID_BREAK();
57779 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST):
57780 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST)
57781 				ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57782 				HYBRID_BREAK();
57783 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST):
57784 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST)
57785 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57786 				HYBRID_BREAK();
57787 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST):
57788 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST)
57789 				ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57790 				HYBRID_BREAK();
57791 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST):
57792 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST)
57793 				ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57794 				HYBRID_BREAK();
57795 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST):
57796 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST)
57797 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57798 				HYBRID_BREAK();
57799 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST):
57800 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST)
57801 				ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57802 				HYBRID_BREAK();
57803 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CONST):
57804 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CONST)
57805 				ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57806 				HYBRID_BREAK();
57807 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST):
57808 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST)
57809 				ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57810 				HYBRID_BREAK();
57811 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST):
57812 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST)
57813 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57814 				HYBRID_BREAK();
57815 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST):
57816 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST)
57817 				ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57818 				HYBRID_BREAK();
57819 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST_CONST):
57820 				VM_TRACE(ZEND_SEND_VAL_SPEC_CONST_CONST)
57821 				ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57822 				HYBRID_BREAK();
57823 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_CONST):
57824 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_CONST)
57825 				ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57826 				HYBRID_BREAK();
57827 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST):
57828 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST)
57829 				ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57830 				HYBRID_BREAK();
57831 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST):
57832 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST)
57833 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57834 				HYBRID_BREAK();
57835 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CONST):
57836 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CONST)
57837 				ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57838 				HYBRID_BREAK();
57839 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST):
57840 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST)
57841 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57842 				HYBRID_BREAK();
57843 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST):
57844 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST)
57845 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57846 				HYBRID_BREAK();
57847 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST):
57848 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST)
57849 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57850 				HYBRID_BREAK();
57851 			HYBRID_CASE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST):
57852 				VM_TRACE(ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST)
57853 				ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57854 				HYBRID_BREAK();
57855 			HYBRID_CASE(ZEND_DECLARE_CONST_SPEC_CONST_CONST):
57856 				VM_TRACE(ZEND_DECLARE_CONST_SPEC_CONST_CONST)
57857 				ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57858 				HYBRID_BREAK();
57859 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CONST):
57860 				VM_TRACE(ZEND_YIELD_SPEC_CONST_CONST)
57861 				ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57862 				HYBRID_BREAK();
57863 			HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_CONST_CONST):
57864 				VM_TRACE(ZEND_SWITCH_LONG_SPEC_CONST_CONST)
57865 				ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57866 				HYBRID_BREAK();
57867 			HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_CONST_CONST):
57868 				VM_TRACE(ZEND_SWITCH_STRING_SPEC_CONST_CONST)
57869 				ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57870 				HYBRID_BREAK();
57871 			HYBRID_CASE(ZEND_MATCH_SPEC_CONST_CONST):
57872 				VM_TRACE(ZEND_MATCH_SPEC_CONST_CONST)
57873 				ZEND_MATCH_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57874 				HYBRID_BREAK();
57875 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CONST_CONST):
57876 				VM_TRACE(ZEND_IN_ARRAY_SPEC_CONST_CONST)
57877 				ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57878 				HYBRID_BREAK();
57879 			HYBRID_CASE(ZEND_ADD_SPEC_CONST_TMPVARCV):
57880 				VM_TRACE(ZEND_ADD_SPEC_CONST_TMPVARCV)
57881 				ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57882 				HYBRID_BREAK();
57883 			HYBRID_CASE(ZEND_SUB_SPEC_CONST_TMPVARCV):
57884 				VM_TRACE(ZEND_SUB_SPEC_CONST_TMPVARCV)
57885 				ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57886 				HYBRID_BREAK();
57887 			HYBRID_CASE(ZEND_MOD_SPEC_CONST_TMPVARCV):
57888 				VM_TRACE(ZEND_MOD_SPEC_CONST_TMPVARCV)
57889 				ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57890 				HYBRID_BREAK();
57891 			HYBRID_CASE(ZEND_SL_SPEC_CONST_TMPVARCV):
57892 				VM_TRACE(ZEND_SL_SPEC_CONST_TMPVARCV)
57893 				ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57894 				HYBRID_BREAK();
57895 			HYBRID_CASE(ZEND_SR_SPEC_CONST_TMPVARCV):
57896 				VM_TRACE(ZEND_SR_SPEC_CONST_TMPVARCV)
57897 				ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57898 				HYBRID_BREAK();
57899 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV):
57900 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV)
57901 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57902 				HYBRID_BREAK();
57903 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ):
57904 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ)
57905 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57906 				HYBRID_BREAK();
57907 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ):
57908 				VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ)
57909 				ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57910 				HYBRID_BREAK();
57911 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV):
57912 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV)
57913 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57914 				HYBRID_BREAK();
57915 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ):
57916 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ)
57917 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57918 				HYBRID_BREAK();
57919 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ):
57920 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ)
57921 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57922 				HYBRID_BREAK();
57923 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV):
57924 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV)
57925 				ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57926 				HYBRID_BREAK();
57927 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV):
57928 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV)
57929 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57930 				HYBRID_BREAK();
57931 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV):
57932 				VM_TRACE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV)
57933 				ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57934 				HYBRID_BREAK();
57935 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV):
57936 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV)
57937 				ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57938 				HYBRID_BREAK();
57939 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV):
57940 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV)
57941 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57942 				HYBRID_BREAK();
57943 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ):
57944 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ)
57945 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57946 				HYBRID_BREAK();
57947 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
57948 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
57949 				ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57950 				HYBRID_BREAK();
57951 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV):
57952 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV)
57953 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57954 				HYBRID_BREAK();
57955 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
57956 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
57957 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57958 				HYBRID_BREAK();
57959 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
57960 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
57961 				ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57962 				HYBRID_BREAK();
57963 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV):
57964 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV)
57965 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57966 				HYBRID_BREAK();
57967 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ):
57968 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ)
57969 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57970 				HYBRID_BREAK();
57971 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ):
57972 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ)
57973 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57974 				HYBRID_BREAK();
57975 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV):
57976 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV)
57977 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57978 				HYBRID_BREAK();
57979 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ):
57980 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ)
57981 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57982 				HYBRID_BREAK();
57983 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ):
57984 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ)
57985 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57986 				HYBRID_BREAK();
57987 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV):
57988 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV)
57989 				ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57990 				HYBRID_BREAK();
57991 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_TMPVAR):
57992 				VM_TRACE(ZEND_DIV_SPEC_CONST_TMPVAR)
57993 				ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57994 				HYBRID_BREAK();
57995 			HYBRID_CASE(ZEND_POW_SPEC_CONST_TMPVAR):
57996 				VM_TRACE(ZEND_POW_SPEC_CONST_TMPVAR)
57997 				ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57998 				HYBRID_BREAK();
57999 			HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_TMPVAR):
58000 				VM_TRACE(ZEND_CONCAT_SPEC_CONST_TMPVAR)
58001 				ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58002 				HYBRID_BREAK();
58003 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR):
58004 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR)
58005 				ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58006 				HYBRID_BREAK();
58007 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR):
58008 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR)
58009 				ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58010 				HYBRID_BREAK();
58011 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR):
58012 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR)
58013 				ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58014 				HYBRID_BREAK();
58015 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR):
58016 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR)
58017 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58018 				HYBRID_BREAK();
58019 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR):
58020 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR)
58021 				ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58022 				HYBRID_BREAK();
58023 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR):
58024 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR)
58025 				ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58026 				HYBRID_BREAK();
58027 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR):
58028 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR)
58029 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58030 				HYBRID_BREAK();
58031 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR):
58032 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR)
58033 				ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58034 				HYBRID_BREAK();
58035 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR):
58036 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR)
58037 				ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58038 				HYBRID_BREAK();
58039 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR):
58040 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR)
58041 				ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58042 				HYBRID_BREAK();
58043 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR):
58044 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR)
58045 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58046 				HYBRID_BREAK();
58047 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR):
58048 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR)
58049 				ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58050 				HYBRID_BREAK();
58051 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR):
58052 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR)
58053 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58054 				HYBRID_BREAK();
58055 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR):
58056 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR)
58057 				ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58058 				HYBRID_BREAK();
58059 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR):
58060 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR)
58061 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58062 				HYBRID_BREAK();
58063 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR):
58064 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR)
58065 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58066 				HYBRID_BREAK();
58067 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR):
58068 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR)
58069 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58070 				HYBRID_BREAK();
58071 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_TMPVAR):
58072 				VM_TRACE(ZEND_YIELD_SPEC_CONST_TMPVAR)
58073 				ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58074 				HYBRID_BREAK();
58075 			HYBRID_CASE(ZEND_FETCH_R_SPEC_CONST_UNUSED):
58076 				VM_TRACE(ZEND_FETCH_R_SPEC_CONST_UNUSED)
58077 				ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58078 				HYBRID_BREAK();
58079 			HYBRID_CASE(ZEND_FETCH_W_SPEC_CONST_UNUSED):
58080 				VM_TRACE(ZEND_FETCH_W_SPEC_CONST_UNUSED)
58081 				ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58082 				HYBRID_BREAK();
58083 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_CONST_UNUSED):
58084 				VM_TRACE(ZEND_FETCH_RW_SPEC_CONST_UNUSED)
58085 				ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58086 				HYBRID_BREAK();
58087 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED):
58088 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED)
58089 				ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58090 				HYBRID_BREAK();
58091 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED):
58092 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED)
58093 				ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58094 				HYBRID_BREAK();
58095 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_CONST_UNUSED):
58096 				VM_TRACE(ZEND_FETCH_IS_SPEC_CONST_UNUSED)
58097 				ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58098 				HYBRID_BREAK();
58099 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED):
58100 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED)
58101 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58102 				HYBRID_BREAK();
58103 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED):
58104 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED)
58105 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58106 				HYBRID_BREAK();
58107 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED):
58108 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED)
58109 				ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58110 				HYBRID_BREAK();
58111 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST_UNUSED):
58112 				VM_TRACE(ZEND_SEND_VAL_SPEC_CONST_UNUSED)
58113 				ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58114 				HYBRID_BREAK();
58115 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED):
58116 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED)
58117 				ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58118 				HYBRID_BREAK();
58119 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK):
58120 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK)
58121 				ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58122 				HYBRID_BREAK();
58123 			HYBRID_CASE(ZEND_NEW_SPEC_CONST_UNUSED):
58124 				VM_TRACE(ZEND_NEW_SPEC_CONST_UNUSED)
58125 				ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58126 				HYBRID_BREAK();
58127 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED):
58128 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED)
58129 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58130 				HYBRID_BREAK();
58131 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED):
58132 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED)
58133 				ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58134 				HYBRID_BREAK();
58135 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED):
58136 				VM_TRACE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED)
58137 				ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58138 				HYBRID_BREAK();
58139 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED):
58140 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED)
58141 				ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58142 				HYBRID_BREAK();
58143 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_UNUSED):
58144 				VM_TRACE(ZEND_YIELD_SPEC_CONST_UNUSED)
58145 				ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58146 				HYBRID_BREAK();
58147 			HYBRID_CASE(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED):
58148 				VM_TRACE(ZEND_MATCH_ERROR_SPEC_CONST_UNUSED)
58149 				ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58150 				HYBRID_BREAK();
58151 			HYBRID_CASE(ZEND_COUNT_SPEC_CONST_UNUSED):
58152 				VM_TRACE(ZEND_COUNT_SPEC_CONST_UNUSED)
58153 				ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58154 				HYBRID_BREAK();
58155 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_CONST_UNUSED):
58156 				VM_TRACE(ZEND_GET_CLASS_SPEC_CONST_UNUSED)
58157 				ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58158 				HYBRID_BREAK();
58159 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_CONST_UNUSED):
58160 				VM_TRACE(ZEND_GET_TYPE_SPEC_CONST_UNUSED)
58161 				ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58162 				HYBRID_BREAK();
58163 			HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED):
58164 				VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED)
58165 				ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58166 				HYBRID_BREAK();
58167 			HYBRID_CASE(ZEND_DIV_SPEC_CONST_CV):
58168 				VM_TRACE(ZEND_DIV_SPEC_CONST_CV)
58169 				ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58170 				HYBRID_BREAK();
58171 			HYBRID_CASE(ZEND_POW_SPEC_CONST_CV):
58172 				VM_TRACE(ZEND_POW_SPEC_CONST_CV)
58173 				ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58174 				HYBRID_BREAK();
58175 			HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_CV):
58176 				VM_TRACE(ZEND_CONCAT_SPEC_CONST_CV)
58177 				ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58178 				HYBRID_BREAK();
58179 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CV):
58180 				VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CV)
58181 				ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58182 				HYBRID_BREAK();
58183 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CV):
58184 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CV)
58185 				ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58186 				HYBRID_BREAK();
58187 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV):
58188 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV)
58189 				ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58190 				HYBRID_BREAK();
58191 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV):
58192 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV)
58193 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58194 				HYBRID_BREAK();
58195 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV):
58196 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV)
58197 				ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58198 				HYBRID_BREAK();
58199 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV):
58200 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV)
58201 				ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58202 				HYBRID_BREAK();
58203 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV):
58204 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV)
58205 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58206 				HYBRID_BREAK();
58207 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CV):
58208 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CV)
58209 				ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58210 				HYBRID_BREAK();
58211 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CV):
58212 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CV)
58213 				ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58214 				HYBRID_BREAK();
58215 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV):
58216 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV)
58217 				ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58218 				HYBRID_BREAK();
58219 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV):
58220 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV)
58221 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58222 				HYBRID_BREAK();
58223 			HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CV):
58224 				VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CV)
58225 				ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58226 				HYBRID_BREAK();
58227 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV):
58228 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV)
58229 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58230 				HYBRID_BREAK();
58231 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CV):
58232 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CV)
58233 				ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58234 				HYBRID_BREAK();
58235 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV):
58236 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV)
58237 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58238 				HYBRID_BREAK();
58239 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV):
58240 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV)
58241 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58242 				HYBRID_BREAK();
58243 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV):
58244 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV)
58245 				ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58246 				HYBRID_BREAK();
58247 			HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CV):
58248 				VM_TRACE(ZEND_YIELD_SPEC_CONST_CV)
58249 				ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58250 				HYBRID_BREAK();
58251 			HYBRID_CASE(ZEND_BW_NOT_SPEC_TMPVARCV):
58252 				VM_TRACE(ZEND_BW_NOT_SPEC_TMPVARCV)
58253 				ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58254 				HYBRID_BREAK();
58255 			HYBRID_CASE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV):
58256 				VM_TRACE(ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV)
58257 				ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58258 				HYBRID_BREAK();
58259 			HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV):
58260 				VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV)
58261 				ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58262 				HYBRID_BREAK();
58263 			HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV):
58264 				VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV)
58265 				ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58266 				HYBRID_BREAK();
58267 			HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_CONST):
58268 				VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_CONST)
58269 				ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58270 				HYBRID_BREAK();
58271 			HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_CONST):
58272 				VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_CONST)
58273 				ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58274 				HYBRID_BREAK();
58275 			HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_CONST):
58276 				VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_CONST)
58277 				ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58278 				HYBRID_BREAK();
58279 			HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_CONST):
58280 				VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_CONST)
58281 				ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58282 				HYBRID_BREAK();
58283 			HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_CONST):
58284 				VM_TRACE(ZEND_SL_SPEC_TMPVARCV_CONST)
58285 				ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58286 				HYBRID_BREAK();
58287 			HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_CONST):
58288 				VM_TRACE(ZEND_SR_SPEC_TMPVARCV_CONST)
58289 				ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58290 				HYBRID_BREAK();
58291 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST):
58292 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST)
58293 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58294 				HYBRID_BREAK();
58295 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ):
58296 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ)
58297 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58298 				HYBRID_BREAK();
58299 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ):
58300 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ)
58301 				ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58302 				HYBRID_BREAK();
58303 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST):
58304 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST)
58305 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58306 				HYBRID_BREAK();
58307 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ):
58308 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ)
58309 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58310 				HYBRID_BREAK();
58311 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ):
58312 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ)
58313 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58314 				HYBRID_BREAK();
58315 			HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_CONST):
58316 				VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_CONST)
58317 				ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58318 				HYBRID_BREAK();
58319 			HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_CONST):
58320 				VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_CONST)
58321 				ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58322 				HYBRID_BREAK();
58323 			HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST):
58324 				VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_CONST)
58325 				ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58326 				HYBRID_BREAK();
58327 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST):
58328 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST)
58329 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58330 				HYBRID_BREAK();
58331 			HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST):
58332 				VM_TRACE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST)
58333 				ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58334 				HYBRID_BREAK();
58335 			HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST):
58336 				VM_TRACE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST)
58337 				ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58338 				HYBRID_BREAK();
58339 			HYBRID_CASE(ZEND_MATCH_SPEC_TMPVARCV_CONST):
58340 				VM_TRACE(ZEND_MATCH_SPEC_TMPVARCV_CONST)
58341 				ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58342 				HYBRID_BREAK();
58343 			HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
58344 				VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
58345 				ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58346 				HYBRID_BREAK();
58347 			HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST):
58348 				VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST)
58349 				ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58350 				HYBRID_BREAK();
58351 			HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST):
58352 				VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST)
58353 				ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58354 				HYBRID_BREAK();
58355 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
58356 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
58357 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58358 				HYBRID_BREAK();
58359 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST):
58360 				VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST)
58361 				ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58362 				HYBRID_BREAK();
58363 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST):
58364 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST)
58365 				ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58366 				HYBRID_BREAK();
58367 			HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST):
58368 				VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST)
58369 				ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58370 				HYBRID_BREAK();
58371 			HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST):
58372 				VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST)
58373 				ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58374 				HYBRID_BREAK();
58375 			HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST):
58376 				VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST)
58377 				ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58378 				HYBRID_BREAK();
58379 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST):
58380 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST)
58381 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58382 				HYBRID_BREAK();
58383 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
58384 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
58385 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58386 				HYBRID_BREAK();
58387 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
58388 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
58389 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58390 				HYBRID_BREAK();
58391 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
58392 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
58393 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58394 				HYBRID_BREAK();
58395 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
58396 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
58397 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58398 				HYBRID_BREAK();
58399 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
58400 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
58401 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58402 				HYBRID_BREAK();
58403 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST):
58404 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST)
58405 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58406 				HYBRID_BREAK();
58407 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
58408 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
58409 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58410 				HYBRID_BREAK();
58411 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
58412 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
58413 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58414 				HYBRID_BREAK();
58415 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
58416 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
58417 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58418 				HYBRID_BREAK();
58419 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
58420 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
58421 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58422 				HYBRID_BREAK();
58423 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
58424 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
58425 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58426 				HYBRID_BREAK();
58427 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST):
58428 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST)
58429 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58430 				HYBRID_BREAK();
58431 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ):
58432 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ)
58433 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58434 				HYBRID_BREAK();
58435 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
58436 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
58437 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58438 				HYBRID_BREAK();
58439 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST):
58440 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST)
58441 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58442 				HYBRID_BREAK();
58443 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
58444 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
58445 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58446 				HYBRID_BREAK();
58447 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
58448 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
58449 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58450 				HYBRID_BREAK();
58451 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST):
58452 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST)
58453 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58454 				HYBRID_BREAK();
58455 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ):
58456 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ)
58457 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58458 				HYBRID_BREAK();
58459 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ):
58460 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ)
58461 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58462 				HYBRID_BREAK();
58463 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST):
58464 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST)
58465 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58466 				HYBRID_BREAK();
58467 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ):
58468 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ)
58469 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58470 				HYBRID_BREAK();
58471 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ):
58472 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ)
58473 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58474 				HYBRID_BREAK();
58475 			HYBRID_CASE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV):
58476 				VM_TRACE(ZEND_ADD_SPEC_TMPVARCV_TMPVARCV)
58477 				ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58478 				HYBRID_BREAK();
58479 			HYBRID_CASE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV):
58480 				VM_TRACE(ZEND_SUB_SPEC_TMPVARCV_TMPVARCV)
58481 				ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58482 				HYBRID_BREAK();
58483 			HYBRID_CASE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV):
58484 				VM_TRACE(ZEND_MUL_SPEC_TMPVARCV_TMPVARCV)
58485 				ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58486 				HYBRID_BREAK();
58487 			HYBRID_CASE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV):
58488 				VM_TRACE(ZEND_MOD_SPEC_TMPVARCV_TMPVARCV)
58489 				ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58490 				HYBRID_BREAK();
58491 			HYBRID_CASE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV):
58492 				VM_TRACE(ZEND_SL_SPEC_TMPVARCV_TMPVARCV)
58493 				ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58494 				HYBRID_BREAK();
58495 			HYBRID_CASE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV):
58496 				VM_TRACE(ZEND_SR_SPEC_TMPVARCV_TMPVARCV)
58497 				ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58498 				HYBRID_BREAK();
58499 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV):
58500 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV)
58501 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58502 				HYBRID_BREAK();
58503 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ):
58504 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ)
58505 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58506 				HYBRID_BREAK();
58507 			HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
58508 				VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
58509 				ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58510 				HYBRID_BREAK();
58511 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV):
58512 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV)
58513 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58514 				HYBRID_BREAK();
58515 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ):
58516 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ)
58517 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58518 				HYBRID_BREAK();
58519 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
58520 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
58521 				ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58522 				HYBRID_BREAK();
58523 			HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV):
58524 				VM_TRACE(ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV)
58525 				ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58526 				HYBRID_BREAK();
58527 			HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV):
58528 				VM_TRACE(ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV)
58529 				ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58530 				HYBRID_BREAK();
58531 			HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV):
58532 				VM_TRACE(ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV)
58533 				ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58534 				HYBRID_BREAK();
58535 			HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
58536 				VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
58537 				ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58538 				HYBRID_BREAK();
58539 			HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV):
58540 				VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV)
58541 				ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58542 				HYBRID_BREAK();
58543 			HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
58544 				VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
58545 				ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58546 				HYBRID_BREAK();
58547 			HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
58548 				VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
58549 				ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58550 				HYBRID_BREAK();
58551 			HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV):
58552 				VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV)
58553 				ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58554 				HYBRID_BREAK();
58555 			HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
58556 				VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
58557 				ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58558 				HYBRID_BREAK();
58559 			HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV):
58560 				VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV)
58561 				ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58562 				HYBRID_BREAK();
58563 			HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV):
58564 				VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV)
58565 				ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58566 				HYBRID_BREAK();
58567 			HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
58568 				VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
58569 				ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58570 				HYBRID_BREAK();
58571 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
58572 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
58573 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58574 				HYBRID_BREAK();
58575 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
58576 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
58577 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58578 				HYBRID_BREAK();
58579 			HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
58580 				VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
58581 				ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58582 				HYBRID_BREAK();
58583 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
58584 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
58585 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58586 				HYBRID_BREAK();
58587 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
58588 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
58589 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58590 				HYBRID_BREAK();
58591 			HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
58592 				VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
58593 				ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58594 				HYBRID_BREAK();
58595 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
58596 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
58597 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58598 				HYBRID_BREAK();
58599 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
58600 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
58601 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58602 				HYBRID_BREAK();
58603 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
58604 				VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
58605 				ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58606 				HYBRID_BREAK();
58607 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
58608 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
58609 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58610 				HYBRID_BREAK();
58611 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
58612 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
58613 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58614 				HYBRID_BREAK();
58615 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
58616 				VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
58617 				ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58618 				HYBRID_BREAK();
58619 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV):
58620 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV)
58621 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58622 				HYBRID_BREAK();
58623 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
58624 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
58625 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58626 				HYBRID_BREAK();
58627 			HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
58628 				VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
58629 				ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58630 				HYBRID_BREAK();
58631 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
58632 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
58633 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58634 				HYBRID_BREAK();
58635 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
58636 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
58637 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58638 				HYBRID_BREAK();
58639 			HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
58640 				VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
58641 				ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58642 				HYBRID_BREAK();
58643 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV):
58644 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV)
58645 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58646 				HYBRID_BREAK();
58647 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ):
58648 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ)
58649 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58650 				HYBRID_BREAK();
58651 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
58652 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
58653 				ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58654 				HYBRID_BREAK();
58655 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV):
58656 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV)
58657 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58658 				HYBRID_BREAK();
58659 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ):
58660 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ)
58661 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58662 				HYBRID_BREAK();
58663 			HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ):
58664 				VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ)
58665 				ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58666 				HYBRID_BREAK();
58667 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR):
58668 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR)
58669 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58670 				HYBRID_BREAK();
58671 			HYBRID_CASE(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED):
58672 				VM_TRACE(ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED)
58673 				ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58674 				HYBRID_BREAK();
58675 			HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV):
58676 				VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV)
58677 				ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58678 				HYBRID_BREAK();
58679 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_TMPVAR):
58680 				VM_TRACE(ZEND_BOOL_NOT_SPEC_TMPVAR)
58681 				ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58682 				HYBRID_BREAK();
58683 			HYBRID_CASE(ZEND_ECHO_SPEC_TMPVAR):
58684 				VM_TRACE(ZEND_ECHO_SPEC_TMPVAR)
58685 				ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58686 				HYBRID_BREAK();
58687 			HYBRID_CASE(ZEND_JMPZ_SPEC_TMPVAR):
58688 				VM_TRACE(ZEND_JMPZ_SPEC_TMPVAR)
58689 				ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58690 				HYBRID_BREAK();
58691 			HYBRID_CASE(ZEND_JMPNZ_SPEC_TMPVAR):
58692 				VM_TRACE(ZEND_JMPNZ_SPEC_TMPVAR)
58693 				ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58694 				HYBRID_BREAK();
58695 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_TMPVAR):
58696 				VM_TRACE(ZEND_JMPZ_EX_SPEC_TMPVAR)
58697 				ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58698 				HYBRID_BREAK();
58699 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_TMPVAR):
58700 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_TMPVAR)
58701 				ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58702 				HYBRID_BREAK();
58703 			HYBRID_CASE(ZEND_FREE_SPEC_TMPVAR):
58704 				VM_TRACE(ZEND_FREE_SPEC_TMPVAR)
58705 				ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58706 				HYBRID_BREAK();
58707 			HYBRID_CASE(ZEND_FE_FREE_SPEC_TMPVAR):
58708 				VM_TRACE(ZEND_FE_FREE_SPEC_TMPVAR)
58709 				ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58710 				HYBRID_BREAK();
58711 			HYBRID_CASE(ZEND_THROW_SPEC_TMPVAR):
58712 				VM_TRACE(ZEND_THROW_SPEC_TMPVAR)
58713 				ZEND_THROW_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58714 				HYBRID_BREAK();
58715 			HYBRID_CASE(ZEND_BOOL_SPEC_TMPVAR):
58716 				VM_TRACE(ZEND_BOOL_SPEC_TMPVAR)
58717 				ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58718 				HYBRID_BREAK();
58719 			HYBRID_CASE(ZEND_CLONE_SPEC_TMPVAR):
58720 				VM_TRACE(ZEND_CLONE_SPEC_TMPVAR)
58721 				ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58722 				HYBRID_BREAK();
58723 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR):
58724 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR)
58725 				ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58726 				HYBRID_BREAK();
58727 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMPVAR):
58728 				VM_TRACE(ZEND_YIELD_FROM_SPEC_TMPVAR)
58729 				ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58730 				HYBRID_BREAK();
58731 			HYBRID_CASE(ZEND_STRLEN_SPEC_TMPVAR):
58732 				VM_TRACE(ZEND_STRLEN_SPEC_TMPVAR)
58733 				ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58734 				HYBRID_BREAK();
58735 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_TMPVAR):
58736 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_TMPVAR)
58737 				ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58738 				HYBRID_BREAK();
58739 			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR):
58740 				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR)
58741 				ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58742 				HYBRID_BREAK();
58743 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CONST):
58744 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CONST)
58745 				ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58746 				HYBRID_BREAK();
58747 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CONST):
58748 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_CONST)
58749 				ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58750 				HYBRID_BREAK();
58751 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CONST):
58752 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CONST)
58753 				ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58754 				HYBRID_BREAK();
58755 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST):
58756 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST)
58757 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58758 				HYBRID_BREAK();
58759 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
58760 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
58761 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58762 				HYBRID_BREAK();
58763 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
58764 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
58765 				ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58766 				HYBRID_BREAK();
58767 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST):
58768 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST)
58769 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58770 				HYBRID_BREAK();
58771 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ):
58772 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ)
58773 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58774 				HYBRID_BREAK();
58775 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ):
58776 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ)
58777 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58778 				HYBRID_BREAK();
58779 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST):
58780 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST)
58781 				ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58782 				HYBRID_BREAK();
58783 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST):
58784 				VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST)
58785 				ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58786 				HYBRID_BREAK();
58787 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST):
58788 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST)
58789 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58790 				HYBRID_BREAK();
58791 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST):
58792 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST)
58793 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58794 				HYBRID_BREAK();
58795 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST):
58796 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST)
58797 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58798 				HYBRID_BREAK();
58799 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST):
58800 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST)
58801 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58802 				HYBRID_BREAK();
58803 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST):
58804 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST)
58805 				ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58806 				HYBRID_BREAK();
58807 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST):
58808 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST)
58809 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58810 				HYBRID_BREAK();
58811 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR_CONST):
58812 				VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR_CONST)
58813 				ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58814 				HYBRID_BREAK();
58815 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CONST):
58816 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CONST)
58817 				ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58818 				HYBRID_BREAK();
58819 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST):
58820 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST)
58821 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58822 				HYBRID_BREAK();
58823 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST):
58824 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST)
58825 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58826 				HYBRID_BREAK();
58827 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST):
58828 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST)
58829 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58830 				HYBRID_BREAK();
58831 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST):
58832 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST)
58833 				ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58834 				HYBRID_BREAK();
58835 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST):
58836 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST)
58837 				ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58838 				HYBRID_BREAK();
58839 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV):
58840 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV)
58841 				ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58842 				HYBRID_BREAK();
58843 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_TMPVAR):
58844 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_TMPVAR)
58845 				ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58846 				HYBRID_BREAK();
58847 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_TMPVAR):
58848 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_TMPVAR)
58849 				ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58850 				HYBRID_BREAK();
58851 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR):
58852 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR)
58853 				ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58854 				HYBRID_BREAK();
58855 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR):
58856 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR)
58857 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58858 				HYBRID_BREAK();
58859 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
58860 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
58861 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58862 				HYBRID_BREAK();
58863 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
58864 				VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
58865 				ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58866 				HYBRID_BREAK();
58867 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR):
58868 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR)
58869 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58870 				HYBRID_BREAK();
58871 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ):
58872 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ)
58873 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58874 				HYBRID_BREAK();
58875 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ):
58876 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ)
58877 				ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58878 				HYBRID_BREAK();
58879 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR):
58880 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR)
58881 				ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58882 				HYBRID_BREAK();
58883 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR):
58884 				VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR)
58885 				ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58886 				HYBRID_BREAK();
58887 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR):
58888 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR)
58889 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58890 				HYBRID_BREAK();
58891 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR):
58892 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR)
58893 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58894 				HYBRID_BREAK();
58895 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR):
58896 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR)
58897 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58898 				HYBRID_BREAK();
58899 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR):
58900 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR)
58901 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58902 				HYBRID_BREAK();
58903 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR):
58904 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR)
58905 				ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58906 				HYBRID_BREAK();
58907 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR):
58908 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR)
58909 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58910 				HYBRID_BREAK();
58911 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_TMPVAR):
58912 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_TMPVAR)
58913 				ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58914 				HYBRID_BREAK();
58915 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR):
58916 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR)
58917 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58918 				HYBRID_BREAK();
58919 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR):
58920 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR)
58921 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58922 				HYBRID_BREAK();
58923 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR):
58924 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR)
58925 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58926 				HYBRID_BREAK();
58927 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR):
58928 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR)
58929 				ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58930 				HYBRID_BREAK();
58931 			HYBRID_CASE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED):
58932 				VM_TRACE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED)
58933 				ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58934 				HYBRID_BREAK();
58935 			HYBRID_CASE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED):
58936 				VM_TRACE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED)
58937 				ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58938 				HYBRID_BREAK();
58939 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED):
58940 				VM_TRACE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED)
58941 				ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58942 				HYBRID_BREAK();
58943 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED):
58944 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED)
58945 				ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58946 				HYBRID_BREAK();
58947 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED):
58948 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED)
58949 				ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58950 				HYBRID_BREAK();
58951 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED):
58952 				VM_TRACE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED)
58953 				ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58954 				HYBRID_BREAK();
58955 			HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED):
58956 				VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED)
58957 				ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58958 				HYBRID_BREAK();
58959 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED):
58960 				VM_TRACE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED)
58961 				ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58962 				HYBRID_BREAK();
58963 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED):
58964 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED)
58965 				ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58966 				HYBRID_BREAK();
58967 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED):
58968 				VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED)
58969 				ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58970 				HYBRID_BREAK();
58971 			HYBRID_CASE(ZEND_COUNT_SPEC_TMPVAR_UNUSED):
58972 				VM_TRACE(ZEND_COUNT_SPEC_TMPVAR_UNUSED)
58973 				ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58974 				HYBRID_BREAK();
58975 			HYBRID_CASE(ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED):
58976 				VM_TRACE(ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED)
58977 				ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58978 				HYBRID_BREAK();
58979 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED):
58980 				VM_TRACE(ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED)
58981 				ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58982 				HYBRID_BREAK();
58983 			HYBRID_CASE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED):
58984 				VM_TRACE(ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED)
58985 				ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58986 				HYBRID_BREAK();
58987 			HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CV):
58988 				VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CV)
58989 				ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58990 				HYBRID_BREAK();
58991 			HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CV):
58992 				VM_TRACE(ZEND_POW_SPEC_TMPVAR_CV)
58993 				ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58994 				HYBRID_BREAK();
58995 			HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CV):
58996 				VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CV)
58997 				ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
58998 				HYBRID_BREAK();
58999 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CV):
59000 				VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CV)
59001 				ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59002 				HYBRID_BREAK();
59003 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV):
59004 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV)
59005 				ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59006 				HYBRID_BREAK();
59007 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV):
59008 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV)
59009 				ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59010 				HYBRID_BREAK();
59011 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV):
59012 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV)
59013 				ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59014 				HYBRID_BREAK();
59015 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV):
59016 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV)
59017 				ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59018 				HYBRID_BREAK();
59019 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV):
59020 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV)
59021 				ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59022 				HYBRID_BREAK();
59023 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV):
59024 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV)
59025 				ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59026 				HYBRID_BREAK();
59027 			HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CV):
59028 				VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CV)
59029 				ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59030 				HYBRID_BREAK();
59031 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV):
59032 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV)
59033 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59034 				HYBRID_BREAK();
59035 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV):
59036 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV)
59037 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59038 				HYBRID_BREAK();
59039 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV):
59040 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV)
59041 				ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59042 				HYBRID_BREAK();
59043 			HYBRID_CASE(ZEND_RETURN_SPEC_TMP):
59044 				VM_TRACE(ZEND_RETURN_SPEC_TMP)
59045 {
59046 	USE_OPLINE
59047 	zval *retval_ptr;
59048 	zval *return_value;
59049 
59050 	retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
59051 	return_value = EX(return_value);
59052 
59053 	if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
59054 		SAVE_OPLINE();
59055 		retval_ptr = ZVAL_UNDEFINED_OP1();
59056 		if (return_value) {
59057 			ZVAL_NULL(return_value);
59058 		}
59059 	} else if (!return_value) {
59060 		if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
59061 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
59062 				SAVE_OPLINE();
59063 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
59064 			}
59065 		}
59066 	} else {
59067 		if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
59068 			ZVAL_COPY_VALUE(return_value, retval_ptr);
59069 			if (IS_TMP_VAR == IS_CONST) {
59070 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
59071 					Z_ADDREF_P(return_value);
59072 				}
59073 			}
59074 		} else if (IS_TMP_VAR == IS_CV) {
59075 			do {
59076 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
59077 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
59078 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
59079 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
59080 							ZVAL_COPY_VALUE(return_value, retval_ptr);
59081 							if (GC_MAY_LEAK(ref)) {
59082 								SAVE_OPLINE();
59083 								gc_possible_root(ref);
59084 							}
59085 							ZVAL_NULL(retval_ptr);
59086 							break;
59087 						} else {
59088 							Z_ADDREF_P(retval_ptr);
59089 						}
59090 					} else {
59091 						retval_ptr = Z_REFVAL_P(retval_ptr);
59092 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
59093 							Z_ADDREF_P(retval_ptr);
59094 						}
59095 					}
59096 				}
59097 				ZVAL_COPY_VALUE(return_value, retval_ptr);
59098 			} while (0);
59099 		} else /* if (IS_TMP_VAR == IS_VAR) */ {
59100 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
59101 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
59102 
59103 				retval_ptr = Z_REFVAL_P(retval_ptr);
59104 				ZVAL_COPY_VALUE(return_value, retval_ptr);
59105 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
59106 					efree_size(ref, sizeof(zend_reference));
59107 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
59108 					Z_ADDREF_P(retval_ptr);
59109 				}
59110 			} else {
59111 				ZVAL_COPY_VALUE(return_value, retval_ptr);
59112 			}
59113 		}
59114 	}
59115 
59116 
59117 
59118 	goto zend_leave_helper_SPEC_LABEL;
59119 }
59120 
59121 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_TMP):
59122 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_TMP)
59123 				ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59124 				HYBRID_BREAK();
59125 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP):
59126 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_TMP)
59127 				ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59128 				HYBRID_BREAK();
59129 			HYBRID_CASE(ZEND_SEND_USER_SPEC_TMP):
59130 				VM_TRACE(ZEND_SEND_USER_SPEC_TMP)
59131 				ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59132 				HYBRID_BREAK();
59133 			HYBRID_CASE(ZEND_CAST_SPEC_TMP):
59134 				VM_TRACE(ZEND_CAST_SPEC_TMP)
59135 				ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59136 				HYBRID_BREAK();
59137 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_TMP):
59138 				VM_TRACE(ZEND_FE_RESET_R_SPEC_TMP)
59139 				ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59140 				HYBRID_BREAK();
59141 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_TMP):
59142 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_TMP)
59143 				ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59144 				HYBRID_BREAK();
59145 			HYBRID_CASE(ZEND_END_SILENCE_SPEC_TMP):
59146 				VM_TRACE(ZEND_END_SILENCE_SPEC_TMP)
59147 				ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59148 				HYBRID_BREAK();
59149 			HYBRID_CASE(ZEND_JMP_SET_SPEC_TMP):
59150 				VM_TRACE(ZEND_JMP_SET_SPEC_TMP)
59151 				ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59152 				HYBRID_BREAK();
59153 			HYBRID_CASE(ZEND_COALESCE_SPEC_TMP):
59154 				VM_TRACE(ZEND_COALESCE_SPEC_TMP)
59155 				ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59156 				HYBRID_BREAK();
59157 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_TMP):
59158 				VM_TRACE(ZEND_JMP_NULL_SPEC_TMP)
59159 				ZEND_JMP_NULL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59160 				HYBRID_BREAK();
59161 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_TMP):
59162 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_TMP)
59163 				ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59164 				HYBRID_BREAK();
59165 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST):
59166 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST)
59167 				ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59168 				HYBRID_BREAK();
59169 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_CONST):
59170 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_CONST)
59171 				ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59172 				HYBRID_BREAK();
59173 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST):
59174 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST)
59175 				ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59176 				HYBRID_BREAK();
59177 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST):
59178 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST)
59179 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59180 				HYBRID_BREAK();
59181 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST):
59182 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST)
59183 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59184 				HYBRID_BREAK();
59185 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CONST):
59186 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CONST)
59187 				ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59188 				HYBRID_BREAK();
59189 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CONST):
59190 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CONST)
59191 				ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59192 				HYBRID_BREAK();
59193 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_CONST):
59194 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_CONST)
59195 				ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59196 				HYBRID_BREAK();
59197 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST):
59198 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST)
59199 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59200 				HYBRID_BREAK();
59201 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CONST):
59202 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CONST)
59203 				ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59204 				HYBRID_BREAK();
59205 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CONST):
59206 				VM_TRACE(ZEND_YIELD_SPEC_TMP_CONST)
59207 				ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59208 				HYBRID_BREAK();
59209 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_TMP_CONST):
59210 				VM_TRACE(ZEND_IN_ARRAY_SPEC_TMP_CONST)
59211 				ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59212 				HYBRID_BREAK();
59213 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR):
59214 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR)
59215 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59216 				HYBRID_BREAK();
59217 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR):
59218 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR)
59219 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59220 				HYBRID_BREAK();
59221 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR):
59222 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR)
59223 				ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59224 				HYBRID_BREAK();
59225 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_TMPVAR):
59226 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_TMPVAR)
59227 				ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59228 				HYBRID_BREAK();
59229 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR):
59230 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR)
59231 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59232 				HYBRID_BREAK();
59233 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR):
59234 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR)
59235 				ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59236 				HYBRID_BREAK();
59237 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_TMPVAR):
59238 				VM_TRACE(ZEND_YIELD_SPEC_TMP_TMPVAR)
59239 				ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59240 				HYBRID_BREAK();
59241 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP):
59242 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP)
59243 				ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59244 				HYBRID_BREAK();
59245 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_TMP):
59246 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_TMP)
59247 				ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59248 				HYBRID_BREAK();
59249 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP):
59250 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP)
59251 				ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59252 				HYBRID_BREAK();
59253 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_VAR):
59254 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_VAR)
59255 				ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59256 				HYBRID_BREAK();
59257 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED):
59258 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED)
59259 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59260 				HYBRID_BREAK();
59261 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED):
59262 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED)
59263 				ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59264 				HYBRID_BREAK();
59265 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED):
59266 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED)
59267 				ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59268 				HYBRID_BREAK();
59269 			HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK):
59270 				VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK)
59271 				ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59272 				HYBRID_BREAK();
59273 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED):
59274 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED)
59275 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59276 				HYBRID_BREAK();
59277 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED):
59278 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED)
59279 				ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59280 				HYBRID_BREAK();
59281 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_UNUSED):
59282 				VM_TRACE(ZEND_YIELD_SPEC_TMP_UNUSED)
59283 				ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59284 				HYBRID_BREAK();
59285 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_TMP_UNUSED):
59286 				VM_TRACE(ZEND_GET_TYPE_SPEC_TMP_UNUSED)
59287 				ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59288 				HYBRID_BREAK();
59289 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_TMP_CV):
59290 				VM_TRACE(ZEND_CASE_STRICT_SPEC_TMP_CV)
59291 				ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59292 				HYBRID_BREAK();
59293 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV):
59294 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV)
59295 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59296 				HYBRID_BREAK();
59297 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV):
59298 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV)
59299 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59300 				HYBRID_BREAK();
59301 			HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CV):
59302 				VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CV)
59303 				ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59304 				HYBRID_BREAK();
59305 			HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CV):
59306 				VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CV)
59307 				ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59308 				HYBRID_BREAK();
59309 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV):
59310 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV)
59311 				ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59312 				HYBRID_BREAK();
59313 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CV):
59314 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CV)
59315 				ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59316 				HYBRID_BREAK();
59317 			HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CV):
59318 				VM_TRACE(ZEND_YIELD_SPEC_TMP_CV)
59319 				ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59320 				HYBRID_BREAK();
59321 			HYBRID_CASE(ZEND_BIND_LEXICAL_SPEC_TMP_CV):
59322 				VM_TRACE(ZEND_BIND_LEXICAL_SPEC_TMP_CV)
59323 				ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59324 				HYBRID_BREAK();
59325 			HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED):
59326 				VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED)
59327 				ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59328 				HYBRID_BREAK();
59329 			HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED):
59330 				VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED)
59331 				ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59332 				HYBRID_BREAK();
59333 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED):
59334 				VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED)
59335 				ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59336 				HYBRID_BREAK();
59337 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED):
59338 				VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED)
59339 				ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59340 				HYBRID_BREAK();
59341 			HYBRID_CASE(ZEND_POST_INC_SPEC_VAR):
59342 				VM_TRACE(ZEND_POST_INC_SPEC_VAR)
59343 				ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59344 				HYBRID_BREAK();
59345 			HYBRID_CASE(ZEND_POST_DEC_SPEC_VAR):
59346 				VM_TRACE(ZEND_POST_DEC_SPEC_VAR)
59347 				ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59348 				HYBRID_BREAK();
59349 			HYBRID_CASE(ZEND_RETURN_SPEC_VAR):
59350 				VM_TRACE(ZEND_RETURN_SPEC_VAR)
59351 {
59352 	USE_OPLINE
59353 	zval *retval_ptr;
59354 	zval *return_value;
59355 
59356 	retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
59357 	return_value = EX(return_value);
59358 
59359 	if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
59360 		SAVE_OPLINE();
59361 		retval_ptr = ZVAL_UNDEFINED_OP1();
59362 		if (return_value) {
59363 			ZVAL_NULL(return_value);
59364 		}
59365 	} else if (!return_value) {
59366 		if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
59367 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
59368 				SAVE_OPLINE();
59369 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
59370 			}
59371 		}
59372 	} else {
59373 		if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
59374 			ZVAL_COPY_VALUE(return_value, retval_ptr);
59375 			if (IS_VAR == IS_CONST) {
59376 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
59377 					Z_ADDREF_P(return_value);
59378 				}
59379 			}
59380 		} else if (IS_VAR == IS_CV) {
59381 			do {
59382 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
59383 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
59384 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
59385 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
59386 							ZVAL_COPY_VALUE(return_value, retval_ptr);
59387 							if (GC_MAY_LEAK(ref)) {
59388 								SAVE_OPLINE();
59389 								gc_possible_root(ref);
59390 							}
59391 							ZVAL_NULL(retval_ptr);
59392 							break;
59393 						} else {
59394 							Z_ADDREF_P(retval_ptr);
59395 						}
59396 					} else {
59397 						retval_ptr = Z_REFVAL_P(retval_ptr);
59398 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
59399 							Z_ADDREF_P(retval_ptr);
59400 						}
59401 					}
59402 				}
59403 				ZVAL_COPY_VALUE(return_value, retval_ptr);
59404 			} while (0);
59405 		} else /* if (IS_VAR == IS_VAR) */ {
59406 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
59407 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
59408 
59409 				retval_ptr = Z_REFVAL_P(retval_ptr);
59410 				ZVAL_COPY_VALUE(return_value, retval_ptr);
59411 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
59412 					efree_size(ref, sizeof(zend_reference));
59413 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
59414 					Z_ADDREF_P(retval_ptr);
59415 				}
59416 			} else {
59417 				ZVAL_COPY_VALUE(return_value, retval_ptr);
59418 			}
59419 		}
59420 	}
59421 
59422 
59423 
59424 	goto zend_leave_helper_SPEC_LABEL;
59425 }
59426 
59427 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_VAR):
59428 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_VAR)
59429 				ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59430 				HYBRID_BREAK();
59431 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR):
59432 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_VAR)
59433 				ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59434 				HYBRID_BREAK();
59435 			HYBRID_CASE(ZEND_SEND_USER_SPEC_VAR):
59436 				VM_TRACE(ZEND_SEND_USER_SPEC_VAR)
59437 				ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59438 				HYBRID_BREAK();
59439 			HYBRID_CASE(ZEND_CAST_SPEC_VAR):
59440 				VM_TRACE(ZEND_CAST_SPEC_VAR)
59441 				ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59442 				HYBRID_BREAK();
59443 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_VAR):
59444 				VM_TRACE(ZEND_FE_RESET_R_SPEC_VAR)
59445 				ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59446 				HYBRID_BREAK();
59447 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_VAR):
59448 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_VAR)
59449 				ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59450 				HYBRID_BREAK();
59451 			HYBRID_CASE(ZEND_FE_FETCH_R_SPEC_VAR):
59452 				VM_TRACE(ZEND_FE_FETCH_R_SPEC_VAR)
59453 				ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59454 				HYBRID_BREAK();
59455 			HYBRID_CASE(ZEND_FE_FETCH_RW_SPEC_VAR):
59456 				VM_TRACE(ZEND_FE_FETCH_RW_SPEC_VAR)
59457 				ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59458 				HYBRID_BREAK();
59459 			HYBRID_CASE(ZEND_JMP_SET_SPEC_VAR):
59460 				VM_TRACE(ZEND_JMP_SET_SPEC_VAR)
59461 				ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59462 				HYBRID_BREAK();
59463 			HYBRID_CASE(ZEND_COALESCE_SPEC_VAR):
59464 				VM_TRACE(ZEND_COALESCE_SPEC_VAR)
59465 				ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59466 				HYBRID_BREAK();
59467 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_VAR):
59468 				VM_TRACE(ZEND_JMP_NULL_SPEC_VAR)
59469 				ZEND_JMP_NULL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59470 				HYBRID_BREAK();
59471 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_VAR):
59472 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_VAR)
59473 				ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59474 				HYBRID_BREAK();
59475 			HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR):
59476 				VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR)
59477 				ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59478 				HYBRID_BREAK();
59479 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST):
59480 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST)
59481 				ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59482 				HYBRID_BREAK();
59483 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_CONST):
59484 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_CONST)
59485 				ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59486 				HYBRID_BREAK();
59487 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST):
59488 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST)
59489 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59490 				HYBRID_BREAK();
59491 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST):
59492 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST)
59493 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59494 				HYBRID_BREAK();
59495 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST):
59496 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST)
59497 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59498 				HYBRID_BREAK();
59499 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CONST):
59500 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CONST)
59501 				ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59502 				HYBRID_BREAK();
59503 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST):
59504 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST)
59505 				ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59506 				HYBRID_BREAK();
59507 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST):
59508 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST)
59509 				ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59510 				HYBRID_BREAK();
59511 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST):
59512 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST)
59513 				ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59514 				HYBRID_BREAK();
59515 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST):
59516 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST)
59517 				ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59518 				HYBRID_BREAK();
59519 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST):
59520 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST)
59521 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59522 				HYBRID_BREAK();
59523 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST):
59524 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST)
59525 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59526 				HYBRID_BREAK();
59527 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST):
59528 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST)
59529 				ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59530 				HYBRID_BREAK();
59531 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST):
59532 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST)
59533 				ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59534 				HYBRID_BREAK();
59535 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST):
59536 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST)
59537 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59538 				HYBRID_BREAK();
59539 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST):
59540 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST)
59541 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59542 				HYBRID_BREAK();
59543 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST):
59544 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST)
59545 				ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59546 				HYBRID_BREAK();
59547 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST):
59548 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST)
59549 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59550 				HYBRID_BREAK();
59551 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP):
59552 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP)
59553 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59554 				HYBRID_BREAK();
59555 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR):
59556 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR)
59557 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59558 				HYBRID_BREAK();
59559 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV):
59560 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV)
59561 				ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59562 				HYBRID_BREAK();
59563 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST):
59564 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST)
59565 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59566 				HYBRID_BREAK();
59567 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP):
59568 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP)
59569 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59570 				HYBRID_BREAK();
59571 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR):
59572 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR)
59573 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59574 				HYBRID_BREAK();
59575 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV):
59576 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV)
59577 				ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59578 				HYBRID_BREAK();
59579 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED):
59580 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED)
59581 				ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59582 				HYBRID_BREAK();
59583 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED):
59584 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED)
59585 				ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59586 				HYBRID_BREAK();
59587 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR):
59588 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR)
59589 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59590 				HYBRID_BREAK();
59591 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV):
59592 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV)
59593 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59594 				HYBRID_BREAK();
59595 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST):
59596 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST)
59597 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59598 				HYBRID_BREAK();
59599 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR_CONST):
59600 				VM_TRACE(ZEND_SEND_VAR_SPEC_VAR_CONST)
59601 				ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59602 				HYBRID_BREAK();
59603 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST):
59604 				VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST)
59605 				ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59606 				HYBRID_BREAK();
59607 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST):
59608 				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST)
59609 				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59610 				HYBRID_BREAK();
59611 			HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR_CONST):
59612 				VM_TRACE(ZEND_SEND_REF_SPEC_VAR_CONST)
59613 				ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59614 				HYBRID_BREAK();
59615 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_CONST):
59616 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_CONST)
59617 				ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59618 				HYBRID_BREAK();
59619 			HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST):
59620 				VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST)
59621 				ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59622 				HYBRID_BREAK();
59623 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST):
59624 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST)
59625 				ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59626 				HYBRID_BREAK();
59627 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST):
59628 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST)
59629 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59630 				HYBRID_BREAK();
59631 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CONST):
59632 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CONST)
59633 				ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59634 				HYBRID_BREAK();
59635 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CONST):
59636 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CONST)
59637 				ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59638 				HYBRID_BREAK();
59639 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CONST):
59640 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CONST)
59641 				ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59642 				HYBRID_BREAK();
59643 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CONST):
59644 				VM_TRACE(ZEND_YIELD_SPEC_VAR_CONST)
59645 				ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59646 				HYBRID_BREAK();
59647 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_VAR_CONST):
59648 				VM_TRACE(ZEND_IN_ARRAY_SPEC_VAR_CONST)
59649 				ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59650 				HYBRID_BREAK();
59651 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV):
59652 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV)
59653 				ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59654 				HYBRID_BREAK();
59655 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR):
59656 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR)
59657 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59658 				HYBRID_BREAK();
59659 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR):
59660 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR)
59661 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59662 				HYBRID_BREAK();
59663 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR):
59664 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR)
59665 				ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59666 				HYBRID_BREAK();
59667 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR):
59668 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR)
59669 				ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59670 				HYBRID_BREAK();
59671 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR):
59672 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR)
59673 				ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59674 				HYBRID_BREAK();
59675 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR):
59676 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR)
59677 				ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59678 				HYBRID_BREAK();
59679 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR):
59680 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR)
59681 				ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59682 				HYBRID_BREAK();
59683 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR):
59684 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR)
59685 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59686 				HYBRID_BREAK();
59687 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR):
59688 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR)
59689 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59690 				HYBRID_BREAK();
59691 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR):
59692 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR)
59693 				ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59694 				HYBRID_BREAK();
59695 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR):
59696 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR)
59697 				ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59698 				HYBRID_BREAK();
59699 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR):
59700 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR)
59701 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59702 				HYBRID_BREAK();
59703 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR):
59704 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR)
59705 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59706 				HYBRID_BREAK();
59707 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR):
59708 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR)
59709 				ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59710 				HYBRID_BREAK();
59711 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST):
59712 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST)
59713 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59714 				HYBRID_BREAK();
59715 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP):
59716 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP)
59717 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59718 				HYBRID_BREAK();
59719 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR):
59720 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR)
59721 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59722 				HYBRID_BREAK();
59723 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV):
59724 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV)
59725 				ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59726 				HYBRID_BREAK();
59727 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST):
59728 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST)
59729 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59730 				HYBRID_BREAK();
59731 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP):
59732 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP)
59733 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59734 				HYBRID_BREAK();
59735 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR):
59736 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR)
59737 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59738 				HYBRID_BREAK();
59739 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV):
59740 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV)
59741 				ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59742 				HYBRID_BREAK();
59743 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR):
59744 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR)
59745 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59746 				HYBRID_BREAK();
59747 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV):
59748 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV)
59749 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59750 				HYBRID_BREAK();
59751 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR):
59752 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR)
59753 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59754 				HYBRID_BREAK();
59755 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR):
59756 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR)
59757 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59758 				HYBRID_BREAK();
59759 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR):
59760 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR)
59761 				ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59762 				HYBRID_BREAK();
59763 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR):
59764 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR)
59765 				ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59766 				HYBRID_BREAK();
59767 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR):
59768 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR)
59769 				ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59770 				HYBRID_BREAK();
59771 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_TMPVAR):
59772 				VM_TRACE(ZEND_YIELD_SPEC_VAR_TMPVAR)
59773 				ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59774 				HYBRID_BREAK();
59775 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP):
59776 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP)
59777 				ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59778 				HYBRID_BREAK();
59779 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_TMP):
59780 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_TMP)
59781 				ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59782 				HYBRID_BREAK();
59783 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP):
59784 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP)
59785 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59786 				HYBRID_BREAK();
59787 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED):
59788 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED)
59789 				ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59790 				HYBRID_BREAK();
59791 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED):
59792 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED)
59793 				ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59794 				HYBRID_BREAK();
59795 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR):
59796 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR)
59797 				ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59798 				HYBRID_BREAK();
59799 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_VAR):
59800 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_VAR)
59801 				ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59802 				HYBRID_BREAK();
59803 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR):
59804 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR)
59805 				ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59806 				HYBRID_BREAK();
59807 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED):
59808 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED)
59809 				ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59810 				HYBRID_BREAK();
59811 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED):
59812 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED)
59813 				ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59814 				HYBRID_BREAK();
59815 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_VAR):
59816 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_VAR)
59817 				ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59818 				HYBRID_BREAK();
59819 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED):
59820 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED)
59821 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59822 				HYBRID_BREAK();
59823 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED):
59824 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED)
59825 				ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59826 				HYBRID_BREAK();
59827 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED):
59828 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED)
59829 				ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59830 				HYBRID_BREAK();
59831 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED):
59832 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED)
59833 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59834 				HYBRID_BREAK();
59835 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST):
59836 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST)
59837 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59838 				HYBRID_BREAK();
59839 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP):
59840 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP)
59841 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59842 				HYBRID_BREAK();
59843 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR):
59844 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR)
59845 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59846 				HYBRID_BREAK();
59847 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV):
59848 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV)
59849 				ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59850 				HYBRID_BREAK();
59851 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED):
59852 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED)
59853 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59854 				HYBRID_BREAK();
59855 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED):
59856 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED)
59857 				ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59858 				HYBRID_BREAK();
59859 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR_UNUSED):
59860 				VM_TRACE(ZEND_SEND_VAR_SPEC_VAR_UNUSED)
59861 				ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59862 				HYBRID_BREAK();
59863 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED):
59864 				VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED)
59865 				ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59866 				HYBRID_BREAK();
59867 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED):
59868 				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED)
59869 				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59870 				HYBRID_BREAK();
59871 			HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK):
59872 				VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK)
59873 				ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59874 				HYBRID_BREAK();
59875 			HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR_UNUSED):
59876 				VM_TRACE(ZEND_SEND_REF_SPEC_VAR_UNUSED)
59877 				ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59878 				HYBRID_BREAK();
59879 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED):
59880 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED)
59881 				ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59882 				HYBRID_BREAK();
59883 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK):
59884 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK)
59885 				ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59886 				HYBRID_BREAK();
59887 			HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED):
59888 				VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED)
59889 				ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59890 				HYBRID_BREAK();
59891 			HYBRID_CASE(ZEND_NEW_SPEC_VAR_UNUSED):
59892 				VM_TRACE(ZEND_NEW_SPEC_VAR_UNUSED)
59893 				ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59894 				HYBRID_BREAK();
59895 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED):
59896 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED)
59897 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59898 				HYBRID_BREAK();
59899 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED):
59900 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED)
59901 				ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59902 				HYBRID_BREAK();
59903 			HYBRID_CASE(ZEND_SEPARATE_SPEC_VAR_UNUSED):
59904 				VM_TRACE(ZEND_SEPARATE_SPEC_VAR_UNUSED)
59905 				ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59906 				HYBRID_BREAK();
59907 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_UNUSED):
59908 				VM_TRACE(ZEND_YIELD_SPEC_VAR_UNUSED)
59909 				ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59910 				HYBRID_BREAK();
59911 			HYBRID_CASE(ZEND_MAKE_REF_SPEC_VAR_UNUSED):
59912 				VM_TRACE(ZEND_MAKE_REF_SPEC_VAR_UNUSED)
59913 				ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59914 				HYBRID_BREAK();
59915 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_VAR_UNUSED):
59916 				VM_TRACE(ZEND_GET_TYPE_SPEC_VAR_UNUSED)
59917 				ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59918 				HYBRID_BREAK();
59919 			HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED):
59920 				VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED)
59921 				ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59922 				HYBRID_BREAK();
59923 			HYBRID_CASE(ZEND_CASE_STRICT_SPEC_VAR_CV):
59924 				VM_TRACE(ZEND_CASE_STRICT_SPEC_VAR_CV)
59925 				ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59926 				HYBRID_BREAK();
59927 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV):
59928 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV)
59929 				ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59930 				HYBRID_BREAK();
59931 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV):
59932 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV)
59933 				ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59934 				HYBRID_BREAK();
59935 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_VAR_CV):
59936 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CV)
59937 				ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59938 				HYBRID_BREAK();
59939 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV):
59940 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV)
59941 				ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59942 				HYBRID_BREAK();
59943 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CV):
59944 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CV)
59945 				ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59946 				HYBRID_BREAK();
59947 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CV):
59948 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CV)
59949 				ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59950 				HYBRID_BREAK();
59951 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV):
59952 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV)
59953 				ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59954 				HYBRID_BREAK();
59955 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV):
59956 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV)
59957 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59958 				HYBRID_BREAK();
59959 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV):
59960 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV)
59961 				ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59962 				HYBRID_BREAK();
59963 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV):
59964 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV)
59965 				ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59966 				HYBRID_BREAK();
59967 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV):
59968 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV)
59969 				ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59970 				HYBRID_BREAK();
59971 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV):
59972 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV)
59973 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59974 				HYBRID_BREAK();
59975 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV):
59976 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV)
59977 				ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59978 				HYBRID_BREAK();
59979 			HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CV):
59980 				VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CV)
59981 				ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59982 				HYBRID_BREAK();
59983 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST):
59984 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST)
59985 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59986 				HYBRID_BREAK();
59987 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP):
59988 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP)
59989 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59990 				HYBRID_BREAK();
59991 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR):
59992 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR)
59993 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59994 				HYBRID_BREAK();
59995 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV):
59996 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV)
59997 				ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
59998 				HYBRID_BREAK();
59999 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST):
60000 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST)
60001 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60002 				HYBRID_BREAK();
60003 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP):
60004 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP)
60005 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60006 				HYBRID_BREAK();
60007 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR):
60008 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR)
60009 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60010 				HYBRID_BREAK();
60011 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV):
60012 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV)
60013 				ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60014 				HYBRID_BREAK();
60015 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED):
60016 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED)
60017 				ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60018 				HYBRID_BREAK();
60019 			HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED):
60020 				VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED)
60021 				ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60022 				HYBRID_BREAK();
60023 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_CV):
60024 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_CV)
60025 				ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60026 				HYBRID_BREAK();
60027 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR):
60028 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR)
60029 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60030 				HYBRID_BREAK();
60031 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV):
60032 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV)
60033 				ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60034 				HYBRID_BREAK();
60035 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV):
60036 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV)
60037 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60038 				HYBRID_BREAK();
60039 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV):
60040 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV)
60041 				ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60042 				HYBRID_BREAK();
60043 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CV):
60044 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CV)
60045 				ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60046 				HYBRID_BREAK();
60047 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CV):
60048 				VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CV)
60049 				ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60050 				HYBRID_BREAK();
60051 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CV):
60052 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CV)
60053 				ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60054 				HYBRID_BREAK();
60055 			HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CV):
60056 				VM_TRACE(ZEND_YIELD_SPEC_VAR_CV)
60057 				ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60058 				HYBRID_BREAK();
60059 			HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED):
60060 				VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED)
60061 				ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60062 				HYBRID_BREAK();
60063 			HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED):
60064 				VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED)
60065 				ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60066 				HYBRID_BREAK();
60067 			HYBRID_CASE(ZEND_CLONE_SPEC_UNUSED):
60068 				VM_TRACE(ZEND_CLONE_SPEC_UNUSED)
60069 				ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60070 				HYBRID_BREAK();
60071 			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED):
60072 				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED)
60073 				ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60074 				HYBRID_BREAK();
60075 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST):
60076 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST)
60077 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60078 				HYBRID_BREAK();
60079 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST):
60080 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST)
60081 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60082 				HYBRID_BREAK();
60083 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST):
60084 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST)
60085 				ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60086 				HYBRID_BREAK();
60087 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST):
60088 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST)
60089 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60090 				HYBRID_BREAK();
60091 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST):
60092 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST)
60093 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60094 				HYBRID_BREAK();
60095 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST):
60096 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST)
60097 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60098 				HYBRID_BREAK();
60099 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST):
60100 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST)
60101 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60102 				HYBRID_BREAK();
60103 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST):
60104 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST)
60105 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60106 				HYBRID_BREAK();
60107 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST):
60108 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST)
60109 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60110 				HYBRID_BREAK();
60111 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST):
60112 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST)
60113 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60114 				HYBRID_BREAK();
60115 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP):
60116 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP)
60117 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60118 				HYBRID_BREAK();
60119 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR):
60120 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR)
60121 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60122 				HYBRID_BREAK();
60123 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV):
60124 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV)
60125 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60126 				HYBRID_BREAK();
60127 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR):
60128 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR)
60129 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60130 				HYBRID_BREAK();
60131 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV):
60132 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV)
60133 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60134 				HYBRID_BREAK();
60135 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST):
60136 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST)
60137 				ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60138 				HYBRID_BREAK();
60139 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST):
60140 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST)
60141 				ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60142 				HYBRID_BREAK();
60143 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST):
60144 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST)
60145 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60146 				HYBRID_BREAK();
60147 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST):
60148 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST)
60149 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60150 				HYBRID_BREAK();
60151 			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST):
60152 				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST)
60153 				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60154 				HYBRID_BREAK();
60155 			HYBRID_CASE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST):
60156 				VM_TRACE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST)
60157 				ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60158 				HYBRID_BREAK();
60159 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST):
60160 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST)
60161 				ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60162 				HYBRID_BREAK();
60163 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST):
60164 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CONST)
60165 				ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60166 				HYBRID_BREAK();
60167 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST):
60168 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST)
60169 				ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60170 				HYBRID_BREAK();
60171 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST):
60172 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST)
60173 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60174 				HYBRID_BREAK();
60175 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CONST):
60176 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CONST)
60177 				ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60178 				HYBRID_BREAK();
60179 			HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV):
60180 				VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV)
60181 				ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60182 				HYBRID_BREAK();
60183 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR):
60184 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR)
60185 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60186 				HYBRID_BREAK();
60187 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR):
60188 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR)
60189 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60190 				HYBRID_BREAK();
60191 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR):
60192 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR)
60193 				ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60194 				HYBRID_BREAK();
60195 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR):
60196 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR)
60197 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60198 				HYBRID_BREAK();
60199 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR):
60200 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR)
60201 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60202 				HYBRID_BREAK();
60203 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR):
60204 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR)
60205 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60206 				HYBRID_BREAK();
60207 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR):
60208 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR)
60209 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60210 				HYBRID_BREAK();
60211 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR):
60212 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR)
60213 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60214 				HYBRID_BREAK();
60215 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR):
60216 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR)
60217 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60218 				HYBRID_BREAK();
60219 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST):
60220 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST)
60221 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60222 				HYBRID_BREAK();
60223 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP):
60224 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP)
60225 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60226 				HYBRID_BREAK();
60227 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
60228 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
60229 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60230 				HYBRID_BREAK();
60231 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
60232 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
60233 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60234 				HYBRID_BREAK();
60235 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR):
60236 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR)
60237 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60238 				HYBRID_BREAK();
60239 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV):
60240 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV)
60241 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60242 				HYBRID_BREAK();
60243 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR):
60244 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR)
60245 				ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60246 				HYBRID_BREAK();
60247 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR):
60248 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR)
60249 				ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60250 				HYBRID_BREAK();
60251 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR):
60252 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR)
60253 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60254 				HYBRID_BREAK();
60255 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR):
60256 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR)
60257 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60258 				HYBRID_BREAK();
60259 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR):
60260 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR)
60261 				ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60262 				HYBRID_BREAK();
60263 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR):
60264 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR)
60265 				ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60266 				HYBRID_BREAK();
60267 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR):
60268 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR)
60269 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60270 				HYBRID_BREAK();
60271 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_TMPVAR):
60272 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_TMPVAR)
60273 				ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60274 				HYBRID_BREAK();
60275 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED):
60276 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED)
60277 				ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60278 				HYBRID_BREAK();
60279 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED):
60280 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED)
60281 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60282 				HYBRID_BREAK();
60283 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED):
60284 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED)
60285 				ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60286 				HYBRID_BREAK();
60287 			HYBRID_CASE(ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED):
60288 				VM_TRACE(ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED)
60289 				ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60290 				HYBRID_BREAK();
60291 			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED):
60292 				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED)
60293 				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60294 				HYBRID_BREAK();
60295 			HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK):
60296 				VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK)
60297 				ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60298 				HYBRID_BREAK();
60299 			HYBRID_CASE(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED):
60300 				VM_TRACE(ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED)
60301 				ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60302 				HYBRID_BREAK();
60303 			HYBRID_CASE(ZEND_NEW_SPEC_UNUSED_UNUSED):
60304 				VM_TRACE(ZEND_NEW_SPEC_UNUSED_UNUSED)
60305 				ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60306 				HYBRID_BREAK();
60307 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED):
60308 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED)
60309 				ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60310 				HYBRID_BREAK();
60311 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_UNUSED):
60312 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_UNUSED)
60313 				ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60314 				HYBRID_BREAK();
60315 			HYBRID_CASE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED):
60316 				VM_TRACE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED)
60317 				ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60318 				HYBRID_BREAK();
60319 			HYBRID_CASE(ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED):
60320 				VM_TRACE(ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED)
60321 				ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60322 				HYBRID_BREAK();
60323 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED):
60324 				VM_TRACE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED)
60325 				ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60326 				HYBRID_BREAK();
60327 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED):
60328 				VM_TRACE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED)
60329 				ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60330 				HYBRID_BREAK();
60331 			HYBRID_CASE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED):
60332 				VM_TRACE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED)
60333 				ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60334 				HYBRID_BREAK();
60335 			HYBRID_CASE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED):
60336 				VM_TRACE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED)
60337 				ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60338 				HYBRID_BREAK();
60339 			HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED):
60340 				VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED)
60341 				ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60342 				HYBRID_BREAK();
60343 			HYBRID_CASE(ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED):
60344 				VM_TRACE(ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED)
60345 				ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60346 				HYBRID_BREAK();
60347 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV):
60348 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV)
60349 				ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60350 				HYBRID_BREAK();
60351 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV):
60352 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV)
60353 				ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60354 				HYBRID_BREAK();
60355 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV):
60356 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV)
60357 				ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60358 				HYBRID_BREAK();
60359 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV):
60360 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV)
60361 				ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60362 				HYBRID_BREAK();
60363 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV):
60364 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV)
60365 				ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60366 				HYBRID_BREAK();
60367 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV):
60368 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV)
60369 				ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60370 				HYBRID_BREAK();
60371 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV):
60372 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV)
60373 				ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60374 				HYBRID_BREAK();
60375 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV):
60376 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV)
60377 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60378 				HYBRID_BREAK();
60379 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV):
60380 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV)
60381 				ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60382 				HYBRID_BREAK();
60383 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST):
60384 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST)
60385 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60386 				HYBRID_BREAK();
60387 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP):
60388 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP)
60389 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60390 				HYBRID_BREAK();
60391 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR):
60392 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR)
60393 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60394 				HYBRID_BREAK();
60395 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV):
60396 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV)
60397 				ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60398 				HYBRID_BREAK();
60399 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR):
60400 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR)
60401 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60402 				HYBRID_BREAK();
60403 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV):
60404 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV)
60405 				ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60406 				HYBRID_BREAK();
60407 			HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CV):
60408 				VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CV)
60409 				ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60410 				HYBRID_BREAK();
60411 			HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV):
60412 				VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV)
60413 				ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60414 				HYBRID_BREAK();
60415 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV):
60416 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV)
60417 				ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60418 				HYBRID_BREAK();
60419 			HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV):
60420 				VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV)
60421 				ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60422 				HYBRID_BREAK();
60423 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV):
60424 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_UNUSED_CV)
60425 				ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60426 				HYBRID_BREAK();
60427 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV):
60428 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV)
60429 				ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60430 				HYBRID_BREAK();
60431 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV):
60432 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV)
60433 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60434 				HYBRID_BREAK();
60435 			HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CV):
60436 				VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CV)
60437 				ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60438 				HYBRID_BREAK();
60439 			HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CV):
60440 				VM_TRACE(ZEND_BOOL_NOT_SPEC_CV)
60441 				ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60442 				HYBRID_BREAK();
60443 			HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED):
60444 				VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED)
60445 				ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60446 				HYBRID_BREAK();
60447 			HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED):
60448 				VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED)
60449 				ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60450 				HYBRID_BREAK();
60451 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED):
60452 				VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED)
60453 				ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60454 				HYBRID_BREAK();
60455 			HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED):
60456 				VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED)
60457 				ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60458 				HYBRID_BREAK();
60459 			HYBRID_CASE(ZEND_POST_INC_SPEC_CV):
60460 				VM_TRACE(ZEND_POST_INC_SPEC_CV)
60461 				ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60462 				HYBRID_BREAK();
60463 			HYBRID_CASE(ZEND_POST_DEC_SPEC_CV):
60464 				VM_TRACE(ZEND_POST_DEC_SPEC_CV)
60465 				ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60466 				HYBRID_BREAK();
60467 			HYBRID_CASE(ZEND_ECHO_SPEC_CV):
60468 				VM_TRACE(ZEND_ECHO_SPEC_CV)
60469 				ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60470 				HYBRID_BREAK();
60471 			HYBRID_CASE(ZEND_JMPZ_SPEC_CV):
60472 				VM_TRACE(ZEND_JMPZ_SPEC_CV)
60473 				ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60474 				HYBRID_BREAK();
60475 			HYBRID_CASE(ZEND_JMPNZ_SPEC_CV):
60476 				VM_TRACE(ZEND_JMPNZ_SPEC_CV)
60477 				ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60478 				HYBRID_BREAK();
60479 			HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CV):
60480 				VM_TRACE(ZEND_JMPZ_EX_SPEC_CV)
60481 				ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60482 				HYBRID_BREAK();
60483 			HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CV):
60484 				VM_TRACE(ZEND_JMPNZ_EX_SPEC_CV)
60485 				ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60486 				HYBRID_BREAK();
60487 			HYBRID_CASE(ZEND_RETURN_SPEC_CV):
60488 				VM_TRACE(ZEND_RETURN_SPEC_CV)
60489 {
60490 	USE_OPLINE
60491 	zval *retval_ptr;
60492 	zval *return_value;
60493 
60494 	retval_ptr = EX_VAR(opline->op1.var);
60495 	return_value = EX(return_value);
60496 
60497 	if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
60498 		SAVE_OPLINE();
60499 		retval_ptr = ZVAL_UNDEFINED_OP1();
60500 		if (return_value) {
60501 			ZVAL_NULL(return_value);
60502 		}
60503 	} else if (!return_value) {
60504 		if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
60505 			if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
60506 				SAVE_OPLINE();
60507 				rc_dtor_func(Z_COUNTED_P(retval_ptr));
60508 			}
60509 		}
60510 	} else {
60511 		if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
60512 			ZVAL_COPY_VALUE(return_value, retval_ptr);
60513 			if (IS_CV == IS_CONST) {
60514 				if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
60515 					Z_ADDREF_P(return_value);
60516 				}
60517 			}
60518 		} else if (IS_CV == IS_CV) {
60519 			do {
60520 				if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
60521 					if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
60522 						if (EXPECTED(!(EX_CALL_INFO() & (ZEND_CALL_CODE|ZEND_CALL_OBSERVED)))) {
60523 							zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
60524 							ZVAL_COPY_VALUE(return_value, retval_ptr);
60525 							if (GC_MAY_LEAK(ref)) {
60526 								SAVE_OPLINE();
60527 								gc_possible_root(ref);
60528 							}
60529 							ZVAL_NULL(retval_ptr);
60530 							break;
60531 						} else {
60532 							Z_ADDREF_P(retval_ptr);
60533 						}
60534 					} else {
60535 						retval_ptr = Z_REFVAL_P(retval_ptr);
60536 						if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
60537 							Z_ADDREF_P(retval_ptr);
60538 						}
60539 					}
60540 				}
60541 				ZVAL_COPY_VALUE(return_value, retval_ptr);
60542 			} while (0);
60543 		} else /* if (IS_CV == IS_VAR) */ {
60544 			if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
60545 				zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
60546 
60547 				retval_ptr = Z_REFVAL_P(retval_ptr);
60548 				ZVAL_COPY_VALUE(return_value, retval_ptr);
60549 				if (UNEXPECTED(GC_DELREF(ref) == 0)) {
60550 					efree_size(ref, sizeof(zend_reference));
60551 				} else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
60552 					Z_ADDREF_P(retval_ptr);
60553 				}
60554 			} else {
60555 				ZVAL_COPY_VALUE(return_value, retval_ptr);
60556 			}
60557 		}
60558 	}
60559 
60560 
60561 
60562 	goto zend_leave_helper_SPEC_LABEL;
60563 }
60564 
60565 			HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CV):
60566 				VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CV)
60567 				ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60568 				HYBRID_BREAK();
60569 			HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV):
60570 				VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CV)
60571 				ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60572 				HYBRID_BREAK();
60573 			HYBRID_CASE(ZEND_THROW_SPEC_CV):
60574 				VM_TRACE(ZEND_THROW_SPEC_CV)
60575 				ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60576 				HYBRID_BREAK();
60577 			HYBRID_CASE(ZEND_SEND_USER_SPEC_CV):
60578 				VM_TRACE(ZEND_SEND_USER_SPEC_CV)
60579 				ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60580 				HYBRID_BREAK();
60581 			HYBRID_CASE(ZEND_BOOL_SPEC_CV):
60582 				VM_TRACE(ZEND_BOOL_SPEC_CV)
60583 				ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60584 				HYBRID_BREAK();
60585 			HYBRID_CASE(ZEND_CLONE_SPEC_CV):
60586 				VM_TRACE(ZEND_CLONE_SPEC_CV)
60587 				ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60588 				HYBRID_BREAK();
60589 			HYBRID_CASE(ZEND_CAST_SPEC_CV):
60590 				VM_TRACE(ZEND_CAST_SPEC_CV)
60591 				ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60592 				HYBRID_BREAK();
60593 			HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CV):
60594 				VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CV)
60595 				ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60596 				HYBRID_BREAK();
60597 			HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CV):
60598 				VM_TRACE(ZEND_FE_RESET_R_SPEC_CV)
60599 				ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60600 				HYBRID_BREAK();
60601 			HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CV):
60602 				VM_TRACE(ZEND_FE_RESET_RW_SPEC_CV)
60603 				ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60604 				HYBRID_BREAK();
60605 			HYBRID_CASE(ZEND_JMP_SET_SPEC_CV):
60606 				VM_TRACE(ZEND_JMP_SET_SPEC_CV)
60607 				ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60608 				HYBRID_BREAK();
60609 			HYBRID_CASE(ZEND_COALESCE_SPEC_CV):
60610 				VM_TRACE(ZEND_COALESCE_SPEC_CV)
60611 				ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60612 				HYBRID_BREAK();
60613 			HYBRID_CASE(ZEND_JMP_NULL_SPEC_CV):
60614 				VM_TRACE(ZEND_JMP_NULL_SPEC_CV)
60615 				ZEND_JMP_NULL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60616 				HYBRID_BREAK();
60617 			HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CV):
60618 				VM_TRACE(ZEND_QM_ASSIGN_SPEC_CV)
60619 				ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60620 				HYBRID_BREAK();
60621 			HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CV):
60622 				VM_TRACE(ZEND_YIELD_FROM_SPEC_CV)
60623 				ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60624 				HYBRID_BREAK();
60625 			HYBRID_CASE(ZEND_STRLEN_SPEC_CV):
60626 				VM_TRACE(ZEND_STRLEN_SPEC_CV)
60627 				ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60628 				HYBRID_BREAK();
60629 			HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CV):
60630 				VM_TRACE(ZEND_TYPE_CHECK_SPEC_CV)
60631 				ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60632 				HYBRID_BREAK();
60633 			HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_CV):
60634 				VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_CV)
60635 				ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60636 				HYBRID_BREAK();
60637 			HYBRID_CASE(ZEND_BIND_STATIC_SPEC_CV):
60638 				VM_TRACE(ZEND_BIND_STATIC_SPEC_CV)
60639 				ZEND_BIND_STATIC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60640 				HYBRID_BREAK();
60641 			HYBRID_CASE(ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV):
60642 				VM_TRACE(ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV)
60643 				ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60644 				HYBRID_BREAK();
60645 			HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
60646 				VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
60647 				ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60648 				HYBRID_BREAK();
60649 			HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
60650 				VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
60651 				ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60652 				HYBRID_BREAK();
60653 			HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED):
60654 				VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED)
60655 				ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60656 				HYBRID_BREAK();
60657 			HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED):
60658 				VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED)
60659 				ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60660 				HYBRID_BREAK();
60661 			HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED):
60662 				VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED)
60663 				ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60664 				HYBRID_BREAK();
60665 			HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED):
60666 				VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED)
60667 				ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60668 				HYBRID_BREAK();
60669 			HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED):
60670 				VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED)
60671 				ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60672 				HYBRID_BREAK();
60673 			HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED):
60674 				VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED)
60675 				ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60676 				HYBRID_BREAK();
60677 			HYBRID_CASE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV):
60678 				VM_TRACE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV)
60679 				ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60680 				HYBRID_BREAK();
60681 			HYBRID_CASE(ZEND_POST_INC_LONG_SPEC_CV):
60682 				VM_TRACE(ZEND_POST_INC_LONG_SPEC_CV)
60683 				ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60684 				HYBRID_BREAK();
60685 			HYBRID_CASE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV):
60686 				VM_TRACE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV)
60687 				ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60688 				HYBRID_BREAK();
60689 			HYBRID_CASE(ZEND_POST_DEC_LONG_SPEC_CV):
60690 				VM_TRACE(ZEND_POST_DEC_LONG_SPEC_CV)
60691 				ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60692 				HYBRID_BREAK();
60693 			HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_CV):
60694 				VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_CV)
60695 				ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60696 				HYBRID_BREAK();
60697 			HYBRID_CASE(ZEND_DIV_SPEC_CV_CONST):
60698 				VM_TRACE(ZEND_DIV_SPEC_CV_CONST)
60699 				ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60700 				HYBRID_BREAK();
60701 			HYBRID_CASE(ZEND_POW_SPEC_CV_CONST):
60702 				VM_TRACE(ZEND_POW_SPEC_CV_CONST)
60703 				ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60704 				HYBRID_BREAK();
60705 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CONST):
60706 				VM_TRACE(ZEND_CONCAT_SPEC_CV_CONST)
60707 				ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60708 				HYBRID_BREAK();
60709 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CONST):
60710 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CONST)
60711 				ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60712 				HYBRID_BREAK();
60713 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST):
60714 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST)
60715 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60716 				HYBRID_BREAK();
60717 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST):
60718 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST)
60719 				ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60720 				HYBRID_BREAK();
60721 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ):
60722 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ)
60723 				ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60724 				HYBRID_BREAK();
60725 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ):
60726 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ)
60727 				ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60728 				HYBRID_BREAK();
60729 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST):
60730 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST)
60731 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60732 				HYBRID_BREAK();
60733 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ):
60734 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ)
60735 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60736 				HYBRID_BREAK();
60737 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ):
60738 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ)
60739 				ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60740 				HYBRID_BREAK();
60741 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CONST):
60742 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CONST)
60743 				ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60744 				HYBRID_BREAK();
60745 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CONST):
60746 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CONST)
60747 				ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60748 				HYBRID_BREAK();
60749 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST):
60750 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST)
60751 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60752 				HYBRID_BREAK();
60753 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST):
60754 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST)
60755 				ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60756 				HYBRID_BREAK();
60757 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CONST):
60758 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CONST)
60759 				ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60760 				HYBRID_BREAK();
60761 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST):
60762 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST)
60763 				ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60764 				HYBRID_BREAK();
60765 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CONST):
60766 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CONST)
60767 				ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60768 				HYBRID_BREAK();
60769 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CONST):
60770 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CONST)
60771 				ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60772 				HYBRID_BREAK();
60773 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CONST):
60774 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CONST)
60775 				ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60776 				HYBRID_BREAK();
60777 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST):
60778 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST)
60779 				ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60780 				HYBRID_BREAK();
60781 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST):
60782 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST)
60783 				ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60784 				HYBRID_BREAK();
60785 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST):
60786 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST)
60787 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60788 				HYBRID_BREAK();
60789 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST):
60790 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST)
60791 				ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60792 				HYBRID_BREAK();
60793 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST):
60794 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST)
60795 				ZEND_FETCH_OBJ_R_SPEC_CV_CONST_INLINE_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60796 				HYBRID_BREAK();
60797 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST):
60798 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST)
60799 				ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60800 				HYBRID_BREAK();
60801 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST):
60802 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST)
60803 				ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60804 				HYBRID_BREAK();
60805 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST):
60806 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST)
60807 				ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60808 				HYBRID_BREAK();
60809 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST):
60810 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST)
60811 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60812 				HYBRID_BREAK();
60813 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST):
60814 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST)
60815 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60816 				HYBRID_BREAK();
60817 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST):
60818 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST)
60819 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60820 				HYBRID_BREAK();
60821 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP):
60822 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP)
60823 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60824 				HYBRID_BREAK();
60825 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR):
60826 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR)
60827 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60828 				HYBRID_BREAK();
60829 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV):
60830 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV)
60831 				ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60832 				HYBRID_BREAK();
60833 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST):
60834 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST)
60835 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60836 				HYBRID_BREAK();
60837 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP):
60838 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP)
60839 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60840 				HYBRID_BREAK();
60841 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR):
60842 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR)
60843 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60844 				HYBRID_BREAK();
60845 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV):
60846 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV)
60847 				ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60848 				HYBRID_BREAK();
60849 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED):
60850 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED)
60851 				ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60852 				HYBRID_BREAK();
60853 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED):
60854 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED)
60855 				ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60856 				HYBRID_BREAK();
60857 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR):
60858 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR)
60859 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60860 				HYBRID_BREAK();
60861 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV):
60862 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV)
60863 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60864 				HYBRID_BREAK();
60865 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CONST):
60866 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CONST)
60867 				ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60868 				HYBRID_BREAK();
60869 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST):
60870 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST)
60871 				ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60872 				HYBRID_BREAK();
60873 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV_CONST):
60874 				VM_TRACE(ZEND_SEND_VAR_SPEC_CV_CONST)
60875 				ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60876 				HYBRID_BREAK();
60877 			HYBRID_CASE(ZEND_SEND_REF_SPEC_CV_CONST):
60878 				VM_TRACE(ZEND_SEND_REF_SPEC_CV_CONST)
60879 				ZEND_SEND_REF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60880 				HYBRID_BREAK();
60881 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_CONST):
60882 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_CONST)
60883 				ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60884 				HYBRID_BREAK();
60885 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST):
60886 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST)
60887 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60888 				HYBRID_BREAK();
60889 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CONST):
60890 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CONST)
60891 				ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60892 				HYBRID_BREAK();
60893 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CONST):
60894 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CONST)
60895 				ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60896 				HYBRID_BREAK();
60897 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CONST):
60898 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CONST)
60899 				ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60900 				HYBRID_BREAK();
60901 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST):
60902 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST)
60903 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60904 				HYBRID_BREAK();
60905 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST):
60906 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST)
60907 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60908 				HYBRID_BREAK();
60909 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST):
60910 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST)
60911 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60912 				HYBRID_BREAK();
60913 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_CONST):
60914 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_CONST)
60915 				ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60916 				HYBRID_BREAK();
60917 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_CONST):
60918 				VM_TRACE(ZEND_YIELD_SPEC_CV_CONST)
60919 				ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60920 				HYBRID_BREAK();
60921 			HYBRID_CASE(ZEND_BIND_GLOBAL_SPEC_CV_CONST):
60922 				VM_TRACE(ZEND_BIND_GLOBAL_SPEC_CV_CONST)
60923 				ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60924 				HYBRID_BREAK();
60925 			HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CV_CONST):
60926 				VM_TRACE(ZEND_IN_ARRAY_SPEC_CV_CONST)
60927 				ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60928 				HYBRID_BREAK();
60929 			HYBRID_CASE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST):
60930 				VM_TRACE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST)
60931 				ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60932 				HYBRID_BREAK();
60933 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST):
60934 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST)
60935 				ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60936 				HYBRID_BREAK();
60937 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST):
60938 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST)
60939 				ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60940 				HYBRID_BREAK();
60941 			HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV):
60942 				VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV)
60943 				ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60944 				HYBRID_BREAK();
60945 			HYBRID_CASE(ZEND_DIV_SPEC_CV_TMPVAR):
60946 				VM_TRACE(ZEND_DIV_SPEC_CV_TMPVAR)
60947 				ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60948 				HYBRID_BREAK();
60949 			HYBRID_CASE(ZEND_POW_SPEC_CV_TMPVAR):
60950 				VM_TRACE(ZEND_POW_SPEC_CV_TMPVAR)
60951 				ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60952 				HYBRID_BREAK();
60953 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_TMPVAR):
60954 				VM_TRACE(ZEND_CONCAT_SPEC_CV_TMPVAR)
60955 				ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60956 				HYBRID_BREAK();
60957 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR):
60958 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR)
60959 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60960 				HYBRID_BREAK();
60961 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ):
60962 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ)
60963 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60964 				HYBRID_BREAK();
60965 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
60966 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
60967 				ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60968 				HYBRID_BREAK();
60969 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR):
60970 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR)
60971 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60972 				HYBRID_BREAK();
60973 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ):
60974 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ)
60975 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60976 				HYBRID_BREAK();
60977 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ):
60978 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ)
60979 				ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60980 				HYBRID_BREAK();
60981 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_TMPVAR):
60982 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_TMPVAR)
60983 				ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60984 				HYBRID_BREAK();
60985 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR):
60986 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR)
60987 				ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60988 				HYBRID_BREAK();
60989 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR):
60990 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR)
60991 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60992 				HYBRID_BREAK();
60993 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR):
60994 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR)
60995 				ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
60996 				HYBRID_BREAK();
60997 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR):
60998 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_TMPVAR)
60999 				ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61000 				HYBRID_BREAK();
61001 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR):
61002 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR)
61003 				ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61004 				HYBRID_BREAK();
61005 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR):
61006 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR)
61007 				ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61008 				HYBRID_BREAK();
61009 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR):
61010 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR)
61011 				ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61012 				HYBRID_BREAK();
61013 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR):
61014 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR)
61015 				ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61016 				HYBRID_BREAK();
61017 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR):
61018 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR)
61019 				ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61020 				HYBRID_BREAK();
61021 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR):
61022 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR)
61023 				ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61024 				HYBRID_BREAK();
61025 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR):
61026 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR)
61027 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61028 				HYBRID_BREAK();
61029 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR):
61030 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR)
61031 				ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61032 				HYBRID_BREAK();
61033 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR):
61034 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR)
61035 				ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61036 				HYBRID_BREAK();
61037 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR):
61038 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR)
61039 				ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61040 				HYBRID_BREAK();
61041 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR):
61042 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR)
61043 				ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61044 				HYBRID_BREAK();
61045 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR):
61046 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR)
61047 				ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61048 				HYBRID_BREAK();
61049 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR):
61050 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR)
61051 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61052 				HYBRID_BREAK();
61053 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR):
61054 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR)
61055 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61056 				HYBRID_BREAK();
61057 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST):
61058 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST)
61059 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61060 				HYBRID_BREAK();
61061 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP):
61062 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP)
61063 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61064 				HYBRID_BREAK();
61065 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR):
61066 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR)
61067 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61068 				HYBRID_BREAK();
61069 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV):
61070 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV)
61071 				ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61072 				HYBRID_BREAK();
61073 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST):
61074 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST)
61075 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61076 				HYBRID_BREAK();
61077 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP):
61078 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP)
61079 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61080 				HYBRID_BREAK();
61081 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR):
61082 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR)
61083 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61084 				HYBRID_BREAK();
61085 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV):
61086 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV)
61087 				ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61088 				HYBRID_BREAK();
61089 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR):
61090 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR)
61091 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61092 				HYBRID_BREAK();
61093 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV):
61094 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV)
61095 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61096 				HYBRID_BREAK();
61097 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR):
61098 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR)
61099 				ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61100 				HYBRID_BREAK();
61101 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR):
61102 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR)
61103 				ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61104 				HYBRID_BREAK();
61105 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR):
61106 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR)
61107 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61108 				HYBRID_BREAK();
61109 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR):
61110 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR)
61111 				ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61112 				HYBRID_BREAK();
61113 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR):
61114 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR)
61115 				ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61116 				HYBRID_BREAK();
61117 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR):
61118 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR)
61119 				ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61120 				HYBRID_BREAK();
61121 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR):
61122 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR)
61123 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61124 				HYBRID_BREAK();
61125 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR):
61126 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR)
61127 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61128 				HYBRID_BREAK();
61129 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR):
61130 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR)
61131 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61132 				HYBRID_BREAK();
61133 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_TMPVAR):
61134 				VM_TRACE(ZEND_YIELD_SPEC_CV_TMPVAR)
61135 				ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61136 				HYBRID_BREAK();
61137 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_TMP):
61138 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_TMP)
61139 				ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61140 				HYBRID_BREAK();
61141 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP):
61142 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP)
61143 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61144 				HYBRID_BREAK();
61145 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED):
61146 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED)
61147 				ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61148 				HYBRID_BREAK();
61149 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED):
61150 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED)
61151 				ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61152 				HYBRID_BREAK();
61153 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_VAR):
61154 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_VAR)
61155 				ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61156 				HYBRID_BREAK();
61157 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR):
61158 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR)
61159 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61160 				HYBRID_BREAK();
61161 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED):
61162 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED)
61163 				ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61164 				HYBRID_BREAK();
61165 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED):
61166 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED)
61167 				ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61168 				HYBRID_BREAK();
61169 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_VAR):
61170 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_VAR)
61171 				ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61172 				HYBRID_BREAK();
61173 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_VAR):
61174 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_VAR)
61175 				ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61176 				HYBRID_BREAK();
61177 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED):
61178 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED)
61179 				ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61180 				HYBRID_BREAK();
61181 			HYBRID_CASE(ZEND_FETCH_R_SPEC_CV_UNUSED):
61182 				VM_TRACE(ZEND_FETCH_R_SPEC_CV_UNUSED)
61183 				ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61184 				HYBRID_BREAK();
61185 			HYBRID_CASE(ZEND_FETCH_W_SPEC_CV_UNUSED):
61186 				VM_TRACE(ZEND_FETCH_W_SPEC_CV_UNUSED)
61187 				ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61188 				HYBRID_BREAK();
61189 			HYBRID_CASE(ZEND_FETCH_RW_SPEC_CV_UNUSED):
61190 				VM_TRACE(ZEND_FETCH_RW_SPEC_CV_UNUSED)
61191 				ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61192 				HYBRID_BREAK();
61193 			HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED):
61194 				VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED)
61195 				ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61196 				HYBRID_BREAK();
61197 			HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED):
61198 				VM_TRACE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED)
61199 				ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61200 				HYBRID_BREAK();
61201 			HYBRID_CASE(ZEND_FETCH_IS_SPEC_CV_UNUSED):
61202 				VM_TRACE(ZEND_FETCH_IS_SPEC_CV_UNUSED)
61203 				ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61204 				HYBRID_BREAK();
61205 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED):
61206 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED)
61207 				ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61208 				HYBRID_BREAK();
61209 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED):
61210 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED)
61211 				ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61212 				HYBRID_BREAK();
61213 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED):
61214 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED)
61215 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61216 				HYBRID_BREAK();
61217 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST):
61218 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST)
61219 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61220 				HYBRID_BREAK();
61221 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP):
61222 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP)
61223 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61224 				HYBRID_BREAK();
61225 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR):
61226 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR)
61227 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61228 				HYBRID_BREAK();
61229 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV):
61230 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV)
61231 				ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61232 				HYBRID_BREAK();
61233 			HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED):
61234 				VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED)
61235 				ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61236 				HYBRID_BREAK();
61237 			HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV_UNUSED):
61238 				VM_TRACE(ZEND_SEND_VAR_SPEC_CV_UNUSED)
61239 				ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61240 				HYBRID_BREAK();
61241 			HYBRID_CASE(ZEND_SEND_REF_SPEC_CV_UNUSED):
61242 				VM_TRACE(ZEND_SEND_REF_SPEC_CV_UNUSED)
61243 				ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61244 				HYBRID_BREAK();
61245 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED):
61246 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED)
61247 				ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61248 				HYBRID_BREAK();
61249 			HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK):
61250 				VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK)
61251 				ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61252 				HYBRID_BREAK();
61253 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED):
61254 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED)
61255 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61256 				HYBRID_BREAK();
61257 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED):
61258 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED)
61259 				ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61260 				HYBRID_BREAK();
61261 			HYBRID_CASE(ZEND_UNSET_CV_SPEC_CV_UNUSED):
61262 				VM_TRACE(ZEND_UNSET_CV_SPEC_CV_UNUSED)
61263 				ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61264 				HYBRID_BREAK();
61265 			HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CV_UNUSED):
61266 				VM_TRACE(ZEND_UNSET_VAR_SPEC_CV_UNUSED)
61267 				ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61268 				HYBRID_BREAK();
61269 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET):
61270 				VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET)
61271 				ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61272 				HYBRID_BREAK();
61273 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY):
61274 				VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY)
61275 				ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61276 				HYBRID_BREAK();
61277 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED):
61278 				VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED)
61279 				ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61280 				HYBRID_BREAK();
61281 			HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_UNUSED):
61282 				VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_UNUSED)
61283 				ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61284 				HYBRID_BREAK();
61285 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_UNUSED):
61286 				VM_TRACE(ZEND_YIELD_SPEC_CV_UNUSED)
61287 				ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61288 				HYBRID_BREAK();
61289 			HYBRID_CASE(ZEND_CHECK_VAR_SPEC_CV_UNUSED):
61290 				VM_TRACE(ZEND_CHECK_VAR_SPEC_CV_UNUSED)
61291 				ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61292 				HYBRID_BREAK();
61293 			HYBRID_CASE(ZEND_MAKE_REF_SPEC_CV_UNUSED):
61294 				VM_TRACE(ZEND_MAKE_REF_SPEC_CV_UNUSED)
61295 				ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61296 				HYBRID_BREAK();
61297 			HYBRID_CASE(ZEND_COUNT_SPEC_CV_UNUSED):
61298 				VM_TRACE(ZEND_COUNT_SPEC_CV_UNUSED)
61299 				ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61300 				HYBRID_BREAK();
61301 			HYBRID_CASE(ZEND_COUNT_ARRAY_SPEC_CV_UNUSED):
61302 				VM_TRACE(ZEND_COUNT_ARRAY_SPEC_CV_UNUSED)
61303 				ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61304 				HYBRID_BREAK();
61305 			HYBRID_CASE(ZEND_GET_CLASS_SPEC_CV_UNUSED):
61306 				VM_TRACE(ZEND_GET_CLASS_SPEC_CV_UNUSED)
61307 				ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61308 				HYBRID_BREAK();
61309 			HYBRID_CASE(ZEND_GET_TYPE_SPEC_CV_UNUSED):
61310 				VM_TRACE(ZEND_GET_TYPE_SPEC_CV_UNUSED)
61311 				ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61312 				HYBRID_BREAK();
61313 			HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED):
61314 				VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED)
61315 				ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61316 				HYBRID_BREAK();
61317 			HYBRID_CASE(ZEND_DIV_SPEC_CV_CV):
61318 				VM_TRACE(ZEND_DIV_SPEC_CV_CV)
61319 				ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61320 				HYBRID_BREAK();
61321 			HYBRID_CASE(ZEND_POW_SPEC_CV_CV):
61322 				VM_TRACE(ZEND_POW_SPEC_CV_CV)
61323 				ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61324 				HYBRID_BREAK();
61325 			HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CV):
61326 				VM_TRACE(ZEND_CONCAT_SPEC_CV_CV)
61327 				ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61328 				HYBRID_BREAK();
61329 			HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CV):
61330 				VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CV)
61331 				ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61332 				HYBRID_BREAK();
61333 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV):
61334 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV)
61335 				ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61336 				HYBRID_BREAK();
61337 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV):
61338 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV)
61339 				ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61340 				HYBRID_BREAK();
61341 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ):
61342 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ)
61343 				ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61344 				HYBRID_BREAK();
61345 			HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ):
61346 				VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ)
61347 				ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61348 				HYBRID_BREAK();
61349 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV):
61350 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV)
61351 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61352 				HYBRID_BREAK();
61353 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ):
61354 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ)
61355 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61356 				HYBRID_BREAK();
61357 			HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ):
61358 				VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ)
61359 				ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61360 				HYBRID_BREAK();
61361 			HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CV):
61362 				VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CV)
61363 				ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61364 				HYBRID_BREAK();
61365 			HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CV):
61366 				VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CV)
61367 				ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61368 				HYBRID_BREAK();
61369 			HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV):
61370 				VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV)
61371 				ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61372 				HYBRID_BREAK();
61373 			HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV):
61374 				VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_CV_CV)
61375 				ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61376 				HYBRID_BREAK();
61377 			HYBRID_CASE(ZEND_ASSIGN_OP_SPEC_CV_CV):
61378 				VM_TRACE(ZEND_ASSIGN_OP_SPEC_CV_CV)
61379 				ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61380 				HYBRID_BREAK();
61381 			HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CV):
61382 				VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CV)
61383 				ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61384 				HYBRID_BREAK();
61385 			HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CV):
61386 				VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CV)
61387 				ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61388 				HYBRID_BREAK();
61389 			HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CV):
61390 				VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CV)
61391 				ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61392 				HYBRID_BREAK();
61393 			HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CV):
61394 				VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CV)
61395 				ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61396 				HYBRID_BREAK();
61397 			HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CV):
61398 				VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CV)
61399 				ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61400 				HYBRID_BREAK();
61401 			HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CV):
61402 				VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CV)
61403 				ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61404 				HYBRID_BREAK();
61405 			HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV):
61406 				VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV)
61407 				ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61408 				HYBRID_BREAK();
61409 			HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV):
61410 				VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV)
61411 				ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61412 				HYBRID_BREAK();
61413 			HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CV):
61414 				VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CV)
61415 				ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61416 				HYBRID_BREAK();
61417 			HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CV):
61418 				VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CV)
61419 				ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61420 				HYBRID_BREAK();
61421 			HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV):
61422 				VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV)
61423 				ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61424 				HYBRID_BREAK();
61425 			HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV):
61426 				VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV)
61427 				ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61428 				HYBRID_BREAK();
61429 			HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV):
61430 				VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV)
61431 				ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61432 				HYBRID_BREAK();
61433 			HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV):
61434 				VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV)
61435 				ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61436 				HYBRID_BREAK();
61437 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST):
61438 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST)
61439 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61440 				HYBRID_BREAK();
61441 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP):
61442 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP)
61443 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61444 				HYBRID_BREAK();
61445 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR):
61446 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR)
61447 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61448 				HYBRID_BREAK();
61449 			HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV):
61450 				VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV)
61451 				ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61452 				HYBRID_BREAK();
61453 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST):
61454 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST)
61455 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61456 				HYBRID_BREAK();
61457 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP):
61458 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP)
61459 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61460 				HYBRID_BREAK();
61461 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR):
61462 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR)
61463 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61464 				HYBRID_BREAK();
61465 			HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV):
61466 				VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV)
61467 				ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61468 				HYBRID_BREAK();
61469 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED):
61470 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED)
61471 				ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61472 				HYBRID_BREAK();
61473 			HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED):
61474 				VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED)
61475 				ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61476 				HYBRID_BREAK();
61477 			HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_CV):
61478 				VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_CV)
61479 				ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61480 				HYBRID_BREAK();
61481 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR):
61482 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR)
61483 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61484 				HYBRID_BREAK();
61485 			HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV):
61486 				VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV)
61487 				ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61488 				HYBRID_BREAK();
61489 			HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CV):
61490 				VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CV)
61491 				ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61492 				HYBRID_BREAK();
61493 			HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV):
61494 				VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV)
61495 				ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61496 				HYBRID_BREAK();
61497 			HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV):
61498 				VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV)
61499 				ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61500 				HYBRID_BREAK();
61501 			HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CV):
61502 				VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CV)
61503 				ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61504 				HYBRID_BREAK();
61505 			HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CV):
61506 				VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CV)
61507 				ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61508 				HYBRID_BREAK();
61509 			HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CV):
61510 				VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CV)
61511 				ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61512 				HYBRID_BREAK();
61513 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV):
61514 				VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV)
61515 				ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61516 				HYBRID_BREAK();
61517 			HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV):
61518 				VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV)
61519 				ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61520 				HYBRID_BREAK();
61521 			HYBRID_CASE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV):
61522 				VM_TRACE(ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV)
61523 				ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61524 				HYBRID_BREAK();
61525 			HYBRID_CASE(ZEND_YIELD_SPEC_CV_CV):
61526 				VM_TRACE(ZEND_YIELD_SPEC_CV_CV)
61527 				ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61528 				HYBRID_BREAK();
61529 			HYBRID_CASE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV):
61530 				VM_TRACE(ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV)
61531 				ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61532 				HYBRID_BREAK();
61533 			HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV):
61534 				VM_TRACE(ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV)
61535 				ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61536 				HYBRID_BREAK();
61537 			HYBRID_CASE(HYBRID_HALT):
61538 #ifdef ZEND_VM_FP_GLOBAL_REG
61539 				execute_data = vm_stack_data.orig_execute_data;
61540 #endif
61541 #ifdef ZEND_VM_IP_GLOBAL_REG
61542 				opline = vm_stack_data.orig_opline;
61543 #endif
61544 				return;
61545 			HYBRID_DEFAULT:
61546 				VM_TRACE(ZEND_NULL)
61547 				ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
61548 				HYBRID_BREAK(); /* Never reached */
61549 #else
61550 #ifdef ZEND_VM_FP_GLOBAL_REG
61551 			execute_data = vm_stack_data.orig_execute_data;
61552 # ifdef ZEND_VM_IP_GLOBAL_REG
61553 			opline = vm_stack_data.orig_opline;
61554 # endif
61555 			return;
61556 #else
61557 			if (EXPECTED(ret > 0)) {
61558 				execute_data = EG(current_execute_data);
61559 				ZEND_VM_LOOP_INTERRUPT_CHECK();
61560 			} else {
61561 # ifdef ZEND_VM_IP_GLOBAL_REG
61562 				opline = vm_stack_data.orig_opline;
61563 # endif
61564 				return;
61565 			}
61566 #endif
61567 #endif
61568 		}
61569 
61570 	}
61571 	zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen");
61572 }
61573 #if (ZEND_VM_KIND != ZEND_VM_KIND_CALL) && (ZEND_GCC_VERSION >= 4000) && !defined(__clang__)
61574 # pragma GCC pop_options
61575 #endif
61576 
61577 ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
61578 {
61579 	zend_execute_data *execute_data;
61580 	void *object_or_called_scope;
61581 	uint32_t call_info;
61582 
61583 	if (EG(exception) != NULL) {
61584 		return;
61585 	}
61586 
61587 	object_or_called_scope = zend_get_this_object(EG(current_execute_data));
61588 	if (EXPECTED(!object_or_called_scope)) {
61589 		object_or_called_scope = zend_get_called_scope(EG(current_execute_data));
61590 		call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE;
61591 	} else {
61592 		call_info = ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE | ZEND_CALL_HAS_THIS;
61593 	}
61594 	execute_data = zend_vm_stack_push_call_frame(call_info,
61595 		(zend_function*)op_array, 0, object_or_called_scope);
61596 	if (EG(current_execute_data)) {
61597 		execute_data->symbol_table = zend_rebuild_symbol_table();
61598 	} else {
61599 		execute_data->symbol_table = &EG(symbol_table);
61600 	}
61601 	EX(prev_execute_data) = EG(current_execute_data);
61602 	i_init_code_execute_data(execute_data, op_array, return_value);
61603 	ZEND_OBSERVER_FCALL_BEGIN(execute_data);
61604 	zend_execute_ex(execute_data);
61605 	/* Observer end handlers are called from ZEND_RETURN */
61606 	zend_vm_stack_free_call_frame(execute_data);
61607 }
61608 
61609 
61610 void zend_vm_init(void)
61611 {
61612 	static const void * const labels[] = {
61613 		ZEND_NOP_SPEC_HANDLER,
61614 		ZEND_ADD_SPEC_CONST_CONST_HANDLER,
61615 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
61616 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
61617 		ZEND_NULL_HANDLER,
61618 		ZEND_ADD_SPEC_CONST_TMPVARCV_HANDLER,
61619 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
61620 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61621 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61622 		ZEND_NULL_HANDLER,
61623 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61624 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
61625 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61626 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61627 		ZEND_NULL_HANDLER,
61628 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61629 		ZEND_NULL_HANDLER,
61630 		ZEND_NULL_HANDLER,
61631 		ZEND_NULL_HANDLER,
61632 		ZEND_NULL_HANDLER,
61633 		ZEND_NULL_HANDLER,
61634 		ZEND_ADD_SPEC_TMPVARCV_CONST_HANDLER,
61635 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61636 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61637 		ZEND_NULL_HANDLER,
61638 		ZEND_ADD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61639 		ZEND_SUB_SPEC_CONST_CONST_HANDLER,
61640 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
61641 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
61642 		ZEND_NULL_HANDLER,
61643 		ZEND_SUB_SPEC_CONST_TMPVARCV_HANDLER,
61644 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
61645 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61646 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61647 		ZEND_NULL_HANDLER,
61648 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61649 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
61650 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61651 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61652 		ZEND_NULL_HANDLER,
61653 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61654 		ZEND_NULL_HANDLER,
61655 		ZEND_NULL_HANDLER,
61656 		ZEND_NULL_HANDLER,
61657 		ZEND_NULL_HANDLER,
61658 		ZEND_NULL_HANDLER,
61659 		ZEND_SUB_SPEC_TMPVARCV_CONST_HANDLER,
61660 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61661 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61662 		ZEND_NULL_HANDLER,
61663 		ZEND_SUB_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61664 		ZEND_MUL_SPEC_CONST_CONST_HANDLER,
61665 		ZEND_NULL_HANDLER,
61666 		ZEND_NULL_HANDLER,
61667 		ZEND_NULL_HANDLER,
61668 		ZEND_NULL_HANDLER,
61669 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
61670 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61671 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61672 		ZEND_NULL_HANDLER,
61673 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61674 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
61675 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61676 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61677 		ZEND_NULL_HANDLER,
61678 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61679 		ZEND_NULL_HANDLER,
61680 		ZEND_NULL_HANDLER,
61681 		ZEND_NULL_HANDLER,
61682 		ZEND_NULL_HANDLER,
61683 		ZEND_NULL_HANDLER,
61684 		ZEND_MUL_SPEC_TMPVARCV_CONST_HANDLER,
61685 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61686 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61687 		ZEND_NULL_HANDLER,
61688 		ZEND_MUL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61689 		ZEND_DIV_SPEC_CONST_CONST_HANDLER,
61690 		ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
61691 		ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER,
61692 		ZEND_NULL_HANDLER,
61693 		ZEND_DIV_SPEC_CONST_CV_HANDLER,
61694 		ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
61695 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
61696 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
61697 		ZEND_NULL_HANDLER,
61698 		ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
61699 		ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER,
61700 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
61701 		ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER,
61702 		ZEND_NULL_HANDLER,
61703 		ZEND_DIV_SPEC_TMPVAR_CV_HANDLER,
61704 		ZEND_NULL_HANDLER,
61705 		ZEND_NULL_HANDLER,
61706 		ZEND_NULL_HANDLER,
61707 		ZEND_NULL_HANDLER,
61708 		ZEND_NULL_HANDLER,
61709 		ZEND_DIV_SPEC_CV_CONST_HANDLER,
61710 		ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
61711 		ZEND_DIV_SPEC_CV_TMPVAR_HANDLER,
61712 		ZEND_NULL_HANDLER,
61713 		ZEND_DIV_SPEC_CV_CV_HANDLER,
61714 		ZEND_MOD_SPEC_CONST_CONST_HANDLER,
61715 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
61716 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
61717 		ZEND_NULL_HANDLER,
61718 		ZEND_MOD_SPEC_CONST_TMPVARCV_HANDLER,
61719 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
61720 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61721 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61722 		ZEND_NULL_HANDLER,
61723 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61724 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
61725 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61726 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61727 		ZEND_NULL_HANDLER,
61728 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61729 		ZEND_NULL_HANDLER,
61730 		ZEND_NULL_HANDLER,
61731 		ZEND_NULL_HANDLER,
61732 		ZEND_NULL_HANDLER,
61733 		ZEND_NULL_HANDLER,
61734 		ZEND_MOD_SPEC_TMPVARCV_CONST_HANDLER,
61735 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61736 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61737 		ZEND_NULL_HANDLER,
61738 		ZEND_MOD_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61739 		ZEND_SL_SPEC_CONST_CONST_HANDLER,
61740 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
61741 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
61742 		ZEND_NULL_HANDLER,
61743 		ZEND_SL_SPEC_CONST_TMPVARCV_HANDLER,
61744 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
61745 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61746 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61747 		ZEND_NULL_HANDLER,
61748 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61749 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
61750 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61751 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61752 		ZEND_NULL_HANDLER,
61753 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61754 		ZEND_NULL_HANDLER,
61755 		ZEND_NULL_HANDLER,
61756 		ZEND_NULL_HANDLER,
61757 		ZEND_NULL_HANDLER,
61758 		ZEND_NULL_HANDLER,
61759 		ZEND_SL_SPEC_TMPVARCV_CONST_HANDLER,
61760 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61761 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61762 		ZEND_NULL_HANDLER,
61763 		ZEND_SL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61764 		ZEND_SR_SPEC_CONST_CONST_HANDLER,
61765 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
61766 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
61767 		ZEND_NULL_HANDLER,
61768 		ZEND_SR_SPEC_CONST_TMPVARCV_HANDLER,
61769 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
61770 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61771 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61772 		ZEND_NULL_HANDLER,
61773 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61774 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
61775 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61776 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61777 		ZEND_NULL_HANDLER,
61778 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61779 		ZEND_NULL_HANDLER,
61780 		ZEND_NULL_HANDLER,
61781 		ZEND_NULL_HANDLER,
61782 		ZEND_NULL_HANDLER,
61783 		ZEND_NULL_HANDLER,
61784 		ZEND_SR_SPEC_TMPVARCV_CONST_HANDLER,
61785 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61786 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61787 		ZEND_NULL_HANDLER,
61788 		ZEND_SR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61789 		ZEND_NULL_HANDLER,
61790 		ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
61791 		ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
61792 		ZEND_NULL_HANDLER,
61793 		ZEND_CONCAT_SPEC_CONST_CV_HANDLER,
61794 		ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
61795 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
61796 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
61797 		ZEND_NULL_HANDLER,
61798 		ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
61799 		ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
61800 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
61801 		ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
61802 		ZEND_NULL_HANDLER,
61803 		ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER,
61804 		ZEND_NULL_HANDLER,
61805 		ZEND_NULL_HANDLER,
61806 		ZEND_NULL_HANDLER,
61807 		ZEND_NULL_HANDLER,
61808 		ZEND_NULL_HANDLER,
61809 		ZEND_CONCAT_SPEC_CV_CONST_HANDLER,
61810 		ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
61811 		ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER,
61812 		ZEND_NULL_HANDLER,
61813 		ZEND_CONCAT_SPEC_CV_CV_HANDLER,
61814 		ZEND_BW_OR_SPEC_CONST_CONST_HANDLER,
61815 		ZEND_NULL_HANDLER,
61816 		ZEND_NULL_HANDLER,
61817 		ZEND_NULL_HANDLER,
61818 		ZEND_NULL_HANDLER,
61819 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
61820 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61821 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61822 		ZEND_NULL_HANDLER,
61823 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61824 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
61825 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61826 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61827 		ZEND_NULL_HANDLER,
61828 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61829 		ZEND_NULL_HANDLER,
61830 		ZEND_NULL_HANDLER,
61831 		ZEND_NULL_HANDLER,
61832 		ZEND_NULL_HANDLER,
61833 		ZEND_NULL_HANDLER,
61834 		ZEND_BW_OR_SPEC_TMPVARCV_CONST_HANDLER,
61835 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61836 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61837 		ZEND_NULL_HANDLER,
61838 		ZEND_BW_OR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61839 		ZEND_BW_AND_SPEC_CONST_CONST_HANDLER,
61840 		ZEND_NULL_HANDLER,
61841 		ZEND_NULL_HANDLER,
61842 		ZEND_NULL_HANDLER,
61843 		ZEND_NULL_HANDLER,
61844 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
61845 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61846 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61847 		ZEND_NULL_HANDLER,
61848 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61849 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
61850 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61851 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61852 		ZEND_NULL_HANDLER,
61853 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61854 		ZEND_NULL_HANDLER,
61855 		ZEND_NULL_HANDLER,
61856 		ZEND_NULL_HANDLER,
61857 		ZEND_NULL_HANDLER,
61858 		ZEND_NULL_HANDLER,
61859 		ZEND_BW_AND_SPEC_TMPVARCV_CONST_HANDLER,
61860 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61861 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61862 		ZEND_NULL_HANDLER,
61863 		ZEND_BW_AND_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61864 		ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER,
61865 		ZEND_NULL_HANDLER,
61866 		ZEND_NULL_HANDLER,
61867 		ZEND_NULL_HANDLER,
61868 		ZEND_NULL_HANDLER,
61869 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
61870 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61871 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61872 		ZEND_NULL_HANDLER,
61873 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61874 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
61875 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61876 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61877 		ZEND_NULL_HANDLER,
61878 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61879 		ZEND_NULL_HANDLER,
61880 		ZEND_NULL_HANDLER,
61881 		ZEND_NULL_HANDLER,
61882 		ZEND_NULL_HANDLER,
61883 		ZEND_NULL_HANDLER,
61884 		ZEND_BW_XOR_SPEC_TMPVARCV_CONST_HANDLER,
61885 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61886 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61887 		ZEND_NULL_HANDLER,
61888 		ZEND_BW_XOR_SPEC_TMPVARCV_TMPVARCV_HANDLER,
61889 		ZEND_POW_SPEC_CONST_CONST_HANDLER,
61890 		ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
61891 		ZEND_POW_SPEC_CONST_TMPVAR_HANDLER,
61892 		ZEND_NULL_HANDLER,
61893 		ZEND_POW_SPEC_CONST_CV_HANDLER,
61894 		ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
61895 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
61896 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
61897 		ZEND_NULL_HANDLER,
61898 		ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
61899 		ZEND_POW_SPEC_TMPVAR_CONST_HANDLER,
61900 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
61901 		ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER,
61902 		ZEND_NULL_HANDLER,
61903 		ZEND_POW_SPEC_TMPVAR_CV_HANDLER,
61904 		ZEND_NULL_HANDLER,
61905 		ZEND_NULL_HANDLER,
61906 		ZEND_NULL_HANDLER,
61907 		ZEND_NULL_HANDLER,
61908 		ZEND_NULL_HANDLER,
61909 		ZEND_POW_SPEC_CV_CONST_HANDLER,
61910 		ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
61911 		ZEND_POW_SPEC_CV_TMPVAR_HANDLER,
61912 		ZEND_NULL_HANDLER,
61913 		ZEND_POW_SPEC_CV_CV_HANDLER,
61914 		ZEND_BW_NOT_SPEC_CONST_HANDLER,
61915 		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
61916 		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
61917 		ZEND_NULL_HANDLER,
61918 		ZEND_BW_NOT_SPEC_TMPVARCV_HANDLER,
61919 		ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
61920 		ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
61921 		ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER,
61922 		ZEND_NULL_HANDLER,
61923 		ZEND_BOOL_NOT_SPEC_CV_HANDLER,
61924 		ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER,
61925 		ZEND_NULL_HANDLER,
61926 		ZEND_NULL_HANDLER,
61927 		ZEND_NULL_HANDLER,
61928 		ZEND_NULL_HANDLER,
61929 		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
61930 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
61931 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
61932 		ZEND_NULL_HANDLER,
61933 		ZEND_NULL_HANDLER,
61934 		ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER,
61935 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
61936 		ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER,
61937 		ZEND_NULL_HANDLER,
61938 		ZEND_NULL_HANDLER,
61939 		ZEND_NULL_HANDLER,
61940 		ZEND_NULL_HANDLER,
61941 		ZEND_NULL_HANDLER,
61942 		ZEND_NULL_HANDLER,
61943 		ZEND_NULL_HANDLER,
61944 		ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER,
61945 		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
61946 		ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER,
61947 		ZEND_NULL_HANDLER,
61948 		ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER,
61949 		ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER,
61950 		ZEND_NULL_HANDLER,
61951 		ZEND_NULL_HANDLER,
61952 		ZEND_NULL_HANDLER,
61953 		ZEND_NULL_HANDLER,
61954 		ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER,
61955 		ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER,
61956 		ZEND_NULL_HANDLER,
61957 		ZEND_NULL_HANDLER,
61958 		ZEND_NULL_HANDLER,
61959 		ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER,
61960 		ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER,
61961 		ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER,
61962 		ZEND_NULL_HANDLER,
61963 		ZEND_NULL_HANDLER,
61964 		ZEND_NULL_HANDLER,
61965 		ZEND_NULL_HANDLER,
61966 		ZEND_NULL_HANDLER,
61967 		ZEND_NULL_HANDLER,
61968 		ZEND_NULL_HANDLER,
61969 		ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER,
61970 		ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER,
61971 		ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER,
61972 		ZEND_NULL_HANDLER,
61973 		ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER,
61974 		ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER,
61975 		ZEND_NULL_HANDLER,
61976 		ZEND_NULL_HANDLER,
61977 		ZEND_NULL_HANDLER,
61978 		ZEND_NULL_HANDLER,
61979 		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER,
61980 		ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER,
61981 		ZEND_NULL_HANDLER,
61982 		ZEND_NULL_HANDLER,
61983 		ZEND_NULL_HANDLER,
61984 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER,
61985 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER,
61986 		ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER,
61987 		ZEND_NULL_HANDLER,
61988 		ZEND_NULL_HANDLER,
61989 		ZEND_NULL_HANDLER,
61990 		ZEND_NULL_HANDLER,
61991 		ZEND_NULL_HANDLER,
61992 		ZEND_NULL_HANDLER,
61993 		ZEND_NULL_HANDLER,
61994 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER,
61995 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER,
61996 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER,
61997 		ZEND_NULL_HANDLER,
61998 		ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER,
61999 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
62000 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
62001 		ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
62002 		ZEND_NULL_HANDLER,
62003 		ZEND_NULL_HANDLER,
62004 		ZEND_NULL_HANDLER,
62005 		ZEND_NULL_HANDLER,
62006 		ZEND_NULL_HANDLER,
62007 		ZEND_NULL_HANDLER,
62008 		ZEND_NULL_HANDLER,
62009 		ZEND_NULL_HANDLER,
62010 		ZEND_NULL_HANDLER,
62011 		ZEND_NULL_HANDLER,
62012 		ZEND_NULL_HANDLER,
62013 		ZEND_NULL_HANDLER,
62014 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
62015 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
62016 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
62017 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
62018 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
62019 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
62020 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
62021 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
62022 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
62023 		ZEND_NULL_HANDLER,
62024 		ZEND_NULL_HANDLER,
62025 		ZEND_NULL_HANDLER,
62026 		ZEND_NULL_HANDLER,
62027 		ZEND_NULL_HANDLER,
62028 		ZEND_NULL_HANDLER,
62029 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
62030 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
62031 		ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
62032 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
62033 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
62034 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
62035 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
62036 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
62037 		ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
62038 		ZEND_NULL_HANDLER,
62039 		ZEND_NULL_HANDLER,
62040 		ZEND_NULL_HANDLER,
62041 		ZEND_NULL_HANDLER,
62042 		ZEND_NULL_HANDLER,
62043 		ZEND_NULL_HANDLER,
62044 		ZEND_NULL_HANDLER,
62045 		ZEND_NULL_HANDLER,
62046 		ZEND_NULL_HANDLER,
62047 		ZEND_NULL_HANDLER,
62048 		ZEND_NULL_HANDLER,
62049 		ZEND_NULL_HANDLER,
62050 		ZEND_NULL_HANDLER,
62051 		ZEND_NULL_HANDLER,
62052 		ZEND_NULL_HANDLER,
62053 		ZEND_NULL_HANDLER,
62054 		ZEND_NULL_HANDLER,
62055 		ZEND_NULL_HANDLER,
62056 		ZEND_NULL_HANDLER,
62057 		ZEND_NULL_HANDLER,
62058 		ZEND_NULL_HANDLER,
62059 		ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER,
62060 		ZEND_IS_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
62061 		ZEND_IS_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
62062 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
62063 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
62064 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
62065 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER,
62066 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
62067 		ZEND_IS_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
62068 		ZEND_NULL_HANDLER,
62069 		ZEND_NULL_HANDLER,
62070 		ZEND_NULL_HANDLER,
62071 		ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER,
62072 		ZEND_IS_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
62073 		ZEND_IS_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
62074 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
62075 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
62076 		ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
62077 		ZEND_NULL_HANDLER,
62078 		ZEND_NULL_HANDLER,
62079 		ZEND_NULL_HANDLER,
62080 		ZEND_NULL_HANDLER,
62081 		ZEND_NULL_HANDLER,
62082 		ZEND_NULL_HANDLER,
62083 		ZEND_NULL_HANDLER,
62084 		ZEND_NULL_HANDLER,
62085 		ZEND_NULL_HANDLER,
62086 		ZEND_NULL_HANDLER,
62087 		ZEND_NULL_HANDLER,
62088 		ZEND_NULL_HANDLER,
62089 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
62090 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
62091 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
62092 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
62093 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
62094 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
62095 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
62096 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
62097 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
62098 		ZEND_NULL_HANDLER,
62099 		ZEND_NULL_HANDLER,
62100 		ZEND_NULL_HANDLER,
62101 		ZEND_NULL_HANDLER,
62102 		ZEND_NULL_HANDLER,
62103 		ZEND_NULL_HANDLER,
62104 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER,
62105 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPZ_HANDLER,
62106 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_JMPNZ_HANDLER,
62107 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
62108 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
62109 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
62110 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER,
62111 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPZ_HANDLER,
62112 		ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_JMPNZ_HANDLER,
62113 		ZEND_NULL_HANDLER,
62114 		ZEND_NULL_HANDLER,
62115 		ZEND_NULL_HANDLER,
62116 		ZEND_NULL_HANDLER,
62117 		ZEND_NULL_HANDLER,
62118 		ZEND_NULL_HANDLER,
62119 		ZEND_NULL_HANDLER,
62120 		ZEND_NULL_HANDLER,
62121 		ZEND_NULL_HANDLER,
62122 		ZEND_NULL_HANDLER,
62123 		ZEND_NULL_HANDLER,
62124 		ZEND_NULL_HANDLER,
62125 		ZEND_NULL_HANDLER,
62126 		ZEND_NULL_HANDLER,
62127 		ZEND_NULL_HANDLER,
62128 		ZEND_NULL_HANDLER,
62129 		ZEND_NULL_HANDLER,
62130 		ZEND_NULL_HANDLER,
62131 		ZEND_NULL_HANDLER,
62132 		ZEND_NULL_HANDLER,
62133 		ZEND_NULL_HANDLER,
62134 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER,
62135 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPZ_HANDLER,
62136 		ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_JMPNZ_HANDLER,
62137 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
62138 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
62139 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
62140 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER,
62141 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPZ_HANDLER,
62142 		ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_JMPNZ_HANDLER,
62143 		ZEND_NULL_HANDLER,
62144 		ZEND_NULL_HANDLER,
62145 		ZEND_NULL_HANDLER,
62146 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER,
62147 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPZ_HANDLER,
62148 		ZEND_IS_NOT_EQUAL_SPEC_CV_CV_JMPNZ_HANDLER,
62149 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
62150 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
62151 		ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
62152 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
62153 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62154 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62155 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
62156 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62157 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62158 		ZEND_NULL_HANDLER,
62159 		ZEND_NULL_HANDLER,
62160 		ZEND_NULL_HANDLER,
62161 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_HANDLER,
62162 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62163 		ZEND_IS_SMALLER_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62164 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
62165 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62166 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62167 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62168 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62169 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62170 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62171 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62172 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62173 		ZEND_NULL_HANDLER,
62174 		ZEND_NULL_HANDLER,
62175 		ZEND_NULL_HANDLER,
62176 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62177 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62178 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62179 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
62180 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62181 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62182 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62183 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62184 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62185 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62186 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62187 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62188 		ZEND_NULL_HANDLER,
62189 		ZEND_NULL_HANDLER,
62190 		ZEND_NULL_HANDLER,
62191 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62192 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62193 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62194 		ZEND_NULL_HANDLER,
62195 		ZEND_NULL_HANDLER,
62196 		ZEND_NULL_HANDLER,
62197 		ZEND_NULL_HANDLER,
62198 		ZEND_NULL_HANDLER,
62199 		ZEND_NULL_HANDLER,
62200 		ZEND_NULL_HANDLER,
62201 		ZEND_NULL_HANDLER,
62202 		ZEND_NULL_HANDLER,
62203 		ZEND_NULL_HANDLER,
62204 		ZEND_NULL_HANDLER,
62205 		ZEND_NULL_HANDLER,
62206 		ZEND_NULL_HANDLER,
62207 		ZEND_NULL_HANDLER,
62208 		ZEND_NULL_HANDLER,
62209 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_HANDLER,
62210 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62211 		ZEND_IS_SMALLER_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62212 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62213 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62214 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62215 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62216 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62217 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62218 		ZEND_NULL_HANDLER,
62219 		ZEND_NULL_HANDLER,
62220 		ZEND_NULL_HANDLER,
62221 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62222 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62223 		ZEND_IS_SMALLER_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62224 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
62225 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
62226 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
62227 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
62228 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62229 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62230 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
62231 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62232 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62233 		ZEND_NULL_HANDLER,
62234 		ZEND_NULL_HANDLER,
62235 		ZEND_NULL_HANDLER,
62236 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_HANDLER,
62237 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
62238 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
62239 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
62240 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62241 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62242 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62243 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62244 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62245 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62246 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62247 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62248 		ZEND_NULL_HANDLER,
62249 		ZEND_NULL_HANDLER,
62250 		ZEND_NULL_HANDLER,
62251 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62252 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62253 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62254 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
62255 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62256 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62257 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62258 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62259 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62260 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62261 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62262 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62263 		ZEND_NULL_HANDLER,
62264 		ZEND_NULL_HANDLER,
62265 		ZEND_NULL_HANDLER,
62266 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62267 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62268 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62269 		ZEND_NULL_HANDLER,
62270 		ZEND_NULL_HANDLER,
62271 		ZEND_NULL_HANDLER,
62272 		ZEND_NULL_HANDLER,
62273 		ZEND_NULL_HANDLER,
62274 		ZEND_NULL_HANDLER,
62275 		ZEND_NULL_HANDLER,
62276 		ZEND_NULL_HANDLER,
62277 		ZEND_NULL_HANDLER,
62278 		ZEND_NULL_HANDLER,
62279 		ZEND_NULL_HANDLER,
62280 		ZEND_NULL_HANDLER,
62281 		ZEND_NULL_HANDLER,
62282 		ZEND_NULL_HANDLER,
62283 		ZEND_NULL_HANDLER,
62284 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_HANDLER,
62285 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
62286 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
62287 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62288 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62289 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62290 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62291 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62292 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62293 		ZEND_NULL_HANDLER,
62294 		ZEND_NULL_HANDLER,
62295 		ZEND_NULL_HANDLER,
62296 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_HANDLER,
62297 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
62298 		ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
62299 		ZEND_NULL_HANDLER,
62300 		ZEND_NULL_HANDLER,
62301 		ZEND_NULL_HANDLER,
62302 		ZEND_NULL_HANDLER,
62303 		ZEND_NULL_HANDLER,
62304 		ZEND_NULL_HANDLER,
62305 		ZEND_NULL_HANDLER,
62306 		ZEND_NULL_HANDLER,
62307 		ZEND_NULL_HANDLER,
62308 		ZEND_NULL_HANDLER,
62309 		ZEND_NULL_HANDLER,
62310 		ZEND_NULL_HANDLER,
62311 		ZEND_NULL_HANDLER,
62312 		ZEND_NULL_HANDLER,
62313 		ZEND_NULL_HANDLER,
62314 		ZEND_NULL_HANDLER,
62315 		ZEND_NULL_HANDLER,
62316 		ZEND_NULL_HANDLER,
62317 		ZEND_NULL_HANDLER,
62318 		ZEND_NULL_HANDLER,
62319 		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER,
62320 		ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER,
62321 		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER,
62322 		ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER,
62323 		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER,
62324 		ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER,
62325 		ZEND_NULL_HANDLER,
62326 		ZEND_NULL_HANDLER,
62327 		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
62328 		ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER,
62329 		ZEND_NULL_HANDLER,
62330 		ZEND_NULL_HANDLER,
62331 		ZEND_NULL_HANDLER,
62332 		ZEND_NULL_HANDLER,
62333 		ZEND_NULL_HANDLER,
62334 		ZEND_NULL_HANDLER,
62335 		ZEND_NULL_HANDLER,
62336 		ZEND_NULL_HANDLER,
62337 		ZEND_NULL_HANDLER,
62338 		ZEND_NULL_HANDLER,
62339 		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER,
62340 		ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER,
62341 		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER,
62342 		ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER,
62343 		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER,
62344 		ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER,
62345 		ZEND_NULL_HANDLER,
62346 		ZEND_NULL_HANDLER,
62347 		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER,
62348 		ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER,
62349 		ZEND_NULL_HANDLER,
62350 		ZEND_NULL_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_NULL_HANDLER,
62367 		ZEND_NULL_HANDLER,
62368 		ZEND_NULL_HANDLER,
62369 		ZEND_NULL_HANDLER,
62370 		ZEND_NULL_HANDLER,
62371 		ZEND_NULL_HANDLER,
62372 		ZEND_NULL_HANDLER,
62373 		ZEND_NULL_HANDLER,
62374 		ZEND_NULL_HANDLER,
62375 		ZEND_NULL_HANDLER,
62376 		ZEND_NULL_HANDLER,
62377 		ZEND_NULL_HANDLER,
62378 		ZEND_NULL_HANDLER,
62379 		ZEND_NULL_HANDLER,
62380 		ZEND_NULL_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_NULL_HANDLER,
62397 		ZEND_NULL_HANDLER,
62398 		ZEND_NULL_HANDLER,
62399 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
62400 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
62401 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
62402 		ZEND_NULL_HANDLER,
62403 		ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
62404 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
62405 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
62406 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
62407 		ZEND_NULL_HANDLER,
62408 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
62409 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
62410 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
62411 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
62412 		ZEND_NULL_HANDLER,
62413 		ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
62414 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER,
62415 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER,
62416 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER,
62417 		ZEND_NULL_HANDLER,
62418 		ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER,
62419 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
62420 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
62421 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
62422 		ZEND_NULL_HANDLER,
62423 		ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
62424 		ZEND_NULL_HANDLER,
62425 		ZEND_NULL_HANDLER,
62426 		ZEND_NULL_HANDLER,
62427 		ZEND_NULL_HANDLER,
62428 		ZEND_NULL_HANDLER,
62429 		ZEND_NULL_HANDLER,
62430 		ZEND_NULL_HANDLER,
62431 		ZEND_NULL_HANDLER,
62432 		ZEND_NULL_HANDLER,
62433 		ZEND_NULL_HANDLER,
62434 		ZEND_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_NULL_HANDLER,
62442 		ZEND_NULL_HANDLER,
62443 		ZEND_NULL_HANDLER,
62444 		ZEND_NULL_HANDLER,
62445 		ZEND_NULL_HANDLER,
62446 		ZEND_NULL_HANDLER,
62447 		ZEND_NULL_HANDLER,
62448 		ZEND_NULL_HANDLER,
62449 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
62450 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
62451 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
62452 		ZEND_NULL_HANDLER,
62453 		ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
62454 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
62455 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
62456 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
62457 		ZEND_NULL_HANDLER,
62458 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
62459 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
62460 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
62461 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
62462 		ZEND_NULL_HANDLER,
62463 		ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
62464 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER,
62465 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER,
62466 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER,
62467 		ZEND_NULL_HANDLER,
62468 		ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER,
62469 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
62470 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
62471 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
62472 		ZEND_NULL_HANDLER,
62473 		ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER,
62474 		ZEND_NULL_HANDLER,
62475 		ZEND_NULL_HANDLER,
62476 		ZEND_NULL_HANDLER,
62477 		ZEND_NULL_HANDLER,
62478 		ZEND_NULL_HANDLER,
62479 		ZEND_NULL_HANDLER,
62480 		ZEND_NULL_HANDLER,
62481 		ZEND_NULL_HANDLER,
62482 		ZEND_NULL_HANDLER,
62483 		ZEND_NULL_HANDLER,
62484 		ZEND_NULL_HANDLER,
62485 		ZEND_NULL_HANDLER,
62486 		ZEND_NULL_HANDLER,
62487 		ZEND_NULL_HANDLER,
62488 		ZEND_NULL_HANDLER,
62489 		ZEND_NULL_HANDLER,
62490 		ZEND_NULL_HANDLER,
62491 		ZEND_NULL_HANDLER,
62492 		ZEND_NULL_HANDLER,
62493 		ZEND_NULL_HANDLER,
62494 		ZEND_NULL_HANDLER,
62495 		ZEND_NULL_HANDLER,
62496 		ZEND_NULL_HANDLER,
62497 		ZEND_NULL_HANDLER,
62498 		ZEND_NULL_HANDLER,
62499 		ZEND_NULL_HANDLER,
62500 		ZEND_NULL_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_NULL_HANDLER,
62517 		ZEND_NULL_HANDLER,
62518 		ZEND_NULL_HANDLER,
62519 		ZEND_NULL_HANDLER,
62520 		ZEND_NULL_HANDLER,
62521 		ZEND_NULL_HANDLER,
62522 		ZEND_NULL_HANDLER,
62523 		ZEND_NULL_HANDLER,
62524 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
62525 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
62526 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
62527 		ZEND_NULL_HANDLER,
62528 		ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
62529 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
62530 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
62531 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
62532 		ZEND_NULL_HANDLER,
62533 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
62534 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
62535 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
62536 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
62537 		ZEND_NULL_HANDLER,
62538 		ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
62539 		ZEND_NULL_HANDLER,
62540 		ZEND_NULL_HANDLER,
62541 		ZEND_NULL_HANDLER,
62542 		ZEND_NULL_HANDLER,
62543 		ZEND_NULL_HANDLER,
62544 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
62545 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
62546 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
62547 		ZEND_NULL_HANDLER,
62548 		ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
62549 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER,
62550 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER,
62551 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
62552 		ZEND_NULL_HANDLER,
62553 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
62554 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
62555 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
62556 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
62557 		ZEND_NULL_HANDLER,
62558 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
62559 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER,
62560 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER,
62561 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
62562 		ZEND_NULL_HANDLER,
62563 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
62564 		ZEND_NULL_HANDLER,
62565 		ZEND_NULL_HANDLER,
62566 		ZEND_NULL_HANDLER,
62567 		ZEND_NULL_HANDLER,
62568 		ZEND_NULL_HANDLER,
62569 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER,
62570 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER,
62571 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
62572 		ZEND_NULL_HANDLER,
62573 		ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
62574 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER,
62575 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER,
62576 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
62577 		ZEND_NULL_HANDLER,
62578 		ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
62579 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
62580 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
62581 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
62582 		ZEND_NULL_HANDLER,
62583 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
62584 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER,
62585 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER,
62586 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
62587 		ZEND_NULL_HANDLER,
62588 		ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
62589 		ZEND_NULL_HANDLER,
62590 		ZEND_NULL_HANDLER,
62591 		ZEND_NULL_HANDLER,
62592 		ZEND_NULL_HANDLER,
62593 		ZEND_NULL_HANDLER,
62594 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER,
62595 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER,
62596 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
62597 		ZEND_NULL_HANDLER,
62598 		ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER,
62599 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CONST_HANDLER,
62600 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_TMP_HANDLER,
62601 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_VAR_HANDLER,
62602 		ZEND_NULL_HANDLER,
62603 		ZEND_ASSIGN_STATIC_PROP_SPEC_OP_DATA_CV_HANDLER,
62604 		ZEND_NULL_HANDLER,
62605 		ZEND_NULL_HANDLER,
62606 		ZEND_NULL_HANDLER,
62607 		ZEND_NULL_HANDLER,
62608 		ZEND_NULL_HANDLER,
62609 		ZEND_NULL_HANDLER,
62610 		ZEND_NULL_HANDLER,
62611 		ZEND_NULL_HANDLER,
62612 		ZEND_NULL_HANDLER,
62613 		ZEND_NULL_HANDLER,
62614 		ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER,
62615 		ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
62616 		ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER,
62617 		ZEND_NULL_HANDLER,
62618 		ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER,
62619 		ZEND_NULL_HANDLER,
62620 		ZEND_NULL_HANDLER,
62621 		ZEND_NULL_HANDLER,
62622 		ZEND_NULL_HANDLER,
62623 		ZEND_NULL_HANDLER,
62624 		ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLER,
62625 		ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
62626 		ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDLER,
62627 		ZEND_NULL_HANDLER,
62628 		ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER,
62629 		ZEND_NULL_HANDLER,
62630 		ZEND_NULL_HANDLER,
62631 		ZEND_NULL_HANDLER,
62632 		ZEND_NULL_HANDLER,
62633 		ZEND_NULL_HANDLER,
62634 		ZEND_NULL_HANDLER,
62635 		ZEND_NULL_HANDLER,
62636 		ZEND_NULL_HANDLER,
62637 		ZEND_NULL_HANDLER,
62638 		ZEND_NULL_HANDLER,
62639 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER,
62640 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
62641 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER,
62642 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_HANDLER,
62643 		ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER,
62644 		ZEND_NULL_HANDLER,
62645 		ZEND_NULL_HANDLER,
62646 		ZEND_NULL_HANDLER,
62647 		ZEND_NULL_HANDLER,
62648 		ZEND_NULL_HANDLER,
62649 		ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HANDLER,
62650 		ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
62651 		ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_HANDLER,
62652 		ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_HANDLER,
62653 		ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDLER,
62654 		ZEND_NULL_HANDLER,
62655 		ZEND_NULL_HANDLER,
62656 		ZEND_NULL_HANDLER,
62657 		ZEND_NULL_HANDLER,
62658 		ZEND_NULL_HANDLER,
62659 		ZEND_NULL_HANDLER,
62660 		ZEND_NULL_HANDLER,
62661 		ZEND_NULL_HANDLER,
62662 		ZEND_NULL_HANDLER,
62663 		ZEND_NULL_HANDLER,
62664 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER,
62665 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
62666 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
62667 		ZEND_NULL_HANDLER,
62668 		ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER,
62669 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER,
62670 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
62671 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
62672 		ZEND_NULL_HANDLER,
62673 		ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_HANDLER,
62674 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HANDLER,
62675 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
62676 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_HANDLER,
62677 		ZEND_NULL_HANDLER,
62678 		ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDLER,
62679 		ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HANDLER,
62680 		ZEND_NULL_HANDLER,
62681 		ZEND_NULL_HANDLER,
62682 		ZEND_NULL_HANDLER,
62683 		ZEND_NULL_HANDLER,
62684 		ZEND_NULL_HANDLER,
62685 		ZEND_NULL_HANDLER,
62686 		ZEND_NULL_HANDLER,
62687 		ZEND_NULL_HANDLER,
62688 		ZEND_NULL_HANDLER,
62689 		ZEND_NULL_HANDLER,
62690 		ZEND_NULL_HANDLER,
62691 		ZEND_NULL_HANDLER,
62692 		ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER,
62693 		ZEND_NULL_HANDLER,
62694 		ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER,
62695 		ZEND_NULL_HANDLER,
62696 		ZEND_NULL_HANDLER,
62697 		ZEND_NULL_HANDLER,
62698 		ZEND_NULL_HANDLER,
62699 		ZEND_NULL_HANDLER,
62700 		ZEND_NULL_HANDLER,
62701 		ZEND_NULL_HANDLER,
62702 		ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER,
62703 		ZEND_NULL_HANDLER,
62704 		ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER,
62705 		ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
62706 		ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
62707 		ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
62708 		ZEND_NULL_HANDLER,
62709 		ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
62710 		ZEND_NULL_HANDLER,
62711 		ZEND_NULL_HANDLER,
62712 		ZEND_NULL_HANDLER,
62713 		ZEND_NULL_HANDLER,
62714 		ZEND_NULL_HANDLER,
62715 		ZEND_NULL_HANDLER,
62716 		ZEND_NULL_HANDLER,
62717 		ZEND_NULL_HANDLER,
62718 		ZEND_NULL_HANDLER,
62719 		ZEND_NULL_HANDLER,
62720 		ZEND_NULL_HANDLER,
62721 		ZEND_NULL_HANDLER,
62722 		ZEND_NULL_HANDLER,
62723 		ZEND_NULL_HANDLER,
62724 		ZEND_NULL_HANDLER,
62725 		ZEND_NULL_HANDLER,
62726 		ZEND_NULL_HANDLER,
62727 		ZEND_NULL_HANDLER,
62728 		ZEND_NULL_HANDLER,
62729 		ZEND_NULL_HANDLER,
62730 		ZEND_NULL_HANDLER,
62731 		ZEND_NULL_HANDLER,
62732 		ZEND_NULL_HANDLER,
62733 		ZEND_NULL_HANDLER,
62734 		ZEND_NULL_HANDLER,
62735 		ZEND_NULL_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_NULL_HANDLER,
62752 		ZEND_NULL_HANDLER,
62753 		ZEND_NULL_HANDLER,
62754 		ZEND_NULL_HANDLER,
62755 		ZEND_NULL_HANDLER,
62756 		ZEND_NULL_HANDLER,
62757 		ZEND_NULL_HANDLER,
62758 		ZEND_NULL_HANDLER,
62759 		ZEND_NULL_HANDLER,
62760 		ZEND_NULL_HANDLER,
62761 		ZEND_NULL_HANDLER,
62762 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
62763 		ZEND_NULL_HANDLER,
62764 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
62765 		ZEND_NULL_HANDLER,
62766 		ZEND_NULL_HANDLER,
62767 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
62768 		ZEND_NULL_HANDLER,
62769 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
62770 		ZEND_NULL_HANDLER,
62771 		ZEND_NULL_HANDLER,
62772 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
62773 		ZEND_NULL_HANDLER,
62774 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
62775 		ZEND_NULL_HANDLER,
62776 		ZEND_NULL_HANDLER,
62777 		ZEND_NULL_HANDLER,
62778 		ZEND_NULL_HANDLER,
62779 		ZEND_NULL_HANDLER,
62780 		ZEND_NULL_HANDLER,
62781 		ZEND_NULL_HANDLER,
62782 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
62783 		ZEND_NULL_HANDLER,
62784 		ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
62785 		ZEND_NULL_HANDLER,
62786 		ZEND_NULL_HANDLER,
62787 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
62788 		ZEND_NULL_HANDLER,
62789 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER,
62790 		ZEND_NULL_HANDLER,
62791 		ZEND_NULL_HANDLER,
62792 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
62793 		ZEND_NULL_HANDLER,
62794 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
62795 		ZEND_NULL_HANDLER,
62796 		ZEND_NULL_HANDLER,
62797 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER,
62798 		ZEND_NULL_HANDLER,
62799 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER,
62800 		ZEND_NULL_HANDLER,
62801 		ZEND_NULL_HANDLER,
62802 		ZEND_NULL_HANDLER,
62803 		ZEND_NULL_HANDLER,
62804 		ZEND_NULL_HANDLER,
62805 		ZEND_NULL_HANDLER,
62806 		ZEND_NULL_HANDLER,
62807 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER,
62808 		ZEND_NULL_HANDLER,
62809 		ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER,
62810 		ZEND_NULL_HANDLER,
62811 		ZEND_NULL_HANDLER,
62812 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_VAR_HANDLER,
62813 		ZEND_NULL_HANDLER,
62814 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CONST_OP_DATA_CV_HANDLER,
62815 		ZEND_NULL_HANDLER,
62816 		ZEND_NULL_HANDLER,
62817 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
62818 		ZEND_NULL_HANDLER,
62819 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
62820 		ZEND_NULL_HANDLER,
62821 		ZEND_NULL_HANDLER,
62822 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER,
62823 		ZEND_NULL_HANDLER,
62824 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER,
62825 		ZEND_NULL_HANDLER,
62826 		ZEND_NULL_HANDLER,
62827 		ZEND_NULL_HANDLER,
62828 		ZEND_NULL_HANDLER,
62829 		ZEND_NULL_HANDLER,
62830 		ZEND_NULL_HANDLER,
62831 		ZEND_NULL_HANDLER,
62832 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_VAR_HANDLER,
62833 		ZEND_NULL_HANDLER,
62834 		ZEND_ASSIGN_OBJ_REF_SPEC_CV_CV_OP_DATA_CV_HANDLER,
62835 		ZEND_ASSIGN_STATIC_PROP_REF_SPEC_HANDLER,
62836 		ZEND_NULL_HANDLER,
62837 		ZEND_NULL_HANDLER,
62838 		ZEND_NULL_HANDLER,
62839 		ZEND_NULL_HANDLER,
62840 		ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
62841 		ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER,
62842 		ZEND_NULL_HANDLER,
62843 		ZEND_NULL_HANDLER,
62844 		ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER,
62845 		ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER,
62846 		ZEND_NULL_HANDLER,
62847 		ZEND_NULL_HANDLER,
62848 		ZEND_NULL_HANDLER,
62849 		ZEND_NULL_HANDLER,
62850 		ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER,
62851 		ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER,
62852 		ZEND_NULL_HANDLER,
62853 		ZEND_NULL_HANDLER,
62854 		ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER,
62855 		ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER,
62856 		ZEND_NULL_HANDLER,
62857 		ZEND_NULL_HANDLER,
62858 		ZEND_POST_INC_SPEC_VAR_HANDLER,
62859 		ZEND_NULL_HANDLER,
62860 		ZEND_POST_INC_SPEC_CV_HANDLER,
62861 		ZEND_NULL_HANDLER,
62862 		ZEND_NULL_HANDLER,
62863 		ZEND_POST_DEC_SPEC_VAR_HANDLER,
62864 		ZEND_NULL_HANDLER,
62865 		ZEND_POST_DEC_SPEC_CV_HANDLER,
62866 		ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER,
62867 		ZEND_POST_INC_STATIC_PROP_SPEC_HANDLER,
62868 		ZEND_JMP_SPEC_HANDLER,
62869 		ZEND_JMPZ_SPEC_CONST_HANDLER,
62870 		ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
62871 		ZEND_JMPZ_SPEC_TMPVAR_HANDLER,
62872 		ZEND_NULL_HANDLER,
62873 		ZEND_JMPZ_SPEC_CV_HANDLER,
62874 		ZEND_JMPNZ_SPEC_CONST_HANDLER,
62875 		ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
62876 		ZEND_JMPNZ_SPEC_TMPVAR_HANDLER,
62877 		ZEND_NULL_HANDLER,
62878 		ZEND_JMPNZ_SPEC_CV_HANDLER,
62879 		ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
62880 		ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
62881 		ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER,
62882 		ZEND_NULL_HANDLER,
62883 		ZEND_JMPZ_EX_SPEC_CV_HANDLER,
62884 		ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
62885 		ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
62886 		ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER,
62887 		ZEND_NULL_HANDLER,
62888 		ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
62889 		ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER,
62890 		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
62891 		ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER,
62892 		ZEND_NULL_HANDLER,
62893 		ZEND_CASE_SPEC_TMPVAR_CV_HANDLER,
62894 		ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER,
62895 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER,
62896 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_CONST_HANDLER,
62897 		ZEND_NULL_HANDLER,
62898 		ZEND_NULL_HANDLER,
62899 		ZEND_NULL_HANDLER,
62900 		ZEND_NULL_HANDLER,
62901 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_HANDLER,
62902 		ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_UNUSED_QUICK_HANDLER,
62903 		ZEND_NULL_HANDLER,
62904 		ZEND_NULL_HANDLER,
62905 		ZEND_CAST_SPEC_CONST_HANDLER,
62906 		ZEND_CAST_SPEC_TMP_HANDLER,
62907 		ZEND_CAST_SPEC_VAR_HANDLER,
62908 		ZEND_NULL_HANDLER,
62909 		ZEND_CAST_SPEC_CV_HANDLER,
62910 		ZEND_BOOL_SPEC_CONST_HANDLER,
62911 		ZEND_BOOL_SPEC_TMPVAR_HANDLER,
62912 		ZEND_BOOL_SPEC_TMPVAR_HANDLER,
62913 		ZEND_NULL_HANDLER,
62914 		ZEND_BOOL_SPEC_CV_HANDLER,
62915 		ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER,
62916 		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
62917 		ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER,
62918 		ZEND_NULL_HANDLER,
62919 		ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER,
62920 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
62921 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
62922 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
62923 		ZEND_NULL_HANDLER,
62924 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
62925 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER,
62926 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
62927 		ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER,
62928 		ZEND_NULL_HANDLER,
62929 		ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER,
62930 		ZEND_NULL_HANDLER,
62931 		ZEND_NULL_HANDLER,
62932 		ZEND_NULL_HANDLER,
62933 		ZEND_NULL_HANDLER,
62934 		ZEND_NULL_HANDLER,
62935 		ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER,
62936 		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
62937 		ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER,
62938 		ZEND_NULL_HANDLER,
62939 		ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER,
62940 		ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER,
62941 		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
62942 		ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER,
62943 		ZEND_NULL_HANDLER,
62944 		ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER,
62945 		ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER,
62946 		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
62947 		ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER,
62948 		ZEND_NULL_HANDLER,
62949 		ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER,
62950 		ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER,
62951 		ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
62952 		ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER,
62953 		ZEND_NULL_HANDLER,
62954 		ZEND_ROPE_END_SPEC_TMP_CV_HANDLER,
62955 		ZEND_BEGIN_SILENCE_SPEC_HANDLER,
62956 		ZEND_END_SILENCE_SPEC_TMP_HANDLER,
62957 		ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
62958 		ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER,
62959 		ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER,
62960 		ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER,
62961 		ZEND_DO_FCALL_SPEC_OBSERVER_HANDLER,
62962 		ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
62963 		ZEND_RETURN_SPEC_CONST_HANDLER,
62964 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
62965 		ZEND_RETURN_SPEC_TMP_HANDLER,
62966 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
62967 		ZEND_RETURN_SPEC_VAR_HANDLER,
62968 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
62969 		ZEND_NULL_HANDLER,
62970 		ZEND_NULL_HANDLER,
62971 		ZEND_RETURN_SPEC_CV_HANDLER,
62972 		ZEND_RETURN_SPEC_OBSERVER_HANDLER,
62973 		ZEND_RECV_SPEC_UNUSED_HANDLER,
62974 		ZEND_RECV_INIT_SPEC_CONST_HANDLER,
62975 		ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER,
62976 		ZEND_NULL_HANDLER,
62977 		ZEND_NULL_HANDLER,
62978 		ZEND_SEND_VAL_SPEC_CONST_UNUSED_HANDLER,
62979 		ZEND_NULL_HANDLER,
62980 		ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER,
62981 		ZEND_NULL_HANDLER,
62982 		ZEND_NULL_HANDLER,
62983 		ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER,
62984 		ZEND_NULL_HANDLER,
62985 		ZEND_SEND_VAL_SPEC_TMPVAR_CONST_HANDLER,
62986 		ZEND_NULL_HANDLER,
62987 		ZEND_NULL_HANDLER,
62988 		ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED_HANDLER,
62989 		ZEND_NULL_HANDLER,
62990 		ZEND_NULL_HANDLER,
62991 		ZEND_NULL_HANDLER,
62992 		ZEND_NULL_HANDLER,
62993 		ZEND_NULL_HANDLER,
62994 		ZEND_NULL_HANDLER,
62995 		ZEND_NULL_HANDLER,
62996 		ZEND_NULL_HANDLER,
62997 		ZEND_NULL_HANDLER,
62998 		ZEND_NULL_HANDLER,
62999 		ZEND_NULL_HANDLER,
63000 		ZEND_NULL_HANDLER,
63001 		ZEND_NULL_HANDLER,
63002 		ZEND_NULL_HANDLER,
63003 		ZEND_NULL_HANDLER,
63004 		ZEND_NULL_HANDLER,
63005 		ZEND_NULL_HANDLER,
63006 		ZEND_NULL_HANDLER,
63007 		ZEND_NULL_HANDLER,
63008 		ZEND_NULL_HANDLER,
63009 		ZEND_NULL_HANDLER,
63010 		ZEND_NULL_HANDLER,
63011 		ZEND_NULL_HANDLER,
63012 		ZEND_NULL_HANDLER,
63013 		ZEND_NULL_HANDLER,
63014 		ZEND_NULL_HANDLER,
63015 		ZEND_NULL_HANDLER,
63016 		ZEND_NULL_HANDLER,
63017 		ZEND_NULL_HANDLER,
63018 		ZEND_NULL_HANDLER,
63019 		ZEND_NULL_HANDLER,
63020 		ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER,
63021 		ZEND_SEND_VAR_EX_SPEC_VAR_CONST_HANDLER,
63022 		ZEND_NULL_HANDLER,
63023 		ZEND_NULL_HANDLER,
63024 		ZEND_NULL_HANDLER,
63025 		ZEND_NULL_HANDLER,
63026 		ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_HANDLER,
63027 		ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK_HANDLER,
63028 		ZEND_NULL_HANDLER,
63029 		ZEND_NULL_HANDLER,
63030 		ZEND_NULL_HANDLER,
63031 		ZEND_NULL_HANDLER,
63032 		ZEND_NULL_HANDLER,
63033 		ZEND_NULL_HANDLER,
63034 		ZEND_NULL_HANDLER,
63035 		ZEND_NULL_HANDLER,
63036 		ZEND_NULL_HANDLER,
63037 		ZEND_NULL_HANDLER,
63038 		ZEND_NULL_HANDLER,
63039 		ZEND_NULL_HANDLER,
63040 		ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER,
63041 		ZEND_SEND_VAR_EX_SPEC_CV_CONST_HANDLER,
63042 		ZEND_NULL_HANDLER,
63043 		ZEND_NULL_HANDLER,
63044 		ZEND_NULL_HANDLER,
63045 		ZEND_NULL_HANDLER,
63046 		ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_HANDLER,
63047 		ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK_HANDLER,
63048 		ZEND_NULL_HANDLER,
63049 		ZEND_NULL_HANDLER,
63050 		ZEND_NULL_HANDLER,
63051 		ZEND_NULL_HANDLER,
63052 		ZEND_NULL_HANDLER,
63053 		ZEND_NULL_HANDLER,
63054 		ZEND_NULL_HANDLER,
63055 		ZEND_NULL_HANDLER,
63056 		ZEND_NULL_HANDLER,
63057 		ZEND_NULL_HANDLER,
63058 		ZEND_NULL_HANDLER,
63059 		ZEND_NULL_HANDLER,
63060 		ZEND_SEND_REF_SPEC_VAR_CONST_HANDLER,
63061 		ZEND_NULL_HANDLER,
63062 		ZEND_NULL_HANDLER,
63063 		ZEND_SEND_REF_SPEC_VAR_UNUSED_HANDLER,
63064 		ZEND_NULL_HANDLER,
63065 		ZEND_NULL_HANDLER,
63066 		ZEND_NULL_HANDLER,
63067 		ZEND_NULL_HANDLER,
63068 		ZEND_NULL_HANDLER,
63069 		ZEND_NULL_HANDLER,
63070 		ZEND_SEND_REF_SPEC_CV_CONST_HANDLER,
63071 		ZEND_NULL_HANDLER,
63072 		ZEND_NULL_HANDLER,
63073 		ZEND_SEND_REF_SPEC_CV_UNUSED_HANDLER,
63074 		ZEND_NULL_HANDLER,
63075 		ZEND_NEW_SPEC_CONST_UNUSED_HANDLER,
63076 		ZEND_NULL_HANDLER,
63077 		ZEND_NEW_SPEC_VAR_UNUSED_HANDLER,
63078 		ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER,
63079 		ZEND_NULL_HANDLER,
63080 		ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER,
63081 		ZEND_FREE_SPEC_TMPVAR_HANDLER,
63082 		ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER,
63083 		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
63084 		ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER,
63085 		ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER,
63086 		ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER,
63087 		ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER,
63088 		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
63089 		ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER,
63090 		ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER,
63091 		ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER,
63092 		ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER,
63093 		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
63094 		ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER,
63095 		ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
63096 		ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER,
63097 		ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER,
63098 		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
63099 		ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR_HANDLER,
63100 		ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER,
63101 		ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER,
63102 		ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
63103 		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
63104 		ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER,
63105 		ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER,
63106 		ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER,
63107 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER,
63108 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
63109 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER,
63110 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER,
63111 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER,
63112 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER,
63113 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
63114 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER,
63115 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER,
63116 		ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER,
63117 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER,
63118 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
63119 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER,
63120 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER,
63121 		ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER,
63122 		ZEND_NULL_HANDLER,
63123 		ZEND_NULL_HANDLER,
63124 		ZEND_NULL_HANDLER,
63125 		ZEND_NULL_HANDLER,
63126 		ZEND_NULL_HANDLER,
63127 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER,
63128 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
63129 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER,
63130 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER,
63131 		ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER,
63132 		ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
63133 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
63134 		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
63135 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
63136 		ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
63137 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
63138 		ZEND_NULL_HANDLER,
63139 		ZEND_NULL_HANDLER,
63140 		ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
63141 		ZEND_INCLUDE_OR_EVAL_SPEC_OBSERVER_HANDLER,
63142 		ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER,
63143 		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
63144 		ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
63145 		ZEND_NULL_HANDLER,
63146 		ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER,
63147 		ZEND_NULL_HANDLER,
63148 		ZEND_NULL_HANDLER,
63149 		ZEND_NULL_HANDLER,
63150 		ZEND_NULL_HANDLER,
63151 		ZEND_NULL_HANDLER,
63152 		ZEND_NULL_HANDLER,
63153 		ZEND_NULL_HANDLER,
63154 		ZEND_NULL_HANDLER,
63155 		ZEND_NULL_HANDLER,
63156 		ZEND_NULL_HANDLER,
63157 		ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER,
63158 		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
63159 		ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER,
63160 		ZEND_NULL_HANDLER,
63161 		ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER,
63162 		ZEND_NULL_HANDLER,
63163 		ZEND_NULL_HANDLER,
63164 		ZEND_NULL_HANDLER,
63165 		ZEND_NULL_HANDLER,
63166 		ZEND_NULL_HANDLER,
63167 		ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER,
63168 		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
63169 		ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER,
63170 		ZEND_NULL_HANDLER,
63171 		ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER,
63172 		ZEND_NULL_HANDLER,
63173 		ZEND_NULL_HANDLER,
63174 		ZEND_NULL_HANDLER,
63175 		ZEND_NULL_HANDLER,
63176 		ZEND_NULL_HANDLER,
63177 		ZEND_NULL_HANDLER,
63178 		ZEND_NULL_HANDLER,
63179 		ZEND_NULL_HANDLER,
63180 		ZEND_NULL_HANDLER,
63181 		ZEND_NULL_HANDLER,
63182 		ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER,
63183 		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
63184 		ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER,
63185 		ZEND_NULL_HANDLER,
63186 		ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER,
63187 		ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER,
63188 		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
63189 		ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
63190 		ZEND_NULL_HANDLER,
63191 		ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER,
63192 		ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER,
63193 		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
63194 		ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER,
63195 		ZEND_NULL_HANDLER,
63196 		ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER,
63197 		ZEND_FE_RESET_R_SPEC_CONST_HANDLER,
63198 		ZEND_FE_RESET_R_SPEC_TMP_HANDLER,
63199 		ZEND_FE_RESET_R_SPEC_VAR_HANDLER,
63200 		ZEND_NULL_HANDLER,
63201 		ZEND_FE_RESET_R_SPEC_CV_HANDLER,
63202 		ZEND_FE_FETCH_R_SPEC_VAR_HANDLER,
63203 		ZEND_EXIT_SPEC_HANDLER,
63204 		ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER,
63205 		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
63206 		ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER,
63207 		ZEND_NULL_HANDLER,
63208 		ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER,
63209 		ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER,
63210 		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
63211 		ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER,
63212 		ZEND_NULL_HANDLER,
63213 		ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER,
63214 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
63215 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
63216 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
63217 		ZEND_NULL_HANDLER,
63218 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
63219 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER,
63220 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
63221 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER,
63222 		ZEND_NULL_HANDLER,
63223 		ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER,
63224 		ZEND_NULL_HANDLER,
63225 		ZEND_NULL_HANDLER,
63226 		ZEND_NULL_HANDLER,
63227 		ZEND_NULL_HANDLER,
63228 		ZEND_NULL_HANDLER,
63229 		ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER,
63230 		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
63231 		ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER,
63232 		ZEND_NULL_HANDLER,
63233 		ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER,
63234 		ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER,
63235 		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
63236 		ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER,
63237 		ZEND_NULL_HANDLER,
63238 		ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER,
63239 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
63240 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
63241 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
63242 		ZEND_NULL_HANDLER,
63243 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
63244 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER,
63245 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
63246 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER,
63247 		ZEND_NULL_HANDLER,
63248 		ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER,
63249 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER,
63250 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
63251 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER,
63252 		ZEND_NULL_HANDLER,
63253 		ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER,
63254 		ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER,
63255 		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
63256 		ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER,
63257 		ZEND_NULL_HANDLER,
63258 		ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER,
63259 		ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER,
63260 		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
63261 		ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER,
63262 		ZEND_NULL_HANDLER,
63263 		ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER,
63264 		ZEND_NULL_HANDLER,
63265 		ZEND_NULL_HANDLER,
63266 		ZEND_NULL_HANDLER,
63267 		ZEND_NULL_HANDLER,
63268 		ZEND_NULL_HANDLER,
63269 		ZEND_NULL_HANDLER,
63270 		ZEND_NULL_HANDLER,
63271 		ZEND_NULL_HANDLER,
63272 		ZEND_NULL_HANDLER,
63273 		ZEND_NULL_HANDLER,
63274 		ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER,
63275 		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
63276 		ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER,
63277 		ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER,
63278 		ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER,
63279 		ZEND_NULL_HANDLER,
63280 		ZEND_NULL_HANDLER,
63281 		ZEND_NULL_HANDLER,
63282 		ZEND_NULL_HANDLER,
63283 		ZEND_NULL_HANDLER,
63284 		ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER,
63285 		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
63286 		ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER,
63287 		ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER,
63288 		ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER,
63289 		ZEND_NULL_HANDLER,
63290 		ZEND_NULL_HANDLER,
63291 		ZEND_NULL_HANDLER,
63292 		ZEND_NULL_HANDLER,
63293 		ZEND_NULL_HANDLER,
63294 		ZEND_NULL_HANDLER,
63295 		ZEND_NULL_HANDLER,
63296 		ZEND_NULL_HANDLER,
63297 		ZEND_NULL_HANDLER,
63298 		ZEND_NULL_HANDLER,
63299 		ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER,
63300 		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
63301 		ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
63302 		ZEND_NULL_HANDLER,
63303 		ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER,
63304 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER,
63305 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
63306 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
63307 		ZEND_NULL_HANDLER,
63308 		ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER,
63309 		ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER,
63310 		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
63311 		ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER,
63312 		ZEND_NULL_HANDLER,
63313 		ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER,
63314 		ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER,
63315 		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
63316 		ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER,
63317 		ZEND_NULL_HANDLER,
63318 		ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER,
63319 		ZEND_NULL_HANDLER,
63320 		ZEND_NULL_HANDLER,
63321 		ZEND_NULL_HANDLER,
63322 		ZEND_NULL_HANDLER,
63323 		ZEND_NULL_HANDLER,
63324 		ZEND_NULL_HANDLER,
63325 		ZEND_NULL_HANDLER,
63326 		ZEND_NULL_HANDLER,
63327 		ZEND_NULL_HANDLER,
63328 		ZEND_NULL_HANDLER,
63329 		ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER,
63330 		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
63331 		ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER,
63332 		ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER,
63333 		ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER,
63334 		ZEND_NULL_HANDLER,
63335 		ZEND_NULL_HANDLER,
63336 		ZEND_NULL_HANDLER,
63337 		ZEND_NULL_HANDLER,
63338 		ZEND_NULL_HANDLER,
63339 		ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER,
63340 		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
63341 		ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER,
63342 		ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER,
63343 		ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER,
63344 		ZEND_NULL_HANDLER,
63345 		ZEND_NULL_HANDLER,
63346 		ZEND_NULL_HANDLER,
63347 		ZEND_NULL_HANDLER,
63348 		ZEND_NULL_HANDLER,
63349 		ZEND_NULL_HANDLER,
63350 		ZEND_NULL_HANDLER,
63351 		ZEND_NULL_HANDLER,
63352 		ZEND_NULL_HANDLER,
63353 		ZEND_NULL_HANDLER,
63354 		ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER,
63355 		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
63356 		ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
63357 		ZEND_NULL_HANDLER,
63358 		ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER,
63359 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER,
63360 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
63361 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
63362 		ZEND_NULL_HANDLER,
63363 		ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER,
63364 		ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER,
63365 		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
63366 		ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER,
63367 		ZEND_NULL_HANDLER,
63368 		ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER,
63369 		ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER,
63370 		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
63371 		ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER,
63372 		ZEND_NULL_HANDLER,
63373 		ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER,
63374 		ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER,
63375 		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
63376 		ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER,
63377 		ZEND_NULL_HANDLER,
63378 		ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER,
63379 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
63380 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
63381 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
63382 		ZEND_NULL_HANDLER,
63383 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
63384 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER,
63385 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
63386 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
63387 		ZEND_NULL_HANDLER,
63388 		ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER,
63389 		ZEND_NULL_HANDLER,
63390 		ZEND_NULL_HANDLER,
63391 		ZEND_NULL_HANDLER,
63392 		ZEND_NULL_HANDLER,
63393 		ZEND_NULL_HANDLER,
63394 		ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER,
63395 		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
63396 		ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER,
63397 		ZEND_NULL_HANDLER,
63398 		ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER,
63399 		ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER,
63400 		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
63401 		ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER,
63402 		ZEND_NULL_HANDLER,
63403 		ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER,
63404 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
63405 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
63406 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
63407 		ZEND_NULL_HANDLER,
63408 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
63409 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER,
63410 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
63411 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER,
63412 		ZEND_NULL_HANDLER,
63413 		ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER,
63414 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER,
63415 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
63416 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER,
63417 		ZEND_NULL_HANDLER,
63418 		ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER,
63419 		ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER,
63420 		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
63421 		ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER,
63422 		ZEND_NULL_HANDLER,
63423 		ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER,
63424 		ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
63425 		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
63426 		ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER,
63427 		ZEND_NULL_HANDLER,
63428 		ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
63429 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
63430 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
63431 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
63432 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER,
63433 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER,
63434 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
63435 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
63436 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
63437 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER,
63438 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER,
63439 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
63440 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
63441 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
63442 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
63443 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER,
63444 		ZEND_NULL_HANDLER,
63445 		ZEND_NULL_HANDLER,
63446 		ZEND_NULL_HANDLER,
63447 		ZEND_NULL_HANDLER,
63448 		ZEND_NULL_HANDLER,
63449 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER,
63450 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
63451 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
63452 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
63453 		ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER,
63454 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER,
63455 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
63456 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
63457 		ZEND_NULL_HANDLER,
63458 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER,
63459 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
63460 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
63461 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
63462 		ZEND_NULL_HANDLER,
63463 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER,
63464 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
63465 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
63466 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
63467 		ZEND_NULL_HANDLER,
63468 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER,
63469 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
63470 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
63471 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
63472 		ZEND_NULL_HANDLER,
63473 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER,
63474 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER,
63475 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
63476 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER,
63477 		ZEND_NULL_HANDLER,
63478 		ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER,
63479 		ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER,
63480 		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
63481 		ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER,
63482 		ZEND_NULL_HANDLER,
63483 		ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER,
63484 		ZEND_NULL_HANDLER,
63485 		ZEND_NULL_HANDLER,
63486 		ZEND_NULL_HANDLER,
63487 		ZEND_NULL_HANDLER,
63488 		ZEND_NULL_HANDLER,
63489 		ZEND_NULL_HANDLER,
63490 		ZEND_NULL_HANDLER,
63491 		ZEND_NULL_HANDLER,
63492 		ZEND_NULL_HANDLER,
63493 		ZEND_NULL_HANDLER,
63494 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER,
63495 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
63496 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER,
63497 		ZEND_NULL_HANDLER,
63498 		ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER,
63499 		ZEND_NULL_HANDLER,
63500 		ZEND_NULL_HANDLER,
63501 		ZEND_NULL_HANDLER,
63502 		ZEND_NULL_HANDLER,
63503 		ZEND_NULL_HANDLER,
63504 		ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER,
63505 		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
63506 		ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER,
63507 		ZEND_NULL_HANDLER,
63508 		ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER,
63509 		ZEND_NULL_HANDLER,
63510 		ZEND_NULL_HANDLER,
63511 		ZEND_NULL_HANDLER,
63512 		ZEND_NULL_HANDLER,
63513 		ZEND_NULL_HANDLER,
63514 		ZEND_NULL_HANDLER,
63515 		ZEND_NULL_HANDLER,
63516 		ZEND_NULL_HANDLER,
63517 		ZEND_NULL_HANDLER,
63518 		ZEND_NULL_HANDLER,
63519 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER,
63520 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
63521 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER,
63522 		ZEND_NULL_HANDLER,
63523 		ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER,
63524 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER,
63525 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
63526 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER,
63527 		ZEND_NULL_HANDLER,
63528 		ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER,
63529 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER,
63530 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
63531 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER,
63532 		ZEND_NULL_HANDLER,
63533 		ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER,
63534 		ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER,
63535 		ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
63536 		ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER,
63537 		ZEND_NULL_HANDLER,
63538 		ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER,
63539 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
63540 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
63541 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
63542 		ZEND_NULL_HANDLER,
63543 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
63544 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
63545 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
63546 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
63547 		ZEND_NULL_HANDLER,
63548 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
63549 		ZEND_NULL_HANDLER,
63550 		ZEND_NULL_HANDLER,
63551 		ZEND_NULL_HANDLER,
63552 		ZEND_NULL_HANDLER,
63553 		ZEND_NULL_HANDLER,
63554 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER,
63555 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
63556 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER,
63557 		ZEND_NULL_HANDLER,
63558 		ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER,
63559 		ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
63560 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
63561 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
63562 		ZEND_NULL_HANDLER,
63563 		ZEND_NULL_HANDLER,
63564 		ZEND_NULL_HANDLER,
63565 		ZEND_NULL_HANDLER,
63566 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_HANDLER,
63567 		ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK_HANDLER,
63568 		ZEND_NULL_HANDLER,
63569 		ZEND_NULL_HANDLER,
63570 		ZEND_EXT_STMT_SPEC_HANDLER,
63571 		ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
63572 		ZEND_EXT_FCALL_END_SPEC_HANDLER,
63573 		ZEND_EXT_NOP_SPEC_HANDLER,
63574 		ZEND_TICKS_SPEC_HANDLER,
63575 		ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST_HANDLER,
63576 		ZEND_NULL_HANDLER,
63577 		ZEND_NULL_HANDLER,
63578 		ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED_HANDLER,
63579 		ZEND_NULL_HANDLER,
63580 		ZEND_CATCH_SPEC_CONST_HANDLER,
63581 		ZEND_THROW_SPEC_CONST_HANDLER,
63582 		ZEND_THROW_SPEC_TMPVAR_HANDLER,
63583 		ZEND_THROW_SPEC_TMPVAR_HANDLER,
63584 		ZEND_NULL_HANDLER,
63585 		ZEND_THROW_SPEC_CV_HANDLER,
63586 		ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER,
63587 		ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
63588 		ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER,
63589 		ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
63590 		ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER,
63591 		ZEND_CLONE_SPEC_CONST_HANDLER,
63592 		ZEND_CLONE_SPEC_TMPVAR_HANDLER,
63593 		ZEND_CLONE_SPEC_TMPVAR_HANDLER,
63594 		ZEND_CLONE_SPEC_UNUSED_HANDLER,
63595 		ZEND_CLONE_SPEC_CV_HANDLER,
63596 		ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
63597 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
63598 		ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
63599 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
63600 		ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
63601 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
63602 		ZEND_NULL_HANDLER,
63603 		ZEND_NULL_HANDLER,
63604 		ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
63605 		ZEND_RETURN_BY_REF_SPEC_OBSERVER_HANDLER,
63606 		ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
63607 		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
63608 		ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
63609 		ZEND_NULL_HANDLER,
63610 		ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER,
63611 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
63612 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
63613 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
63614 		ZEND_NULL_HANDLER,
63615 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
63616 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER,
63617 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
63618 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER,
63619 		ZEND_NULL_HANDLER,
63620 		ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER,
63621 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
63622 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
63623 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
63624 		ZEND_NULL_HANDLER,
63625 		ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
63626 		ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER,
63627 		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
63628 		ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER,
63629 		ZEND_NULL_HANDLER,
63630 		ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER,
63631 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
63632 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
63633 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
63634 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER,
63635 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER,
63636 		ZEND_NULL_HANDLER,
63637 		ZEND_NULL_HANDLER,
63638 		ZEND_NULL_HANDLER,
63639 		ZEND_NULL_HANDLER,
63640 		ZEND_NULL_HANDLER,
63641 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER,
63642 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
63643 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER,
63644 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER,
63645 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER,
63646 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
63647 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
63648 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER,
63649 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER,
63650 		ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
63651 		ZEND_NULL_HANDLER,
63652 		ZEND_NULL_HANDLER,
63653 		ZEND_NULL_HANDLER,
63654 		ZEND_NULL_HANDLER,
63655 		ZEND_NULL_HANDLER,
63656 		ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER,
63657 		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
63658 		ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
63659 		ZEND_NULL_HANDLER,
63660 		ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER,
63661 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER,
63662 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
63663 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER,
63664 		ZEND_NULL_HANDLER,
63665 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER,
63666 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
63667 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
63668 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
63669 		ZEND_NULL_HANDLER,
63670 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
63671 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER,
63672 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
63673 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
63674 		ZEND_NULL_HANDLER,
63675 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER,
63676 		ZEND_NULL_HANDLER,
63677 		ZEND_NULL_HANDLER,
63678 		ZEND_NULL_HANDLER,
63679 		ZEND_NULL_HANDLER,
63680 		ZEND_NULL_HANDLER,
63681 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER,
63682 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
63683 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER,
63684 		ZEND_NULL_HANDLER,
63685 		ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER,
63686 		ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER,
63687 		ZEND_SEND_VAL_EX_SPEC_CONST_CONST_HANDLER,
63688 		ZEND_NULL_HANDLER,
63689 		ZEND_NULL_HANDLER,
63690 		ZEND_NULL_HANDLER,
63691 		ZEND_NULL_HANDLER,
63692 		ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_HANDLER,
63693 		ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK_HANDLER,
63694 		ZEND_NULL_HANDLER,
63695 		ZEND_NULL_HANDLER,
63696 		ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER,
63697 		ZEND_SEND_VAL_EX_SPEC_TMP_CONST_HANDLER,
63698 		ZEND_NULL_HANDLER,
63699 		ZEND_NULL_HANDLER,
63700 		ZEND_NULL_HANDLER,
63701 		ZEND_NULL_HANDLER,
63702 		ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_HANDLER,
63703 		ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK_HANDLER,
63704 		ZEND_NULL_HANDLER,
63705 		ZEND_NULL_HANDLER,
63706 		ZEND_NULL_HANDLER,
63707 		ZEND_NULL_HANDLER,
63708 		ZEND_NULL_HANDLER,
63709 		ZEND_NULL_HANDLER,
63710 		ZEND_NULL_HANDLER,
63711 		ZEND_NULL_HANDLER,
63712 		ZEND_NULL_HANDLER,
63713 		ZEND_NULL_HANDLER,
63714 		ZEND_NULL_HANDLER,
63715 		ZEND_NULL_HANDLER,
63716 		ZEND_NULL_HANDLER,
63717 		ZEND_NULL_HANDLER,
63718 		ZEND_NULL_HANDLER,
63719 		ZEND_NULL_HANDLER,
63720 		ZEND_NULL_HANDLER,
63721 		ZEND_NULL_HANDLER,
63722 		ZEND_NULL_HANDLER,
63723 		ZEND_NULL_HANDLER,
63724 		ZEND_NULL_HANDLER,
63725 		ZEND_NULL_HANDLER,
63726 		ZEND_NULL_HANDLER,
63727 		ZEND_NULL_HANDLER,
63728 		ZEND_NULL_HANDLER,
63729 		ZEND_NULL_HANDLER,
63730 		ZEND_NULL_HANDLER,
63731 		ZEND_NULL_HANDLER,
63732 		ZEND_NULL_HANDLER,
63733 		ZEND_NULL_HANDLER,
63734 		ZEND_NULL_HANDLER,
63735 		ZEND_NULL_HANDLER,
63736 		ZEND_NULL_HANDLER,
63737 		ZEND_NULL_HANDLER,
63738 		ZEND_NULL_HANDLER,
63739 		ZEND_NULL_HANDLER,
63740 		ZEND_NULL_HANDLER,
63741 		ZEND_NULL_HANDLER,
63742 		ZEND_NULL_HANDLER,
63743 		ZEND_NULL_HANDLER,
63744 		ZEND_NULL_HANDLER,
63745 		ZEND_NULL_HANDLER,
63746 		ZEND_SEND_VAR_SPEC_VAR_CONST_HANDLER,
63747 		ZEND_NULL_HANDLER,
63748 		ZEND_NULL_HANDLER,
63749 		ZEND_SEND_VAR_SPEC_VAR_UNUSED_HANDLER,
63750 		ZEND_NULL_HANDLER,
63751 		ZEND_NULL_HANDLER,
63752 		ZEND_NULL_HANDLER,
63753 		ZEND_NULL_HANDLER,
63754 		ZEND_NULL_HANDLER,
63755 		ZEND_NULL_HANDLER,
63756 		ZEND_SEND_VAR_SPEC_CV_CONST_HANDLER,
63757 		ZEND_NULL_HANDLER,
63758 		ZEND_NULL_HANDLER,
63759 		ZEND_SEND_VAR_SPEC_CV_UNUSED_HANDLER,
63760 		ZEND_NULL_HANDLER,
63761 		ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER,
63762 		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
63763 		ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER,
63764 		ZEND_NULL_HANDLER,
63765 		ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER,
63766 		ZEND_SEND_ARRAY_SPEC_HANDLER,
63767 		ZEND_SEND_USER_SPEC_CONST_HANDLER,
63768 		ZEND_SEND_USER_SPEC_TMP_HANDLER,
63769 		ZEND_SEND_USER_SPEC_VAR_HANDLER,
63770 		ZEND_NULL_HANDLER,
63771 		ZEND_SEND_USER_SPEC_CV_HANDLER,
63772 		ZEND_STRLEN_SPEC_CONST_HANDLER,
63773 		ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
63774 		ZEND_STRLEN_SPEC_TMPVAR_HANDLER,
63775 		ZEND_NULL_HANDLER,
63776 		ZEND_STRLEN_SPEC_CV_HANDLER,
63777 		ZEND_DEFINED_SPEC_CONST_HANDLER,
63778 		ZEND_TYPE_CHECK_SPEC_CONST_HANDLER,
63779 		ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
63780 		ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER,
63781 		ZEND_NULL_HANDLER,
63782 		ZEND_TYPE_CHECK_SPEC_CV_HANDLER,
63783 		ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER,
63784 		ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER,
63785 		ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER,
63786 		ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
63787 		ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER,
63788 		ZEND_FE_RESET_RW_SPEC_CONST_HANDLER,
63789 		ZEND_FE_RESET_RW_SPEC_TMP_HANDLER,
63790 		ZEND_FE_RESET_RW_SPEC_VAR_HANDLER,
63791 		ZEND_NULL_HANDLER,
63792 		ZEND_FE_RESET_RW_SPEC_CV_HANDLER,
63793 		ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER,
63794 		ZEND_FE_FREE_SPEC_TMPVAR_HANDLER,
63795 		ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER,
63796 		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
63797 		ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER,
63798 		ZEND_NULL_HANDLER,
63799 		ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER,
63800 		ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER,
63801 		ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER,
63802 		ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER,
63803 		ZEND_DO_ICALL_SPEC_OBSERVER_HANDLER,
63804 		ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER,
63805 		ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER,
63806 		ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
63807 		ZEND_DO_UCALL_SPEC_OBSERVER_HANDLER,
63808 		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER,
63809 		ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER,
63810 		ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER,
63811 		ZEND_DO_FCALL_BY_NAME_SPEC_OBSERVER_HANDLER,
63812 		ZEND_NULL_HANDLER,
63813 		ZEND_NULL_HANDLER,
63814 		ZEND_NULL_HANDLER,
63815 		ZEND_NULL_HANDLER,
63816 		ZEND_NULL_HANDLER,
63817 		ZEND_NULL_HANDLER,
63818 		ZEND_NULL_HANDLER,
63819 		ZEND_NULL_HANDLER,
63820 		ZEND_NULL_HANDLER,
63821 		ZEND_NULL_HANDLER,
63822 		ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER,
63823 		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
63824 		ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
63825 		ZEND_NULL_HANDLER,
63826 		ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER,
63827 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
63828 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
63829 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
63830 		ZEND_NULL_HANDLER,
63831 		ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
63832 		ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER,
63833 		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
63834 		ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
63835 		ZEND_NULL_HANDLER,
63836 		ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER,
63837 		ZEND_NULL_HANDLER,
63838 		ZEND_NULL_HANDLER,
63839 		ZEND_NULL_HANDLER,
63840 		ZEND_NULL_HANDLER,
63841 		ZEND_NULL_HANDLER,
63842 		ZEND_NULL_HANDLER,
63843 		ZEND_NULL_HANDLER,
63844 		ZEND_NULL_HANDLER,
63845 		ZEND_NULL_HANDLER,
63846 		ZEND_NULL_HANDLER,
63847 		ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER,
63848 		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
63849 		ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
63850 		ZEND_NULL_HANDLER,
63851 		ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER,
63852 		ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
63853 		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
63854 		ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
63855 		ZEND_NULL_HANDLER,
63856 		ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
63857 		ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER,
63858 		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
63859 		ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER,
63860 		ZEND_NULL_HANDLER,
63861 		ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER,
63862 		ZEND_ECHO_SPEC_CONST_HANDLER,
63863 		ZEND_ECHO_SPEC_TMPVAR_HANDLER,
63864 		ZEND_ECHO_SPEC_TMPVAR_HANDLER,
63865 		ZEND_NULL_HANDLER,
63866 		ZEND_ECHO_SPEC_CV_HANDLER,
63867 		ZEND_NULL_HANDLER,
63868 		ZEND_NULL_HANDLER,
63869 		ZEND_NULL_HANDLER,
63870 		ZEND_NULL_HANDLER,
63871 		ZEND_NULL_HANDLER,
63872 		ZEND_NULL_HANDLER,
63873 		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
63874 		ZEND_NULL_HANDLER,
63875 		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
63876 		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
63877 		ZEND_NULL_HANDLER,
63878 		ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER,
63879 		ZEND_NULL_HANDLER,
63880 		ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER,
63881 		ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER,
63882 		ZEND_NULL_HANDLER,
63883 		ZEND_NULL_HANDLER,
63884 		ZEND_NULL_HANDLER,
63885 		ZEND_NULL_HANDLER,
63886 		ZEND_NULL_HANDLER,
63887 		ZEND_NULL_HANDLER,
63888 		ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER,
63889 		ZEND_NULL_HANDLER,
63890 		ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER,
63891 		ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER,
63892 		ZEND_NULL_HANDLER,
63893 		ZEND_GENERATOR_CREATE_SPEC_HANDLER,
63894 		ZEND_NULL_HANDLER,
63895 		ZEND_NULL_HANDLER,
63896 		ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER,
63897 		ZEND_NULL_HANDLER,
63898 		ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER,
63899 		ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
63900 		ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_HANDLER,
63901 		ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER,
63902 		ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER,
63903 		ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER,
63904 		ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER,
63905 		ZEND_ADD_ARRAY_UNPACK_SPEC_HANDLER,
63906 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER,
63907 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
63908 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER,
63909 		ZEND_NULL_HANDLER,
63910 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER,
63911 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
63912 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
63913 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
63914 		ZEND_NULL_HANDLER,
63915 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
63916 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER,
63917 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
63918 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
63919 		ZEND_NULL_HANDLER,
63920 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER,
63921 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER,
63922 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
63923 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
63924 		ZEND_NULL_HANDLER,
63925 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER,
63926 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER,
63927 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
63928 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER,
63929 		ZEND_NULL_HANDLER,
63930 		ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER,
63931 		ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
63932 		ZEND_USER_OPCODE_SPEC_HANDLER,
63933 		ZEND_ASSERT_CHECK_SPEC_HANDLER,
63934 		ZEND_JMP_SET_SPEC_CONST_HANDLER,
63935 		ZEND_JMP_SET_SPEC_TMP_HANDLER,
63936 		ZEND_JMP_SET_SPEC_VAR_HANDLER,
63937 		ZEND_NULL_HANDLER,
63938 		ZEND_JMP_SET_SPEC_CV_HANDLER,
63939 		ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER,
63940 		ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER,
63941 		ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER,
63942 		ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER,
63943 		ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
63944 		ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER,
63945 		ZEND_NULL_HANDLER,
63946 		ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER,
63947 		ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER,
63948 		ZEND_NULL_HANDLER,
63949 		ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER,
63950 		ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR_HANDLER,
63951 		ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER,
63952 		ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER,
63953 		ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
63954 		ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER,
63955 		ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
63956 		ZEND_YIELD_SPEC_CONST_CONST_HANDLER,
63957 		ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
63958 		ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
63959 		ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER,
63960 		ZEND_YIELD_SPEC_CONST_CV_HANDLER,
63961 		ZEND_YIELD_SPEC_TMP_CONST_HANDLER,
63962 		ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER,
63963 		ZEND_YIELD_SPEC_TMP_TMPVAR_HANDLER,
63964 		ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER,
63965 		ZEND_YIELD_SPEC_TMP_CV_HANDLER,
63966 		ZEND_YIELD_SPEC_VAR_CONST_HANDLER,
63967 		ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER,
63968 		ZEND_YIELD_SPEC_VAR_TMPVAR_HANDLER,
63969 		ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER,
63970 		ZEND_YIELD_SPEC_VAR_CV_HANDLER,
63971 		ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER,
63972 		ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER,
63973 		ZEND_YIELD_SPEC_UNUSED_TMPVAR_HANDLER,
63974 		ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER,
63975 		ZEND_YIELD_SPEC_UNUSED_CV_HANDLER,
63976 		ZEND_YIELD_SPEC_CV_CONST_HANDLER,
63977 		ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER,
63978 		ZEND_YIELD_SPEC_CV_TMPVAR_HANDLER,
63979 		ZEND_YIELD_SPEC_CV_UNUSED_HANDLER,
63980 		ZEND_YIELD_SPEC_CV_CV_HANDLER,
63981 		ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
63982 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
63983 		ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
63984 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
63985 		ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
63986 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
63987 		ZEND_NULL_HANDLER,
63988 		ZEND_NULL_HANDLER,
63989 		ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
63990 		ZEND_GENERATOR_RETURN_SPEC_OBSERVER_HANDLER,
63991 		ZEND_FAST_CALL_SPEC_HANDLER,
63992 		ZEND_FAST_RET_SPEC_HANDLER,
63993 		ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER,
63994 		ZEND_SEND_UNPACK_SPEC_HANDLER,
63995 		ZEND_YIELD_FROM_SPEC_CONST_HANDLER,
63996 		ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER,
63997 		ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER,
63998 		ZEND_NULL_HANDLER,
63999 		ZEND_YIELD_FROM_SPEC_CV_HANDLER,
64000 		ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED_HANDLER,
64001 		ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER,
64002 		ZEND_COALESCE_SPEC_CONST_HANDLER,
64003 		ZEND_COALESCE_SPEC_TMP_HANDLER,
64004 		ZEND_COALESCE_SPEC_VAR_HANDLER,
64005 		ZEND_NULL_HANDLER,
64006 		ZEND_COALESCE_SPEC_CV_HANDLER,
64007 		ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER,
64008 		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
64009 		ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER,
64010 		ZEND_NULL_HANDLER,
64011 		ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER,
64012 		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
64013 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
64014 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
64015 		ZEND_NULL_HANDLER,
64016 		ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
64017 		ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER,
64018 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
64019 		ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER,
64020 		ZEND_NULL_HANDLER,
64021 		ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER,
64022 		ZEND_NULL_HANDLER,
64023 		ZEND_NULL_HANDLER,
64024 		ZEND_NULL_HANDLER,
64025 		ZEND_NULL_HANDLER,
64026 		ZEND_NULL_HANDLER,
64027 		ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER,
64028 		ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
64029 		ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER,
64030 		ZEND_NULL_HANDLER,
64031 		ZEND_SPACESHIP_SPEC_CV_CV_HANDLER,
64032 		ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
64033 		ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER,
64034 		ZEND_NULL_HANDLER,
64035 		ZEND_NULL_HANDLER,
64036 		ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
64037 		ZEND_NULL_HANDLER,
64038 		ZEND_FETCH_STATIC_PROP_R_SPEC_HANDLER,
64039 		ZEND_FETCH_STATIC_PROP_W_SPEC_HANDLER,
64040 		ZEND_FETCH_STATIC_PROP_RW_SPEC_HANDLER,
64041 		ZEND_FETCH_STATIC_PROP_IS_SPEC_HANDLER,
64042 		ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_HANDLER,
64043 		ZEND_FETCH_STATIC_PROP_UNSET_SPEC_HANDLER,
64044 		ZEND_UNSET_STATIC_PROP_SPEC_HANDLER,
64045 		ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_HANDLER,
64046 		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER,
64047 		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER,
64048 		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER,
64049 		ZEND_NULL_HANDLER,
64050 		ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_TMPVARCV_HANDLER,
64051 		ZEND_NULL_HANDLER,
64052 		ZEND_NULL_HANDLER,
64053 		ZEND_NULL_HANDLER,
64054 		ZEND_NULL_HANDLER,
64055 		ZEND_NULL_HANDLER,
64056 		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER,
64057 		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER,
64058 		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER,
64059 		ZEND_NULL_HANDLER,
64060 		ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_TMPVARCV_HANDLER,
64061 		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
64062 		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER,
64063 		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER,
64064 		ZEND_NULL_HANDLER,
64065 		ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_TMPVARCV_HANDLER,
64066 		ZEND_NULL_HANDLER,
64067 		ZEND_NULL_HANDLER,
64068 		ZEND_NULL_HANDLER,
64069 		ZEND_NULL_HANDLER,
64070 		ZEND_NULL_HANDLER,
64071 		ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER,
64072 		ZEND_BIND_STATIC_SPEC_CV_HANDLER,
64073 		ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER,
64074 		ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
64075 		ZEND_NULL_HANDLER,
64076 		ZEND_NULL_HANDLER,
64077 		ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
64078 		ZEND_NULL_HANDLER,
64079 		ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER,
64080 		ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER,
64081 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64082 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64083 		ZEND_NULL_HANDLER,
64084 		ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64085 		ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER,
64086 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
64087 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
64088 		ZEND_NULL_HANDLER,
64089 		ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER,
64090 		ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER,
64091 		ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER,
64092 		ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER,
64093 		ZEND_NULL_HANDLER,
64094 		ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER,
64095 		ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER,
64096 		ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
64097 		ZEND_COUNT_SPEC_TMPVAR_UNUSED_HANDLER,
64098 		ZEND_NULL_HANDLER,
64099 		ZEND_COUNT_SPEC_CV_UNUSED_HANDLER,
64100 		ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER,
64101 		ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
64102 		ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED_HANDLER,
64103 		ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
64104 		ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER,
64105 		ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER,
64106 		ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER,
64107 		ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER,
64108 		ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER,
64109 		ZEND_NULL_HANDLER,
64110 		ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER,
64111 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST_HANDLER,
64112 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
64113 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR_HANDLER,
64114 		ZEND_NULL_HANDLER,
64115 		ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV_HANDLER,
64116 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
64117 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
64118 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
64119 		ZEND_NULL_HANDLER,
64120 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
64121 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST_HANDLER,
64122 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
64123 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR_HANDLER,
64124 		ZEND_NULL_HANDLER,
64125 		ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV_HANDLER,
64126 		ZEND_NULL_HANDLER,
64127 		ZEND_NULL_HANDLER,
64128 		ZEND_NULL_HANDLER,
64129 		ZEND_NULL_HANDLER,
64130 		ZEND_NULL_HANDLER,
64131 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST_HANDLER,
64132 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
64133 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR_HANDLER,
64134 		ZEND_NULL_HANDLER,
64135 		ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV_HANDLER,
64136 		ZEND_MATCH_SPEC_CONST_CONST_HANDLER,
64137 		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
64138 		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
64139 		ZEND_NULL_HANDLER,
64140 		ZEND_MATCH_SPEC_TMPVARCV_CONST_HANDLER,
64141 		ZEND_NULL_HANDLER,
64142 		ZEND_NULL_HANDLER,
64143 		ZEND_NULL_HANDLER,
64144 		ZEND_NULL_HANDLER,
64145 		ZEND_NULL_HANDLER,
64146 		ZEND_CASE_STRICT_SPEC_TMP_CONST_HANDLER,
64147 		ZEND_CASE_STRICT_SPEC_TMP_TMP_HANDLER,
64148 		ZEND_CASE_STRICT_SPEC_TMP_VAR_HANDLER,
64149 		ZEND_NULL_HANDLER,
64150 		ZEND_CASE_STRICT_SPEC_TMP_CV_HANDLER,
64151 		ZEND_CASE_STRICT_SPEC_VAR_CONST_HANDLER,
64152 		ZEND_CASE_STRICT_SPEC_VAR_TMP_HANDLER,
64153 		ZEND_CASE_STRICT_SPEC_VAR_VAR_HANDLER,
64154 		ZEND_NULL_HANDLER,
64155 		ZEND_CASE_STRICT_SPEC_VAR_CV_HANDLER,
64156 		ZEND_NULL_HANDLER,
64157 		ZEND_NULL_HANDLER,
64158 		ZEND_NULL_HANDLER,
64159 		ZEND_NULL_HANDLER,
64160 		ZEND_NULL_HANDLER,
64161 		ZEND_NULL_HANDLER,
64162 		ZEND_NULL_HANDLER,
64163 		ZEND_NULL_HANDLER,
64164 		ZEND_NULL_HANDLER,
64165 		ZEND_NULL_HANDLER,
64166 		ZEND_MATCH_ERROR_SPEC_CONST_UNUSED_HANDLER,
64167 		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
64168 		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
64169 		ZEND_NULL_HANDLER,
64170 		ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED_HANDLER,
64171 		ZEND_JMP_NULL_SPEC_CONST_HANDLER,
64172 		ZEND_JMP_NULL_SPEC_TMP_HANDLER,
64173 		ZEND_JMP_NULL_SPEC_VAR_HANDLER,
64174 		ZEND_NULL_HANDLER,
64175 		ZEND_JMP_NULL_SPEC_CV_HANDLER,
64176 		ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED_HANDLER,
64177 		ZEND_FETCH_GLOBALS_SPEC_UNUSED_UNUSED_HANDLER,
64178 		ZEND_VERIFY_NEVER_TYPE_SPEC_UNUSED_UNUSED_HANDLER,
64179 		ZEND_CALLABLE_CONVERT_SPEC_UNUSED_UNUSED_HANDLER,
64180 		ZEND_BIND_INIT_STATIC_OR_JMP_SPEC_CV_HANDLER,
64181 		ZEND_RECV_NOTYPE_SPEC_HANDLER,
64182 		ZEND_NULL_HANDLER,
64183 		ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_HANDLER,
64184 		ZEND_COUNT_ARRAY_SPEC_TMPVAR_UNUSED_HANDLER,
64185 		ZEND_NULL_HANDLER,
64186 		ZEND_COUNT_ARRAY_SPEC_CV_UNUSED_HANDLER,
64187 		ZEND_JMP_FORWARD_SPEC_HANDLER,
64188 		ZEND_NULL_HANDLER,
64189 		ZEND_NULL_HANDLER,
64190 		ZEND_NULL_HANDLER,
64191 		ZEND_NULL_HANDLER,
64192 		ZEND_NULL_HANDLER,
64193 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
64194 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64195 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64196 		ZEND_NULL_HANDLER,
64197 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64198 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
64199 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64200 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64201 		ZEND_NULL_HANDLER,
64202 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64203 		ZEND_NULL_HANDLER,
64204 		ZEND_NULL_HANDLER,
64205 		ZEND_NULL_HANDLER,
64206 		ZEND_NULL_HANDLER,
64207 		ZEND_NULL_HANDLER,
64208 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
64209 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64210 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64211 		ZEND_NULL_HANDLER,
64212 		ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64213 		ZEND_NULL_HANDLER,
64214 		ZEND_NULL_HANDLER,
64215 		ZEND_NULL_HANDLER,
64216 		ZEND_NULL_HANDLER,
64217 		ZEND_NULL_HANDLER,
64218 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64219 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64220 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64221 		ZEND_NULL_HANDLER,
64222 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64223 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64224 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64225 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64226 		ZEND_NULL_HANDLER,
64227 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64228 		ZEND_NULL_HANDLER,
64229 		ZEND_NULL_HANDLER,
64230 		ZEND_NULL_HANDLER,
64231 		ZEND_NULL_HANDLER,
64232 		ZEND_NULL_HANDLER,
64233 		ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64234 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64235 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64236 		ZEND_NULL_HANDLER,
64237 		ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64238 		ZEND_NULL_HANDLER,
64239 		ZEND_NULL_HANDLER,
64240 		ZEND_NULL_HANDLER,
64241 		ZEND_NULL_HANDLER,
64242 		ZEND_NULL_HANDLER,
64243 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64244 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64245 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64246 		ZEND_NULL_HANDLER,
64247 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64248 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64249 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64250 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64251 		ZEND_NULL_HANDLER,
64252 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64253 		ZEND_NULL_HANDLER,
64254 		ZEND_NULL_HANDLER,
64255 		ZEND_NULL_HANDLER,
64256 		ZEND_NULL_HANDLER,
64257 		ZEND_NULL_HANDLER,
64258 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64259 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64260 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64261 		ZEND_NULL_HANDLER,
64262 		ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64263 		ZEND_NULL_HANDLER,
64264 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
64265 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
64266 		ZEND_NULL_HANDLER,
64267 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER,
64268 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
64269 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64270 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64271 		ZEND_NULL_HANDLER,
64272 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64273 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
64274 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64275 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64276 		ZEND_NULL_HANDLER,
64277 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64278 		ZEND_NULL_HANDLER,
64279 		ZEND_NULL_HANDLER,
64280 		ZEND_NULL_HANDLER,
64281 		ZEND_NULL_HANDLER,
64282 		ZEND_NULL_HANDLER,
64283 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
64284 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64285 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64286 		ZEND_NULL_HANDLER,
64287 		ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64288 		ZEND_NULL_HANDLER,
64289 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
64290 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
64291 		ZEND_NULL_HANDLER,
64292 		ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER,
64293 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64294 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64295 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64296 		ZEND_NULL_HANDLER,
64297 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64298 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64299 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64300 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64301 		ZEND_NULL_HANDLER,
64302 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64303 		ZEND_NULL_HANDLER,
64304 		ZEND_NULL_HANDLER,
64305 		ZEND_NULL_HANDLER,
64306 		ZEND_NULL_HANDLER,
64307 		ZEND_NULL_HANDLER,
64308 		ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64309 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64310 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64311 		ZEND_NULL_HANDLER,
64312 		ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64313 		ZEND_NULL_HANDLER,
64314 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
64315 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
64316 		ZEND_NULL_HANDLER,
64317 		ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
64318 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64319 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64320 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64321 		ZEND_NULL_HANDLER,
64322 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64323 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64324 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64325 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64326 		ZEND_NULL_HANDLER,
64327 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64328 		ZEND_NULL_HANDLER,
64329 		ZEND_NULL_HANDLER,
64330 		ZEND_NULL_HANDLER,
64331 		ZEND_NULL_HANDLER,
64332 		ZEND_NULL_HANDLER,
64333 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64334 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64335 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64336 		ZEND_NULL_HANDLER,
64337 		ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64338 		ZEND_NULL_HANDLER,
64339 		ZEND_NULL_HANDLER,
64340 		ZEND_NULL_HANDLER,
64341 		ZEND_NULL_HANDLER,
64342 		ZEND_NULL_HANDLER,
64343 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
64344 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64345 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64346 		ZEND_NULL_HANDLER,
64347 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64348 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
64349 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64350 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64351 		ZEND_NULL_HANDLER,
64352 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64353 		ZEND_NULL_HANDLER,
64354 		ZEND_NULL_HANDLER,
64355 		ZEND_NULL_HANDLER,
64356 		ZEND_NULL_HANDLER,
64357 		ZEND_NULL_HANDLER,
64358 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER,
64359 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64360 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64361 		ZEND_NULL_HANDLER,
64362 		ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64363 		ZEND_NULL_HANDLER,
64364 		ZEND_NULL_HANDLER,
64365 		ZEND_NULL_HANDLER,
64366 		ZEND_NULL_HANDLER,
64367 		ZEND_NULL_HANDLER,
64368 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64369 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64370 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64371 		ZEND_NULL_HANDLER,
64372 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64373 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64374 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64375 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64376 		ZEND_NULL_HANDLER,
64377 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64378 		ZEND_NULL_HANDLER,
64379 		ZEND_NULL_HANDLER,
64380 		ZEND_NULL_HANDLER,
64381 		ZEND_NULL_HANDLER,
64382 		ZEND_NULL_HANDLER,
64383 		ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64384 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64385 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64386 		ZEND_NULL_HANDLER,
64387 		ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64388 		ZEND_NULL_HANDLER,
64389 		ZEND_NULL_HANDLER,
64390 		ZEND_NULL_HANDLER,
64391 		ZEND_NULL_HANDLER,
64392 		ZEND_NULL_HANDLER,
64393 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64394 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64395 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64396 		ZEND_NULL_HANDLER,
64397 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64398 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64399 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64400 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64401 		ZEND_NULL_HANDLER,
64402 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64403 		ZEND_NULL_HANDLER,
64404 		ZEND_NULL_HANDLER,
64405 		ZEND_NULL_HANDLER,
64406 		ZEND_NULL_HANDLER,
64407 		ZEND_NULL_HANDLER,
64408 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64409 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64410 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64411 		ZEND_NULL_HANDLER,
64412 		ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64413 		ZEND_NULL_HANDLER,
64414 		ZEND_NULL_HANDLER,
64415 		ZEND_NULL_HANDLER,
64416 		ZEND_NULL_HANDLER,
64417 		ZEND_NULL_HANDLER,
64418 		ZEND_NULL_HANDLER,
64419 		ZEND_NULL_HANDLER,
64420 		ZEND_NULL_HANDLER,
64421 		ZEND_NULL_HANDLER,
64422 		ZEND_NULL_HANDLER,
64423 		ZEND_NULL_HANDLER,
64424 		ZEND_NULL_HANDLER,
64425 		ZEND_NULL_HANDLER,
64426 		ZEND_NULL_HANDLER,
64427 		ZEND_NULL_HANDLER,
64428 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64429 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64430 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64431 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64432 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64433 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64434 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64435 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64436 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64437 		ZEND_NULL_HANDLER,
64438 		ZEND_NULL_HANDLER,
64439 		ZEND_NULL_HANDLER,
64440 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64441 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64442 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64443 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64444 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64445 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64446 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64447 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64448 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64449 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64450 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64451 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64452 		ZEND_NULL_HANDLER,
64453 		ZEND_NULL_HANDLER,
64454 		ZEND_NULL_HANDLER,
64455 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64456 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64457 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64458 		ZEND_NULL_HANDLER,
64459 		ZEND_NULL_HANDLER,
64460 		ZEND_NULL_HANDLER,
64461 		ZEND_NULL_HANDLER,
64462 		ZEND_NULL_HANDLER,
64463 		ZEND_NULL_HANDLER,
64464 		ZEND_NULL_HANDLER,
64465 		ZEND_NULL_HANDLER,
64466 		ZEND_NULL_HANDLER,
64467 		ZEND_NULL_HANDLER,
64468 		ZEND_NULL_HANDLER,
64469 		ZEND_NULL_HANDLER,
64470 		ZEND_NULL_HANDLER,
64471 		ZEND_NULL_HANDLER,
64472 		ZEND_NULL_HANDLER,
64473 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64474 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64475 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64476 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64477 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64478 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64479 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64480 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64481 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64482 		ZEND_NULL_HANDLER,
64483 		ZEND_NULL_HANDLER,
64484 		ZEND_NULL_HANDLER,
64485 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64486 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64487 		ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64488 		ZEND_NULL_HANDLER,
64489 		ZEND_NULL_HANDLER,
64490 		ZEND_NULL_HANDLER,
64491 		ZEND_NULL_HANDLER,
64492 		ZEND_NULL_HANDLER,
64493 		ZEND_NULL_HANDLER,
64494 		ZEND_NULL_HANDLER,
64495 		ZEND_NULL_HANDLER,
64496 		ZEND_NULL_HANDLER,
64497 		ZEND_NULL_HANDLER,
64498 		ZEND_NULL_HANDLER,
64499 		ZEND_NULL_HANDLER,
64500 		ZEND_NULL_HANDLER,
64501 		ZEND_NULL_HANDLER,
64502 		ZEND_NULL_HANDLER,
64503 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64504 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64505 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64506 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64507 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64508 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64509 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64510 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64511 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64512 		ZEND_NULL_HANDLER,
64513 		ZEND_NULL_HANDLER,
64514 		ZEND_NULL_HANDLER,
64515 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64516 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64517 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64518 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64519 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64520 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64521 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64522 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64523 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64524 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64525 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64526 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64527 		ZEND_NULL_HANDLER,
64528 		ZEND_NULL_HANDLER,
64529 		ZEND_NULL_HANDLER,
64530 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64531 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64532 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64533 		ZEND_NULL_HANDLER,
64534 		ZEND_NULL_HANDLER,
64535 		ZEND_NULL_HANDLER,
64536 		ZEND_NULL_HANDLER,
64537 		ZEND_NULL_HANDLER,
64538 		ZEND_NULL_HANDLER,
64539 		ZEND_NULL_HANDLER,
64540 		ZEND_NULL_HANDLER,
64541 		ZEND_NULL_HANDLER,
64542 		ZEND_NULL_HANDLER,
64543 		ZEND_NULL_HANDLER,
64544 		ZEND_NULL_HANDLER,
64545 		ZEND_NULL_HANDLER,
64546 		ZEND_NULL_HANDLER,
64547 		ZEND_NULL_HANDLER,
64548 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64549 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64550 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64551 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64552 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64553 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64554 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64555 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64556 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64557 		ZEND_NULL_HANDLER,
64558 		ZEND_NULL_HANDLER,
64559 		ZEND_NULL_HANDLER,
64560 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64561 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64562 		ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64563 		ZEND_NULL_HANDLER,
64564 		ZEND_NULL_HANDLER,
64565 		ZEND_NULL_HANDLER,
64566 		ZEND_NULL_HANDLER,
64567 		ZEND_NULL_HANDLER,
64568 		ZEND_NULL_HANDLER,
64569 		ZEND_NULL_HANDLER,
64570 		ZEND_NULL_HANDLER,
64571 		ZEND_NULL_HANDLER,
64572 		ZEND_NULL_HANDLER,
64573 		ZEND_NULL_HANDLER,
64574 		ZEND_NULL_HANDLER,
64575 		ZEND_NULL_HANDLER,
64576 		ZEND_NULL_HANDLER,
64577 		ZEND_NULL_HANDLER,
64578 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64579 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64580 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64581 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64582 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64583 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64584 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64585 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64586 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64587 		ZEND_NULL_HANDLER,
64588 		ZEND_NULL_HANDLER,
64589 		ZEND_NULL_HANDLER,
64590 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64591 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64592 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64593 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64594 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64595 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64596 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64597 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64598 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64599 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64600 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64601 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64602 		ZEND_NULL_HANDLER,
64603 		ZEND_NULL_HANDLER,
64604 		ZEND_NULL_HANDLER,
64605 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64606 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64607 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64608 		ZEND_NULL_HANDLER,
64609 		ZEND_NULL_HANDLER,
64610 		ZEND_NULL_HANDLER,
64611 		ZEND_NULL_HANDLER,
64612 		ZEND_NULL_HANDLER,
64613 		ZEND_NULL_HANDLER,
64614 		ZEND_NULL_HANDLER,
64615 		ZEND_NULL_HANDLER,
64616 		ZEND_NULL_HANDLER,
64617 		ZEND_NULL_HANDLER,
64618 		ZEND_NULL_HANDLER,
64619 		ZEND_NULL_HANDLER,
64620 		ZEND_NULL_HANDLER,
64621 		ZEND_NULL_HANDLER,
64622 		ZEND_NULL_HANDLER,
64623 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64624 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64625 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64626 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64627 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64628 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64629 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64630 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64631 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64632 		ZEND_NULL_HANDLER,
64633 		ZEND_NULL_HANDLER,
64634 		ZEND_NULL_HANDLER,
64635 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64636 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64637 		ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64638 		ZEND_NULL_HANDLER,
64639 		ZEND_NULL_HANDLER,
64640 		ZEND_NULL_HANDLER,
64641 		ZEND_NULL_HANDLER,
64642 		ZEND_NULL_HANDLER,
64643 		ZEND_NULL_HANDLER,
64644 		ZEND_NULL_HANDLER,
64645 		ZEND_NULL_HANDLER,
64646 		ZEND_NULL_HANDLER,
64647 		ZEND_NULL_HANDLER,
64648 		ZEND_NULL_HANDLER,
64649 		ZEND_NULL_HANDLER,
64650 		ZEND_NULL_HANDLER,
64651 		ZEND_NULL_HANDLER,
64652 		ZEND_NULL_HANDLER,
64653 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64654 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64655 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64656 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64657 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64658 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64659 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64660 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64661 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64662 		ZEND_NULL_HANDLER,
64663 		ZEND_NULL_HANDLER,
64664 		ZEND_NULL_HANDLER,
64665 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64666 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64667 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64668 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64669 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64670 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64671 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64672 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64673 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64674 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64675 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64676 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64677 		ZEND_NULL_HANDLER,
64678 		ZEND_NULL_HANDLER,
64679 		ZEND_NULL_HANDLER,
64680 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64681 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64682 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64683 		ZEND_NULL_HANDLER,
64684 		ZEND_NULL_HANDLER,
64685 		ZEND_NULL_HANDLER,
64686 		ZEND_NULL_HANDLER,
64687 		ZEND_NULL_HANDLER,
64688 		ZEND_NULL_HANDLER,
64689 		ZEND_NULL_HANDLER,
64690 		ZEND_NULL_HANDLER,
64691 		ZEND_NULL_HANDLER,
64692 		ZEND_NULL_HANDLER,
64693 		ZEND_NULL_HANDLER,
64694 		ZEND_NULL_HANDLER,
64695 		ZEND_NULL_HANDLER,
64696 		ZEND_NULL_HANDLER,
64697 		ZEND_NULL_HANDLER,
64698 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64699 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64700 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64701 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64702 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64703 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64704 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64705 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64706 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64707 		ZEND_NULL_HANDLER,
64708 		ZEND_NULL_HANDLER,
64709 		ZEND_NULL_HANDLER,
64710 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64711 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64712 		ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64713 		ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER,
64714 		ZEND_NULL_HANDLER,
64715 		ZEND_NULL_HANDLER,
64716 		ZEND_NULL_HANDLER,
64717 		ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER,
64718 		ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST_HANDLER,
64719 		ZEND_NULL_HANDLER,
64720 		ZEND_NULL_HANDLER,
64721 		ZEND_NULL_HANDLER,
64722 		ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV_HANDLER,
64723 		ZEND_NULL_HANDLER,
64724 		ZEND_NULL_HANDLER,
64725 		ZEND_NULL_HANDLER,
64726 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
64727 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
64728 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
64729 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
64730 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
64731 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
64732 		ZEND_NULL_HANDLER,
64733 		ZEND_NULL_HANDLER,
64734 		ZEND_NULL_HANDLER,
64735 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER,
64736 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
64737 		ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
64738 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64739 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64740 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64741 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64742 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64743 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64744 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64745 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64746 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64747 		ZEND_NULL_HANDLER,
64748 		ZEND_NULL_HANDLER,
64749 		ZEND_NULL_HANDLER,
64750 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64751 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64752 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64753 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64754 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64755 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64756 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64757 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64758 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64759 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64760 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64761 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64762 		ZEND_NULL_HANDLER,
64763 		ZEND_NULL_HANDLER,
64764 		ZEND_NULL_HANDLER,
64765 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64766 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64767 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64768 		ZEND_NULL_HANDLER,
64769 		ZEND_NULL_HANDLER,
64770 		ZEND_NULL_HANDLER,
64771 		ZEND_NULL_HANDLER,
64772 		ZEND_NULL_HANDLER,
64773 		ZEND_NULL_HANDLER,
64774 		ZEND_NULL_HANDLER,
64775 		ZEND_NULL_HANDLER,
64776 		ZEND_NULL_HANDLER,
64777 		ZEND_NULL_HANDLER,
64778 		ZEND_NULL_HANDLER,
64779 		ZEND_NULL_HANDLER,
64780 		ZEND_NULL_HANDLER,
64781 		ZEND_NULL_HANDLER,
64782 		ZEND_NULL_HANDLER,
64783 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64784 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64785 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64786 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64787 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64788 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64789 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64790 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64791 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64792 		ZEND_NULL_HANDLER,
64793 		ZEND_NULL_HANDLER,
64794 		ZEND_NULL_HANDLER,
64795 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64796 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64797 		ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64798 		ZEND_NULL_HANDLER,
64799 		ZEND_NULL_HANDLER,
64800 		ZEND_NULL_HANDLER,
64801 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
64802 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
64803 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
64804 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
64805 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
64806 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
64807 		ZEND_NULL_HANDLER,
64808 		ZEND_NULL_HANDLER,
64809 		ZEND_NULL_HANDLER,
64810 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
64811 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
64812 		ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
64813 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64814 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64815 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64816 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64817 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64818 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64819 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64820 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64821 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64822 		ZEND_NULL_HANDLER,
64823 		ZEND_NULL_HANDLER,
64824 		ZEND_NULL_HANDLER,
64825 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64826 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64827 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64828 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64829 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64830 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64831 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64832 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64833 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64834 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64835 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64836 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64837 		ZEND_NULL_HANDLER,
64838 		ZEND_NULL_HANDLER,
64839 		ZEND_NULL_HANDLER,
64840 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64841 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64842 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64843 		ZEND_NULL_HANDLER,
64844 		ZEND_NULL_HANDLER,
64845 		ZEND_NULL_HANDLER,
64846 		ZEND_NULL_HANDLER,
64847 		ZEND_NULL_HANDLER,
64848 		ZEND_NULL_HANDLER,
64849 		ZEND_NULL_HANDLER,
64850 		ZEND_NULL_HANDLER,
64851 		ZEND_NULL_HANDLER,
64852 		ZEND_NULL_HANDLER,
64853 		ZEND_NULL_HANDLER,
64854 		ZEND_NULL_HANDLER,
64855 		ZEND_NULL_HANDLER,
64856 		ZEND_NULL_HANDLER,
64857 		ZEND_NULL_HANDLER,
64858 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64859 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64860 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64861 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64862 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64863 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64864 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64865 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64866 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64867 		ZEND_NULL_HANDLER,
64868 		ZEND_NULL_HANDLER,
64869 		ZEND_NULL_HANDLER,
64870 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64871 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64872 		ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64873 		ZEND_NULL_HANDLER,
64874 		ZEND_NULL_HANDLER,
64875 		ZEND_NULL_HANDLER,
64876 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
64877 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
64878 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
64879 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
64880 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
64881 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
64882 		ZEND_NULL_HANDLER,
64883 		ZEND_NULL_HANDLER,
64884 		ZEND_NULL_HANDLER,
64885 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER,
64886 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
64887 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
64888 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64889 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64890 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64891 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64892 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64893 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64894 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64895 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64896 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64897 		ZEND_NULL_HANDLER,
64898 		ZEND_NULL_HANDLER,
64899 		ZEND_NULL_HANDLER,
64900 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64901 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64902 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64903 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64904 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64905 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64906 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64907 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64908 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64909 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64910 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64911 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64912 		ZEND_NULL_HANDLER,
64913 		ZEND_NULL_HANDLER,
64914 		ZEND_NULL_HANDLER,
64915 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64916 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64917 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64918 		ZEND_NULL_HANDLER,
64919 		ZEND_NULL_HANDLER,
64920 		ZEND_NULL_HANDLER,
64921 		ZEND_NULL_HANDLER,
64922 		ZEND_NULL_HANDLER,
64923 		ZEND_NULL_HANDLER,
64924 		ZEND_NULL_HANDLER,
64925 		ZEND_NULL_HANDLER,
64926 		ZEND_NULL_HANDLER,
64927 		ZEND_NULL_HANDLER,
64928 		ZEND_NULL_HANDLER,
64929 		ZEND_NULL_HANDLER,
64930 		ZEND_NULL_HANDLER,
64931 		ZEND_NULL_HANDLER,
64932 		ZEND_NULL_HANDLER,
64933 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER,
64934 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64935 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64936 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64937 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64938 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64939 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64940 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64941 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64942 		ZEND_NULL_HANDLER,
64943 		ZEND_NULL_HANDLER,
64944 		ZEND_NULL_HANDLER,
64945 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64946 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64947 		ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64948 		ZEND_NULL_HANDLER,
64949 		ZEND_NULL_HANDLER,
64950 		ZEND_NULL_HANDLER,
64951 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
64952 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
64953 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
64954 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
64955 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
64956 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
64957 		ZEND_NULL_HANDLER,
64958 		ZEND_NULL_HANDLER,
64959 		ZEND_NULL_HANDLER,
64960 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER,
64961 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER,
64962 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER,
64963 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64964 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64965 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64966 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64967 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64968 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64969 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64970 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64971 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64972 		ZEND_NULL_HANDLER,
64973 		ZEND_NULL_HANDLER,
64974 		ZEND_NULL_HANDLER,
64975 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64976 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64977 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64978 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
64979 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
64980 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
64981 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64982 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64983 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64984 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64985 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64986 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64987 		ZEND_NULL_HANDLER,
64988 		ZEND_NULL_HANDLER,
64989 		ZEND_NULL_HANDLER,
64990 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
64991 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
64992 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
64993 		ZEND_NULL_HANDLER,
64994 		ZEND_NULL_HANDLER,
64995 		ZEND_NULL_HANDLER,
64996 		ZEND_NULL_HANDLER,
64997 		ZEND_NULL_HANDLER,
64998 		ZEND_NULL_HANDLER,
64999 		ZEND_NULL_HANDLER,
65000 		ZEND_NULL_HANDLER,
65001 		ZEND_NULL_HANDLER,
65002 		ZEND_NULL_HANDLER,
65003 		ZEND_NULL_HANDLER,
65004 		ZEND_NULL_HANDLER,
65005 		ZEND_NULL_HANDLER,
65006 		ZEND_NULL_HANDLER,
65007 		ZEND_NULL_HANDLER,
65008 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER,
65009 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER,
65010 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER,
65011 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65012 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65013 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65014 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65015 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65016 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65017 		ZEND_NULL_HANDLER,
65018 		ZEND_NULL_HANDLER,
65019 		ZEND_NULL_HANDLER,
65020 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER,
65021 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER,
65022 		ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER,
65023 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
65024 		ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
65025 		ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
65026 		ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
65027 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER,
65028 		ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER,
65029 		ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER,
65030 		ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER,
65031 		ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
65032 		ZEND_POST_INC_LONG_SPEC_CV_HANDLER,
65033 		ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER,
65034 		ZEND_POST_DEC_LONG_SPEC_CV_HANDLER,
65035 		ZEND_QM_ASSIGN_LONG_SPEC_CONST_HANDLER,
65036 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
65037 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
65038 		ZEND_NULL_HANDLER,
65039 		ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV_HANDLER,
65040 		ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER,
65041 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
65042 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
65043 		ZEND_NULL_HANDLER,
65044 		ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER,
65045 		ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER,
65046 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
65047 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
65048 		ZEND_NULL_HANDLER,
65049 		ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER,
65050 		ZEND_NULL_HANDLER,
65051 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
65052 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
65053 		ZEND_NULL_HANDLER,
65054 		ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER,
65055 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
65056 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
65057 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
65058 		ZEND_NULL_HANDLER,
65059 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
65060 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER,
65061 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
65062 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
65063 		ZEND_NULL_HANDLER,
65064 		ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER,
65065 		ZEND_NULL_HANDLER,
65066 		ZEND_NULL_HANDLER,
65067 		ZEND_NULL_HANDLER,
65068 		ZEND_NULL_HANDLER,
65069 		ZEND_NULL_HANDLER,
65070 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER,
65071 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
65072 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
65073 		ZEND_NULL_HANDLER,
65074 		ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER,
65075 		ZEND_NULL_HANDLER,
65076 		ZEND_NULL_HANDLER,
65077 		ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER,
65078 		ZEND_NULL_HANDLER,
65079 		ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER,
65080 		ZEND_NULL_HANDLER,
65081 		ZEND_NULL_HANDLER,
65082 		ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED_HANDLER,
65083 		ZEND_NULL_HANDLER,
65084 		ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED_HANDLER,
65085 		ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER,
65086 		ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER,
65087 		ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER,
65088 		ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER,
65089 		ZEND_NULL_HANDLER
65090 	};
65091 	static const uint32_t specs[] = {
65092 		0,
65093 		1 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65094 		26 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65095 		51 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
65096 		76 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65097 		101 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65098 		126 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65099 		151 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65100 		176 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65101 		201 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
65102 		226 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
65103 		251 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
65104 		276 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65105 		301 | SPEC_RULE_OP1,
65106 		306 | SPEC_RULE_OP1,
65107 		311 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
65108 		336 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
65109 		361 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE,
65110 		386 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
65111 		461 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE,
65112 		536 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
65113 		611 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH,
65114 		686 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_RETVAL,
65115 		736 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
65116 		861 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
65117 		986 | SPEC_RULE_OP_DATA,
65118 		991 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65119 		1016 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65120 		1041 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65121 		1066,
65122 		1067 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65123 		1092 | SPEC_RULE_OP1,
65124 		1097 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA,
65125 		1222,
65126 		1223 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
65127 		1233 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL,
65128 		1243 | SPEC_RULE_OP1,
65129 		1248 | SPEC_RULE_OP1,
65130 		1253,
65131 		1253,
65132 		1254,
65133 		1254,
65134 		1255,
65135 		1256 | SPEC_RULE_OP1,
65136 		1261 | SPEC_RULE_OP1,
65137 		3476,
65138 		1266 | SPEC_RULE_OP1,
65139 		1271 | SPEC_RULE_OP1,
65140 		1276 | SPEC_RULE_OP2,
65141 		1281,
65142 		1282 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
65143 		1292 | SPEC_RULE_OP1,
65144 		1297 | SPEC_RULE_OP1,
65145 		1302 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65146 		1327 | SPEC_RULE_OP2,
65147 		1332 | SPEC_RULE_OP2,
65148 		1337 | SPEC_RULE_OP2,
65149 		1342,
65150 		1343,
65151 		1344,
65152 		1345 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
65153 		1349,
65154 		1350 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
65155 		1360,
65156 		1361,
65157 		1362 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65158 		1387 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
65159 		1437 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65160 		1462 | SPEC_RULE_OP1,
65161 		1467,
65162 		1468,
65163 		1469 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65164 		1494 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65165 		1519 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
65166 		1529 | SPEC_RULE_OP1,
65167 		1534 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65168 		1559 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65169 		1584 | SPEC_RULE_OP1,
65170 		1589,
65171 		1590,
65172 		1591 | SPEC_RULE_OP1,
65173 		1596 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65174 		1621 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65175 		1646 | SPEC_RULE_OP1,
65176 		1651 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65177 		1676 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65178 		1701 | SPEC_RULE_OP1,
65179 		1706 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65180 		1731 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65181 		1756 | SPEC_RULE_OP1,
65182 		1761 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65183 		1786 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65184 		1811 | SPEC_RULE_OP1,
65185 		1816 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65186 		1841 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65187 		1866 | SPEC_RULE_OP1,
65188 		1871 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65189 		1896 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65190 		1921 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65191 		1946,
65192 		1947 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
65193 		1957,
65194 		1958,
65195 		1959,
65196 		1960,
65197 		1961,
65198 		1962 | SPEC_RULE_OP2,
65199 		1967,
65200 		1968 | SPEC_RULE_OP1,
65201 		1973 | SPEC_RULE_OP2,
65202 		1978 | SPEC_RULE_OP1,
65203 		1983 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
65204 		1993 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65205 		2018 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65206 		2043 | SPEC_RULE_OP1,
65207 		2048 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65208 		2073 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
65209 		2123 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65210 		2148 | SPEC_RULE_OP2,
65211 		2153,
65212 		2154 | SPEC_RULE_OP1,
65213 		2159 | SPEC_RULE_OP1,
65214 		2164,
65215 		2165 | SPEC_RULE_OP1,
65216 		2170 | SPEC_RULE_OP1,
65217 		2175 | SPEC_RULE_OP1,
65218 		2180,
65219 		2181,
65220 		2182 | SPEC_RULE_OP2,
65221 		2187 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
65222 		2191 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
65223 		2195 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
65224 		2199 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65225 		2199 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65226 		2224 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65227 		2224 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65228 		2249 | SPEC_RULE_OP1,
65229 		2254,
65230 		2255 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65231 		2280,
65232 		2281 | SPEC_RULE_OP1,
65233 		2286,
65234 		2287,
65235 		2288,
65236 		2289,
65237 		2290,
65238 		2291,
65239 		2292,
65240 		2293 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65241 		2318,
65242 		2319,
65243 		2320,
65244 		2321 | SPEC_RULE_OP1,
65245 		2326,
65246 		2327 | SPEC_RULE_ISSET,
65247 		2329 | SPEC_RULE_OP2,
65248 		2334,
65249 		2335 | SPEC_RULE_OP1,
65250 		2340 | SPEC_RULE_OBSERVER,
65251 		2342,
65252 		2343 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65253 		2368 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
65254 		2378,
65255 		2379,
65256 		2380,
65257 		2381,
65258 		2382 | SPEC_RULE_OP1,
65259 		2387,
65260 		2388,
65261 		2389 | SPEC_RULE_OP1,
65262 		2394 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65263 		2419,
65264 		2420 | SPEC_RULE_OP1,
65265 		2425,
65266 		2426,
65267 		2427,
65268 		2428,
65269 		2429,
65270 		2430,
65271 		2431,
65272 		2432,
65273 		2433 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65274 		2458,
65275 		2459,
65276 		2460,
65277 		2461 | SPEC_RULE_OP2,
65278 		2466,
65279 		2467 | SPEC_RULE_OP1,
65280 		2472 | SPEC_RULE_OP1,
65281 		2477 | SPEC_RULE_OP1,
65282 		2482 | SPEC_RULE_OP1,
65283 		2487 | SPEC_RULE_OP1,
65284 		2492,
65285 		2493 | SPEC_RULE_OP1,
65286 		2498 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65287 		2523 | SPEC_RULE_OP1,
65288 		2528 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
65289 		2553 | SPEC_RULE_OP1,
65290 		2558 | SPEC_RULE_OP1,
65291 		2563,
65292 		2564,
65293 		2565,
65294 		2566,
65295 		2567,
65296 		3476,
65297 		3476,
65298 		3476,
65299 		3476,
65300 		3476,
65301 		3476,
65302 		3476,
65303 		3476,
65304 		3476,
65305 		3476,
65306 		3476,
65307 		3476,
65308 		3476,
65309 		3476,
65310 		3476,
65311 		3476,
65312 		3476,
65313 		3476,
65314 		3476,
65315 		3476,
65316 		3476,
65317 		3476,
65318 		3476,
65319 		3476,
65320 		3476,
65321 		3476,
65322 		3476,
65323 		3476,
65324 		3476,
65325 		3476,
65326 		3476,
65327 		3476,
65328 		3476,
65329 		3476,
65330 		3476,
65331 		3476,
65332 		3476,
65333 		3476,
65334 		3476,
65335 		3476,
65336 		3476,
65337 		3476,
65338 		3476,
65339 		3476,
65340 		3476,
65341 		3476,
65342 		3476,
65343 		3476,
65344 		3476,
65345 		3476,
65346 		3476,
65347 		3476,
65348 	};
65349 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
65350 	zend_opcode_handler_funcs = labels;
65351 	zend_spec_handlers = specs;
65352 	execute_ex(NULL);
65353 #else
65354 	zend_opcode_handlers = labels;
65355 	zend_handlers_count = sizeof(labels) / sizeof(void*);
65356 	zend_spec_handlers = specs;
65357 #endif
65358 	VM_TRACE_START();
65359 }
65360 
65361 static HashTable *zend_handlers_table = NULL;
65362 
65363 void zend_vm_dtor(void)
65364 {
65365 	VM_TRACE_END();
65366 	if (zend_handlers_table) {
65367 		zend_hash_destroy(zend_handlers_table);
65368 		free(zend_handlers_table);
65369 		zend_handlers_table = NULL;
65370 	}
65371 }
65372 
65373 static void init_opcode_serialiser(void)
65374 {
65375 	int i;
65376 	zval tmp;
65377 
65378 	zend_handlers_table = malloc(sizeof(HashTable));
65379 	zend_hash_init(zend_handlers_table, zend_handlers_count, NULL, NULL, 1);
65380 	zend_hash_real_init(zend_handlers_table, 0);
65381 	Z_TYPE_INFO(tmp) = IS_LONG;
65382 	for (i = 0; i < zend_handlers_count; i++) {
65383 		Z_LVAL(tmp) = i;
65384 		zend_hash_index_add(zend_handlers_table, (zend_long)(uintptr_t)zend_opcode_handlers[i], &tmp);
65385 	}
65386 }
65387 
65388 ZEND_API void ZEND_FASTCALL zend_serialize_opcode_handler(zend_op *op)
65389 {
65390 	zval *zv;
65391 
65392 	if (!zend_handlers_table) {
65393 		init_opcode_serialiser();
65394 	}
65395 	zv = zend_hash_index_find(zend_handlers_table, (zend_long)(uintptr_t)op->handler);
65396 	ZEND_ASSERT(zv != NULL);
65397 	op->handler = (const void *)(uintptr_t)Z_LVAL_P(zv);
65398 }
65399 
65400 ZEND_API void ZEND_FASTCALL zend_deserialize_opcode_handler(zend_op *op)
65401 {
65402 	op->handler = zend_opcode_handlers[(uintptr_t)op->handler];
65403 }
65404 
65405 ZEND_API const void* ZEND_FASTCALL zend_get_opcode_handler_func(const zend_op *op)
65406 {
65407 #if ZEND_VM_KIND == ZEND_VM_KIND_CALL
65408 	return op->handler;
65409 #elif ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
65410 	zval *zv;
65411 
65412 	if (!zend_handlers_table) {
65413 		init_opcode_serialiser();
65414 	}
65415 	zv = zend_hash_index_find(zend_handlers_table, (zend_long)(uintptr_t)op->handler);
65416 	ZEND_ASSERT(zv != NULL);
65417 	return zend_opcode_handler_funcs[Z_LVAL_P(zv)];
65418 #else
65419 	return NULL;
65420 #endif
65421 }
65422 
65423 ZEND_API const zend_op *zend_get_halt_op(void)
65424 {
65425 #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
65426 	return &hybrid_halt_op;
65427 #else
65428 	return NULL;
65429 #endif
65430 }
65431 
65432 ZEND_API int zend_vm_kind(void)
65433 {
65434 	return ZEND_VM_KIND;
65435 }
65436 
65437 static uint32_t ZEND_FASTCALL zend_vm_get_opcode_handler_idx(uint32_t spec, const zend_op* op)
65438 {
65439 	static const int zend_vm_decode[] = {
65440 		_UNUSED_CODE, /* 0 = IS_UNUSED  */
65441 		_CONST_CODE,  /* 1 = IS_CONST   */
65442 		_TMP_CODE,    /* 2 = IS_TMP_VAR */
65443 		_UNUSED_CODE, /* 3              */
65444 		_VAR_CODE,    /* 4 = IS_VAR     */
65445 		_UNUSED_CODE, /* 5              */
65446 		_UNUSED_CODE, /* 6              */
65447 		_UNUSED_CODE, /* 7              */
65448 		_CV_CODE      /* 8 = IS_CV      */
65449 	};
65450 	uint32_t offset = 0;
65451 	if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type];
65452 	if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type];
65453 	if (spec & SPEC_EXTRA_MASK) {
65454 		if (spec & SPEC_RULE_RETVAL) {
65455 			offset = offset * 2 + (op->result_type != IS_UNUSED);
65456 			if ((spec & SPEC_RULE_OBSERVER) && ZEND_OBSERVER_ENABLED) {
65457 				offset += 2;
65458 			}
65459 		} else if (spec & SPEC_RULE_QUICK_ARG) {
65460 			offset = offset * 2 + (op->op2.num <= MAX_ARG_FLAG_NUM);
65461 		} else if (spec & SPEC_RULE_OP_DATA) {
65462 			offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type];
65463 		} else if (spec & SPEC_RULE_ISSET) {
65464 			offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY);
65465 		} else if (spec & SPEC_RULE_SMART_BRANCH) {
65466 			offset = offset * 3;
65467 			if (op->result_type == (IS_SMART_BRANCH_JMPZ|IS_TMP_VAR)) {
65468 				offset += 1;
65469 			} else if (op->result_type == (IS_SMART_BRANCH_JMPNZ|IS_TMP_VAR)) {
65470 				offset += 2;
65471 			}
65472 		} else if (spec & SPEC_RULE_OBSERVER) {
65473 			offset = offset * 2;
65474 			if (ZEND_OBSERVER_ENABLED) {
65475 				offset += 1;
65476 			}
65477 		}
65478 	}
65479 	return (spec & SPEC_START_MASK) + offset;
65480 }
65481 
65482 #if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID) || !ZEND_VM_SPEC
65483 static const void *zend_vm_get_opcode_handler(uint8_t opcode, const zend_op* op)
65484 {
65485 	return zend_opcode_handlers[zend_vm_get_opcode_handler_idx(zend_spec_handlers[opcode], op)];
65486 }
65487 #endif
65488 
65489 #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID
65490 static const void *zend_vm_get_opcode_handler_func(uint8_t opcode, const zend_op* op)
65491 {
65492 	uint32_t spec = zend_spec_handlers[opcode];
65493 	return zend_opcode_handler_funcs[zend_vm_get_opcode_handler_idx(spec, op)];
65494 }
65495 
65496 #endif
65497 
65498 ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* op)
65499 {
65500 	uint8_t opcode = zend_user_opcodes[op->opcode];
65501 
65502 	if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
65503 		if (op->op1_type < op->op2_type) {
65504 			zend_swap_operands(op);
65505 		}
65506 	}
65507 	op->handler = zend_opcode_handlers[zend_vm_get_opcode_handler_idx(zend_spec_handlers[opcode], op)];
65508 }
65509 
65510 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)
65511 {
65512 	uint8_t opcode = zend_user_opcodes[op->opcode];
65513 	uint32_t spec = zend_spec_handlers[opcode];
65514 	switch (opcode) {
65515 		case ZEND_ADD:
65516 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
65517 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65518 					break;
65519 				}
65520 				spec = 2575 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
65521 				if (op->op1_type < op->op2_type) {
65522 					zend_swap_operands(op);
65523 				}
65524 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
65525 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65526 					break;
65527 				}
65528 				spec = 2600 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
65529 				if (op->op1_type < op->op2_type) {
65530 					zend_swap_operands(op);
65531 				}
65532 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
65533 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65534 					break;
65535 				}
65536 				spec = 2625 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
65537 				if (op->op1_type < op->op2_type) {
65538 					zend_swap_operands(op);
65539 				}
65540 			}
65541 			break;
65542 		case ZEND_SUB:
65543 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
65544 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65545 					break;
65546 				}
65547 				spec = 2650 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
65548 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
65549 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65550 					break;
65551 				}
65552 				spec = 2675 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
65553 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
65554 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65555 					break;
65556 				}
65557 				spec = 2700 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
65558 			}
65559 			break;
65560 		case ZEND_MUL:
65561 			if (op->op1_type < op->op2_type) {
65562 				zend_swap_operands(op);
65563 			}
65564 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
65565 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65566 					break;
65567 				}
65568 				spec = 2725 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
65569 			} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
65570 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65571 					break;
65572 				}
65573 				spec = 2750 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
65574 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
65575 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65576 					break;
65577 				}
65578 				spec = 2775 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
65579 			}
65580 			break;
65581 		case ZEND_IS_IDENTICAL:
65582 			if (op->op1_type < op->op2_type) {
65583 				zend_swap_operands(op);
65584 			}
65585 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
65586 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65587 					break;
65588 				}
65589 				spec = 2800 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
65590 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
65591 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65592 					break;
65593 				}
65594 				spec = 2875 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
65595 			} 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))) {
65596 				spec = 3100 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
65597 			}
65598 			break;
65599 		case ZEND_IS_NOT_IDENTICAL:
65600 			if (op->op1_type < op->op2_type) {
65601 				zend_swap_operands(op);
65602 			}
65603 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
65604 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65605 					break;
65606 				}
65607 				spec = 2950 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
65608 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
65609 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65610 					break;
65611 				}
65612 				spec = 3025 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
65613 			} 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))) {
65614 				spec = 3105 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
65615 			}
65616 			break;
65617 		case ZEND_IS_EQUAL:
65618 			if (op->op1_type < op->op2_type) {
65619 				zend_swap_operands(op);
65620 			}
65621 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
65622 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65623 					break;
65624 				}
65625 				spec = 2800 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
65626 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
65627 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65628 					break;
65629 				}
65630 				spec = 2875 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
65631 			}
65632 			break;
65633 		case ZEND_IS_NOT_EQUAL:
65634 			if (op->op1_type < op->op2_type) {
65635 				zend_swap_operands(op);
65636 			}
65637 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
65638 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65639 					break;
65640 				}
65641 				spec = 2950 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
65642 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
65643 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65644 					break;
65645 				}
65646 				spec = 3025 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
65647 			}
65648 			break;
65649 		case ZEND_IS_SMALLER:
65650 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
65651 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65652 					break;
65653 				}
65654 				spec = 3110 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
65655 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
65656 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65657 					break;
65658 				}
65659 				spec = 3185 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
65660 			}
65661 			break;
65662 		case ZEND_IS_SMALLER_OR_EQUAL:
65663 			if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
65664 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65665 					break;
65666 				}
65667 				spec = 3260 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
65668 			} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
65669 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65670 					break;
65671 				}
65672 				spec = 3335 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
65673 			}
65674 			break;
65675 		case ZEND_QM_ASSIGN:
65676 			if (op1_info == MAY_BE_LONG) {
65677 				spec = 3422 | SPEC_RULE_OP1;
65678 			} else if (op1_info == MAY_BE_DOUBLE) {
65679 				spec = 3427 | SPEC_RULE_OP1;
65680 			} 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))))) {
65681 				spec = 3432 | SPEC_RULE_OP1;
65682 			}
65683 			break;
65684 		case ZEND_PRE_INC:
65685 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
65686 				spec = 3410 | SPEC_RULE_RETVAL;
65687 			} else if (op1_info == MAY_BE_LONG) {
65688 				spec = 3412 | SPEC_RULE_RETVAL;
65689 			}
65690 			break;
65691 		case ZEND_PRE_DEC:
65692 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
65693 				spec = 3414 | SPEC_RULE_RETVAL;
65694 			} else if (op1_info == MAY_BE_LONG) {
65695 				spec = 3416 | SPEC_RULE_RETVAL;
65696 			}
65697 			break;
65698 		case ZEND_POST_INC:
65699 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
65700 				spec = 3418;
65701 			} else if (op1_info == MAY_BE_LONG) {
65702 				spec = 3419;
65703 			}
65704 			break;
65705 		case ZEND_POST_DEC:
65706 			if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
65707 				spec = 3420;
65708 			} else if (op1_info == MAY_BE_LONG) {
65709 				spec = 3421;
65710 			}
65711 			break;
65712 		case ZEND_JMP:
65713 			if (OP_JMP_ADDR(op, op->op1) > op) {
65714 				spec = 2574;
65715 			}
65716 			break;
65717 		case ZEND_RECV:
65718 			if (op->op2.num == MAY_BE_ANY) {
65719 				spec = 2568;
65720 			}
65721 			break;
65722 		case ZEND_SEND_VAL:
65723 			if (op->op1_type == IS_CONST && op->op2_type == IS_UNUSED && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
65724 				spec = 3472;
65725 			}
65726 			break;
65727 		case ZEND_SEND_VAR_EX:
65728 			if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
65729 				spec = 3467 | SPEC_RULE_OP1;
65730 			}
65731 			break;
65732 		case ZEND_FE_FETCH_R:
65733 			if (op->op2_type == IS_CV && (op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) {
65734 				spec = 3474 | SPEC_RULE_RETVAL;
65735 			}
65736 			break;
65737 		case ZEND_FETCH_DIM_R:
65738 			if (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) {
65739 				if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
65740 					break;
65741 				}
65742 				spec = 3437 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
65743 			}
65744 			break;
65745 		case ZEND_SEND_VAL_EX:
65746 			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))) {
65747 				spec = 3473;
65748 			}
65749 			break;
65750 		case ZEND_SEND_VAR:
65751 			if (op->op2_type == IS_UNUSED && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
65752 				spec = 3462 | SPEC_RULE_OP1;
65753 			}
65754 			break;
65755 		case ZEND_COUNT:
65756 			if ((op1_info & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_REF)) == MAY_BE_ARRAY) {
65757 				spec = 2569 | SPEC_RULE_OP1;
65758 			}
65759 			break;
65760 		case ZEND_BW_OR:
65761 		case ZEND_BW_AND:
65762 		case ZEND_BW_XOR:
65763 		case ZEND_BOOL_XOR:
65764 			if (op->op1_type < op->op2_type) {
65765 				zend_swap_operands(op);
65766 			}
65767 			break;
65768 		case ZEND_USER_OPCODE:
65769 			if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) {
65770 				if (op->op1_type < op->op2_type) {
65771 					zend_swap_operands(op);
65772 				}
65773 			}
65774 			break;
65775 		default:
65776 			break;
65777 	}
65778 	op->handler = zend_opcode_handlers[zend_vm_get_opcode_handler_idx(spec, op)];
65779 }
65780 
65781 ZEND_API int ZEND_FASTCALL zend_vm_call_opcode_handler(zend_execute_data* ex)
65782 {
65783 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
65784 	opcode_handler_t handler;
65785 #endif
65786 	int ret;
65787 #ifdef ZEND_VM_IP_GLOBAL_REG
65788 	const zend_op *orig_opline = opline;
65789 #endif
65790 #ifdef ZEND_VM_FP_GLOBAL_REG
65791 	zend_execute_data *orig_execute_data = execute_data;
65792 	execute_data = ex;
65793 #else
65794 	zend_execute_data *execute_data = ex;
65795 #endif
65796 
65797 	LOAD_OPLINE();
65798 #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG)
65799 #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
65800 	handler = (opcode_handler_t)zend_vm_get_opcode_handler_func(zend_user_opcodes[opline->opcode], opline);
65801 	handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
65802 	if (EXPECTED(opline != &hybrid_halt_op)) {
65803 #else
65804 	((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
65805 	if (EXPECTED(opline)) {
65806 #endif
65807 		ret = execute_data != ex ? (int)(execute_data->prev_execute_data != ex) + 1 : 0;
65808 		SAVE_OPLINE();
65809 	} else {
65810 		ret = -1;
65811 	}
65812 #else
65813 	ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
65814 	SAVE_OPLINE();
65815 #endif
65816 #ifdef ZEND_VM_FP_GLOBAL_REG
65817 	execute_data = orig_execute_data;
65818 #endif
65819 #ifdef ZEND_VM_IP_GLOBAL_REG
65820 	opline = orig_opline;
65821 #endif
65822 	return ret;
65823 }
65824 
65825