summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLevi Morrison <levim@php.net>2020-09-01 09:57:49 -0600
committerLevi Morrison <levim@php.net>2020-09-01 09:59:59 -0600
commit66c3e900e2072c2f4bb8d112f7ecb73380e19102 (patch)
treec24979ff83bf2bece2e881687d6aed312b36510c
parentbd8e0a96a57e4d2d409c2b8c5270e2b38d8c255a (diff)
downloadphp-git-66c3e900e2072c2f4bb8d112f7ecb73380e19102.tar.gz
Add zend_observer API
Closes GH-5857. Co-authored-by: Nikita Popov <nikita.ppv@gmail.com> Co-authored-by: Sammy Powers <sammyk@datadoghq.com>
-rw-r--r--Zend/zend.c4
-rw-r--r--Zend/zend_execute.c1
-rw-r--r--Zend/zend_execute_API.c4
-rw-r--r--Zend/zend_generators.c21
-rw-r--r--Zend/zend_observer.c160
-rw-r--r--Zend/zend_observer.h115
-rw-r--r--Zend/zend_vm_def.h33
-rw-r--r--Zend/zend_vm_execute.h2371
-rw-r--r--Zend/zend_vm_execute.skl4
-rwxr-xr-xZend/zend_vm_gen.php37
-rw-r--r--Zend/zend_vm_handlers.h2398
-rw-r--r--configure.ac3
-rw-r--r--ext/opcache/ZendAccelerator.c10
-rw-r--r--ext/zend_test/test.c151
-rw-r--r--ext/zend_test/tests/observer.inc8
-rw-r--r--ext/zend_test/tests/observer_basic_01.phpt55
-rw-r--r--ext/zend_test/tests/observer_basic_02.phpt59
-rw-r--r--ext/zend_test/tests/observer_basic_03.phpt36
-rw-r--r--ext/zend_test/tests/observer_basic_04.phpt30
-rw-r--r--ext/zend_test/tests/observer_basic_05.phpt32
-rw-r--r--ext/zend_test/tests/observer_closure_01.phpt49
-rw-r--r--ext/zend_test/tests/observer_eval_01.phpt21
-rw-r--r--ext/zend_test/tests/observer_exception_01.phpt46
-rw-r--r--ext/zend_test/tests/observer_generator_01.phpt47
-rw-r--r--ext/zend_test/tests/observer_generator_02.phpt50
-rw-r--r--ext/zend_test/tests/observer_generator_03.phpt68
-rw-r--r--ext/zend_test/tests/observer_generator_04.phpt64
-rw-r--r--ext/zend_test/tests/observer_jit_01.phpt25
-rw-r--r--ext/zend_test/tests/observer_magic_01.phpt45
-rw-r--r--ext/zend_test/tests/observer_zend_call_function_01.phpt36
-rw-r--r--main/main.c4
-rw-r--r--win32/build/config.w322
32 files changed, 4604 insertions, 1385 deletions
diff --git a/Zend/zend.c b/Zend/zend.c
index 2e2ff03213..88530faa06 100644
--- a/Zend/zend.c
+++ b/Zend/zend.c
@@ -33,6 +33,7 @@
#include "zend_smart_string.h"
#include "zend_cpuinfo.h"
#include "zend_attributes.h"
+#include "zend_observer.h"
static size_t global_map_ptr_last = 0;
@@ -1205,6 +1206,7 @@ ZEND_API void zend_activate(void) /* {{{ */
if (CG(map_ptr_last)) {
memset(ZEND_MAP_PTR_REAL_BASE(CG(map_ptr_base)), 0, CG(map_ptr_last) * sizeof(void*));
}
+ zend_observer_activate();
}
/* }}} */
@@ -1221,6 +1223,8 @@ ZEND_API void zend_deactivate(void) /* {{{ */
/* we're no longer executing anything */
EG(current_execute_data) = NULL;
+ zend_observer_deactivate();
+
zend_try {
shutdown_scanner();
} zend_end_try();
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index bf93e89d60..4f2fbb7425 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -40,6 +40,7 @@
#include "zend_inheritance.h"
#include "zend_type_info.h"
#include "zend_smart_str.h"
+#include "zend_observer.h"
/* Virtual current working directory support */
#include "zend_virtual_cwd.h"
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index 6286b77f18..b8c3f11974 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -35,6 +35,7 @@
#include "zend_float.h"
#include "zend_weakrefs.h"
#include "zend_inheritance.h"
+#include "zend_observer.h"
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
@@ -869,6 +870,9 @@ cleanup_args:
uint32_t orig_jit_trace_num = EG(jit_trace_num);
zend_init_func_execute_data(call, &func->op_array, fci->retval);
+ if (ZEND_OBSERVER_ENABLED) {
+ zend_observer_maybe_fcall_call_begin(call);
+ }
zend_execute_ex(call);
EG(jit_trace_num) = orig_jit_trace_num;
EG(opline_before_exception) = current_opline_before_exception;
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index 3fbac811ac..c890669a70 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -24,6 +24,7 @@
#include "zend_generators.h"
#include "zend_closures.h"
#include "zend_generators_arginfo.h"
+#include "zend_observer.h"
ZEND_API zend_class_entry *zend_ce_generator;
ZEND_API zend_class_entry *zend_ce_ClosedGeneratorException;
@@ -774,7 +775,25 @@ try_again:
/* Resume execution */
generator->flags |= ZEND_GENERATOR_CURRENTLY_RUNNING;
- zend_execute_ex(generator->execute_data);
+ if (!ZEND_OBSERVER_ENABLED) {
+ zend_execute_ex(generator->execute_data);
+ } else {
+ zend_op_array *op_array = &generator->execute_data->func->op_array;
+ void *observer_handlers = ZEND_OBSERVER_HANDLERS(op_array);
+ if (!observer_handlers) {
+ zend_observer_fcall_install((zend_function *)op_array);
+ observer_handlers = ZEND_OBSERVER_HANDLERS(op_array);
+ }
+ ZEND_ASSERT(observer_handlers);
+ if (observer_handlers != ZEND_OBSERVER_NOT_OBSERVED) {
+ zend_observe_fcall_begin(observer_handlers, generator->execute_data);
+ }
+ zend_execute_ex(generator->execute_data);
+ if (generator->execute_data) {
+ /* On the final return, this will be called from ZEND_GENERATOR_RETURN */
+ zend_observer_maybe_fcall_call_end(generator->execute_data, &generator->value);
+ }
+ }
generator->flags &= ~ZEND_GENERATOR_CURRENTLY_RUNNING;
generator->frozen_call_stack = NULL;
diff --git a/Zend/zend_observer.c b/Zend/zend_observer.c
new file mode 100644
index 0000000000..033551c6e9
--- /dev/null
+++ b/Zend/zend_observer.c
@@ -0,0 +1,160 @@
+/*
+ +----------------------------------------------------------------------+
+ | Zend Engine |
+ +----------------------------------------------------------------------+
+ | Copyright (c) Zend Technologies Ltd. (http://www.zend.com) |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 2.00 of the Zend license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.zend.com/license/2_00.txt. |
+ | If you did not receive a copy of the Zend license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@zend.com so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Levi Morrison <levim@php.net> |
+ | Sammy Kaye Powers <sammyk@php.net> |
+ +----------------------------------------------------------------------+
+*/
+
+#include "zend_observer.h"
+
+#include "zend_extensions.h"
+#include "zend_llist.h"
+#include "zend_vm.h"
+
+zend_llist zend_observers_fcall_list;
+int zend_observer_fcall_op_array_extension = -1;
+
+ZEND_TLS zend_arena *fcall_handlers_arena = NULL;
+
+ZEND_API extern inline void zend_observer_maybe_fcall_call_begin(
+ zend_execute_data *execute_data);
+ZEND_API extern inline void zend_observer_maybe_fcall_call_end(
+ zend_execute_data *execute_data,
+ zval *return_value);
+
+// Call during minit/startup ONLY
+ZEND_API void zend_observer_fcall_register(zend_observer_fcall_init init) {
+ /* We don't want to get an extension handle unless an ext installs an observer */
+ if (!ZEND_OBSERVER_ENABLED) {
+ zend_observer_fcall_op_array_extension =
+ zend_get_op_array_extension_handle();
+
+ /* ZEND_CALL_TRAMPOLINE has SPEC(OBSERVER) but zend_init_call_trampoline_op()
+ * is called before any extensions have registered as an observer. So we
+ * adjust the offset to the observed handler when we know we need to observe. */
+ ZEND_VM_SET_OPCODE_HANDLER(&EG(call_trampoline_op));
+
+ /* ZEND_HANDLE_EXCEPTION also has SPEC(OBSERVER) and no observer extensions
+ * exist when zend_init_exception_op() is called. */
+ ZEND_VM_SET_OPCODE_HANDLER(EG(exception_op));
+ ZEND_VM_SET_OPCODE_HANDLER(EG(exception_op)+1);
+ ZEND_VM_SET_OPCODE_HANDLER(EG(exception_op)+2);
+ }
+ zend_llist_add_element(&zend_observers_fcall_list, &init);
+}
+
+// Called by engine before MINITs
+ZEND_API void zend_observer_startup(void) {
+ zend_llist_init(&zend_observers_fcall_list, sizeof(zend_observer_fcall_init), NULL, 1);
+}
+
+ZEND_API void zend_observer_activate(void) {
+ if (ZEND_OBSERVER_ENABLED) {
+ fcall_handlers_arena = zend_arena_create(4096);
+ }
+}
+
+ZEND_API void zend_observer_deactivate(void) {
+ if (fcall_handlers_arena) {
+ zend_arena_destroy(fcall_handlers_arena);
+ }
+}
+
+ZEND_API void zend_observer_shutdown(void) {
+ zend_llist_destroy(&zend_observers_fcall_list);
+}
+
+ZEND_API void zend_observer_fcall_install(zend_function *function) {
+ zend_llist_element *element;
+ zend_llist *list = &zend_observers_fcall_list;
+ zend_op_array *op_array = &function->op_array;
+
+ if (fcall_handlers_arena == NULL) {
+ return;
+ }
+
+ ZEND_ASSERT(function->type != ZEND_INTERNAL_FUNCTION);
+
+ zend_llist handlers_list;
+ zend_llist_init(&handlers_list, sizeof(zend_observer_fcall), NULL, 0);
+ for (element = list->head; element; element = element->next) {
+ zend_observer_fcall_init init;
+ memcpy(&init, element->data, sizeof init);
+ zend_observer_fcall handlers = init(function);
+ if (handlers.begin || handlers.end) {
+ zend_llist_add_element(&handlers_list, &handlers);
+ }
+ }
+
+ ZEND_ASSERT(RUN_TIME_CACHE(op_array));
+ void *ext;
+ if (handlers_list.count) {
+ size_t size = sizeof(zend_observer_fcall_cache) + (handlers_list.count - 1) * sizeof(zend_observer_fcall);
+ zend_observer_fcall_cache *cache = zend_arena_alloc(&fcall_handlers_arena, size);
+ zend_observer_fcall *handler = cache->handlers;
+ for (element = handlers_list.head; element; element = element->next) {
+ memcpy(handler++, element->data, sizeof *handler);
+ }
+ cache->end = handler;
+ ext = cache;
+ } else {
+ ext = ZEND_OBSERVER_NOT_OBSERVED;
+ }
+
+ ZEND_OBSERVER_HANDLERS(op_array) = ext;
+ zend_llist_destroy(&handlers_list);
+}
+
+ZEND_API void zend_observe_fcall_begin(
+ zend_observer_fcall_cache *cache,
+ zend_execute_data *execute_data)
+{
+ zend_observer_fcall *handler, *end = cache->end;
+ for (handler = cache->handlers; handler != end; ++handler) {
+ if (handler->begin) {
+ handler->begin(execute_data);
+ }
+ }
+}
+
+ZEND_API void zend_observer_fcall_call_end_helper(
+ zend_execute_data *execute_data,
+ zval *return_value)
+{
+ zend_function *func = execute_data->func;
+ ZEND_ASSUME(ZEND_OBSERVABLE_FN(func->common.fn_flags));
+ void *observer_handlers = ZEND_OBSERVER_HANDLERS(&func->op_array);
+ // TODO: Fix exceptions from generators
+ // ZEND_ASSERT(observer_handlers);
+ if (observer_handlers && observer_handlers != ZEND_OBSERVER_NOT_OBSERVED) {
+ zend_observer_fcall_cache *cache = observer_handlers;
+ zend_observe_fcall_end(cache, execute_data, return_value);
+ }
+}
+
+ZEND_API void zend_observe_fcall_end(
+ zend_observer_fcall_cache *cache,
+ zend_execute_data *execute_data,
+ zval *return_value)
+{
+ zend_observer_fcall *handler = cache->end, *end = cache->handlers;
+ while (handler-- != end) {
+ if (handler->end) {
+ handler->end(execute_data, return_value);
+ }
+ }
+}
+
+
diff --git a/Zend/zend_observer.h b/Zend/zend_observer.h
new file mode 100644
index 0000000000..9fb538ce3d
--- /dev/null
+++ b/Zend/zend_observer.h
@@ -0,0 +1,115 @@
+/*
+ +----------------------------------------------------------------------+
+ | Zend Engine |
+ +----------------------------------------------------------------------+
+ | Copyright (c) Zend Technologies Ltd. (http://www.zend.com) |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 2.00 of the Zend license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.zend.com/license/2_00.txt. |
+ | If you did not receive a copy of the Zend license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@zend.com so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Levi Morrison <levim@php.net> |
+ | Sammy Kaye Powers <sammyk@php.net> |
+ +----------------------------------------------------------------------+
+*/
+
+#ifndef ZEND_OBSERVER_H
+#define ZEND_OBSERVER_H
+
+#include "zend.h"
+#include "zend_compile.h"
+
+BEGIN_EXTERN_C()
+
+extern ZEND_API int zend_observer_fcall_op_array_extension;
+
+#define ZEND_OBSERVER_ENABLED (zend_observer_fcall_op_array_extension != -1)
+
+#define ZEND_OBSERVER_HANDLERS(op_array) \
+ ZEND_OP_ARRAY_EXTENSION(op_array, zend_observer_fcall_op_array_extension)
+
+#define ZEND_OBSERVER_NOT_OBSERVED ((void *) 2)
+
+#define ZEND_OBSERVABLE_FN(fn_flags) \
+ (ZEND_OBSERVER_ENABLED && \
+ !(fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE | ZEND_ACC_FAKE_CLOSURE)))
+
+struct zend_observer_fcall {
+ void (*begin)(zend_execute_data *execute_data);
+ void (*end)(zend_execute_data *execute_data, zval *retval);
+};
+typedef struct zend_observer_fcall zend_observer_fcall;
+
+struct zend_observer_fcall_cache {
+ // points after the last handler
+ zend_observer_fcall *end;
+ // a variadic array using "struct hack"
+ zend_observer_fcall handlers[1];
+};
+typedef struct zend_observer_fcall_cache zend_observer_fcall_cache;
+
+/* If the fn should not be observed then return {NULL, NULL} */
+typedef zend_observer_fcall(*zend_observer_fcall_init)(zend_function *func);
+
+// Call during minit/startup ONLY
+ZEND_API void zend_observer_fcall_register(zend_observer_fcall_init init);
+
+ZEND_API void zend_observer_startup(void); // Called by engine before MINITs
+ZEND_API void zend_observer_activate(void);
+ZEND_API void zend_observer_deactivate(void);
+ZEND_API void zend_observer_shutdown(void);
+
+ZEND_API void zend_observer_fcall_install(zend_function *function);
+
+ZEND_API void zend_observe_fcall_begin(
+ zend_observer_fcall_cache *cache,
+ zend_execute_data *execute_data);
+
+ZEND_API void zend_observe_fcall_end(
+ zend_observer_fcall_cache *cache,
+ zend_execute_data *execute_data,
+ zval *return_value);
+
+ZEND_API void zend_observer_fcall_call_end_helper(
+ zend_execute_data *execute_data,
+ zval *return_value);
+
+ZEND_API zend_always_inline void zend_observer_maybe_fcall_call_begin(
+ zend_execute_data *execute_data)
+{
+ ZEND_ASSUME(execute_data->func);
+ zend_op_array *op_array = &execute_data->func->op_array;
+ uint32_t fn_flags = op_array->fn_flags;
+ if (ZEND_OBSERVABLE_FN(fn_flags) && !(fn_flags & ZEND_ACC_GENERATOR)) {
+ void *observer_handlers = ZEND_OBSERVER_HANDLERS(op_array);
+ if (!observer_handlers) {
+ zend_observer_fcall_install((zend_function *)op_array);
+ observer_handlers = ZEND_OBSERVER_HANDLERS(op_array);
+ }
+
+ ZEND_ASSERT(observer_handlers);
+ if (observer_handlers != ZEND_OBSERVER_NOT_OBSERVED) {
+ zend_observe_fcall_begin(
+ (zend_observer_fcall_cache *)observer_handlers,
+ execute_data);
+ }
+ }
+}
+
+ZEND_API zend_always_inline void zend_observer_maybe_fcall_call_end(
+ zend_execute_data *execute_data,
+ zval *return_value)
+{
+ zend_function *func = execute_data->func;
+ if (ZEND_OBSERVABLE_FN(func->common.fn_flags)) {
+ zend_observer_fcall_call_end_helper(execute_data, return_value);
+ }
+}
+
+END_EXTERN_C()
+
+#endif /* ZEND_OBSERVER_H */
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 246c5a990d..af6d41db86 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -3940,7 +3940,7 @@ ZEND_VM_HOT_HANDLER(129, ZEND_DO_ICALL, ANY, ANY, SPEC(RETVAL))
ZEND_VM_CONTINUE();
}
-ZEND_VM_HOT_HANDLER(130, ZEND_DO_UCALL, ANY, ANY, SPEC(RETVAL))
+ZEND_VM_HOT_HANDLER(130, ZEND_DO_UCALL, ANY, ANY, SPEC(RETVAL,OBSERVER))
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -3958,12 +3958,13 @@ ZEND_VM_HOT_HANDLER(130, ZEND_DO_UCALL, ANY, ANY, SPEC(RETVAL))
call->prev_execute_data = execute_data;
execute_data = call;
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
+ OBSERVER_FCALL_BEGIN_HANDLERS(execute_data);
LOAD_OPLINE_EX();
ZEND_VM_ENTER_EX();
}
-ZEND_VM_HOT_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL))
+ZEND_VM_HOT_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL,OBSERVER))
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -3982,6 +3983,7 @@ ZEND_VM_HOT_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL))
call->prev_execute_data = execute_data;
execute_data = call;
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
+ OBSERVER_FCALL_BEGIN_HANDLERS(execute_data);
LOAD_OPLINE_EX();
ZEND_VM_ENTER_EX();
@@ -4053,7 +4055,7 @@ ZEND_VM_C_LABEL(fcall_by_name_end):
ZEND_VM_CONTINUE();
}
-ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL))
+ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL,OBSERVER))
{
USE_OPLINE
zend_execute_data *call = EX(call);
@@ -4072,6 +4074,7 @@ ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL))
call->prev_execute_data = execute_data;
execute_data = call;
i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
+ OBSERVER_FCALL_BEGIN_HANDLERS(execute_data);
if (EXPECTED(zend_execute_ex == execute_ex)) {
LOAD_OPLINE_EX();
@@ -4220,7 +4223,7 @@ ZEND_VM_COLD_CONST_HANDLER(124, ZEND_VERIFY_RETURN_TYPE, CONST|TMP|VAR|UNUSED|CV
}
}
-ZEND_VM_INLINE_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY)
+ZEND_VM_INLINE_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY, SPEC(OBSERVER))
{
USE_OPLINE
zval *retval_ptr;
@@ -4289,10 +4292,11 @@ ZEND_VM_INLINE_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY)
}
}
}
+ OBSERVER_FCALL_END_HANDLERS(execute_data, return_value);
ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper);
}
-ZEND_VM_COLD_CONST_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC)
+ZEND_VM_COLD_CONST_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC, SPEC(OBSERVER))
{
USE_OPLINE
zval *retval_ptr;
@@ -4349,6 +4353,7 @@ ZEND_VM_COLD_CONST_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC)
FREE_OP1_VAR_PTR();
} while (0);
+ OBSERVER_FCALL_END_HANDLERS(execute_data, EX(return_value));
ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper);
}
@@ -4428,7 +4433,7 @@ ZEND_VM_HANDLER(139, ZEND_GENERATOR_CREATE, ANY, ANY)
}
}
-ZEND_VM_HANDLER(161, ZEND_GENERATOR_RETURN, CONST|TMP|VAR|CV, ANY)
+ZEND_VM_HANDLER(161, ZEND_GENERATOR_RETURN, CONST|TMP|VAR|CV, ANY, SPEC(OBSERVER))
{
USE_OPLINE
zval *retval;
@@ -4464,6 +4469,8 @@ ZEND_VM_HANDLER(161, ZEND_GENERATOR_RETURN, CONST|TMP|VAR|CV, ANY)
}
}
+ OBSERVER_FCALL_END_HANDLERS(generator->execute_data, &generator->retval);
+
/* Close the generator to free up resources */
zend_generator_close(generator, 1);
@@ -6134,7 +6141,7 @@ ZEND_VM_COLD_CONST_HANDLER(51, ZEND_CAST, CONST|TMP|VAR|CV, ANY, TYPE)
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL)
+ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL, SPEC(OBSERVER))
{
USE_OPLINE
zend_op_array *new_op_array;
@@ -6143,8 +6150,8 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL)
SAVE_OPLINE();
inc_filename = GET_OP1_ZVAL_PTR(BP_VAR_R);
new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
- FREE_OP1();
if (UNEXPECTED(EG(exception) != NULL)) {
+ FREE_OP1();
if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
destroy_op_array(new_op_array);
efree_size(new_op_array, sizeof(zend_op_array));
@@ -6178,7 +6185,9 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL)
call->prev_execute_data = execute_data;
i_init_code_execute_data(call, new_op_array, return_value);
+ OBSERVER_FCALL_BEGIN_HANDLERS(call);
if (EXPECTED(zend_execute_ex == execute_ex)) {
+ FREE_OP1();
ZEND_VM_ENTER();
} else {
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
@@ -6190,12 +6199,14 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL)
efree_size(new_op_array, sizeof(zend_op_array));
if (UNEXPECTED(EG(exception) != NULL)) {
zend_rethrow_exception(execute_data);
+ FREE_OP1();
UNDEF_RESULT();
HANDLE_EXCEPTION();
}
} else if (RETURN_VALUE_USED(opline)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
}
+ FREE_OP1();
ZEND_VM_NEXT_OPCODE();
}
@@ -7688,7 +7699,7 @@ ZEND_VM_HELPER(zend_dispatch_try_catch_finally_helper, ANY, ANY, uint32_t try_ca
}
}
-ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
+ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY, SPEC(OBSERVER))
{
const zend_op *throw_op = EG(opline_before_exception);
uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes;
@@ -7717,6 +7728,7 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
}
}
+ OBSERVER_FCALL_END_HANDLERS(execute_data, EX(return_value));
cleanup_unfinished_calls(execute_data, throw_op_num);
if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
@@ -8420,7 +8432,7 @@ ZEND_VM_HANDLER(157, ZEND_FETCH_CLASS_NAME, CV|TMPVAR|UNUSED|CLASS_FETCH, ANY)
ZEND_VM_NEXT_OPCODE();
}
-ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY)
+ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY, SPEC(OBSERVER))
{
zend_array *args = NULL;
zend_function *fbc = EX(func);
@@ -8478,6 +8490,7 @@ ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY)
}
execute_data = call;
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
+ OBSERVER_FCALL_BEGIN_HANDLERS(execute_data);
if (EXPECTED(zend_execute_ex == execute_ex)) {
LOAD_OPLINE_EX();
ZEND_VM_ENTER_EX();
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 4b3958a4e4..14d9670ee4 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -316,6 +316,7 @@ static zend_uchar zend_user_opcodes[256] = {0,
#define SPEC_RULE_SMART_BRANCH 0x00200000
#define SPEC_RULE_COMMUTATIVE 0x00800000
#define SPEC_RULE_ISSET 0x01000000
+#define SPEC_RULE_OBSERVER 0x02000000
static const uint32_t *zend_spec_handlers;
static const void * const *zend_opcode_handlers;
@@ -1349,6 +1350,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETV
call->prev_execute_data = execute_data;
execute_data = call;
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
+
LOAD_OPLINE_EX();
ZEND_VM_ENTER_EX();
@@ -1372,6 +1374,55 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETV
call->prev_execute_data = execute_data;
execute_data = call;
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
+
+ LOAD_OPLINE_EX();
+
+ ZEND_VM_ENTER_EX();
+}
+
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_execute_data *call = EX(call);
+ zend_function *fbc = call->func;
+ zval *ret;
+
+ SAVE_OPLINE();
+ EX(call) = call->prev_execute_data;
+
+ ret = NULL;
+ if (0) {
+ ret = EX_VAR(opline->result.var);
+ }
+
+ call->prev_execute_data = execute_data;
+ execute_data = call;
+ i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
+ zend_observer_maybe_fcall_call_begin(execute_data);
+ LOAD_OPLINE_EX();
+
+ ZEND_VM_ENTER_EX();
+}
+
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_USED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_execute_data *call = EX(call);
+ zend_function *fbc = call->func;
+ zval *ret;
+
+ SAVE_OPLINE();
+ EX(call) = call->prev_execute_data;
+
+ ret = NULL;
+ if (1) {
+ ret = EX_VAR(opline->result.var);
+ }
+
+ call->prev_execute_data = execute_data;
+ execute_data = call;
+ i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
+ zend_observer_maybe_fcall_call_begin(execute_data);
LOAD_OPLINE_EX();
ZEND_VM_ENTER_EX();
@@ -1396,6 +1447,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_S
call->prev_execute_data = execute_data;
execute_data = call;
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
+
LOAD_OPLINE_EX();
ZEND_VM_ENTER_EX();
@@ -1486,6 +1538,189 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_S
call->prev_execute_data = execute_data;
execute_data = call;
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
+
+ LOAD_OPLINE_EX();
+
+ ZEND_VM_ENTER_EX();
+ } else {
+ zval retval;
+ ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
+
+ if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
+ zend_deprecated_function(fbc);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
+ if (!1) {
+ ret = &retval;
+ ZVAL_UNDEF(ret);
+ }
+ goto fcall_by_name_end;
+ }
+ }
+
+ call->prev_execute_data = execute_data;
+ EG(current_execute_data) = call;
+
+#if ZEND_DEBUG
+ zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
+#endif
+
+ ret = 1 ? EX_VAR(opline->result.var) : &retval;
+ ZVAL_NULL(ret);
+
+ fbc->internal_function.handler(call, ret);
+
+#if ZEND_DEBUG
+ if (!EG(exception) && call->func) {
+ if (should_throw) {
+ zend_internal_call_arginfo_violation(call->func);
+ }
+ ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
+ zend_verify_internal_return_type(call->func, ret));
+ ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
+ ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
+ }
+#endif
+
+ EG(current_execute_data) = execute_data;
+
+fcall_by_name_end:
+ zend_vm_stack_free_args(call);
+
+ uint32_t call_info = ZEND_CALL_INFO(call);
+ if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
+ if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
+ zend_free_extra_named_params(call->extra_named_params);
+ }
+ zend_vm_stack_free_call_frame_ex(call_info, call);
+ } else {
+ EG(vm_stack_top) = (zval*)call;
+ }
+
+ if (!1) {
+ i_zval_ptr_dtor(ret);
+ }
+ }
+
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ zend_rethrow_exception(execute_data);
+ HANDLE_EXCEPTION();
+ }
+ ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_CONTINUE();
+}
+
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_execute_data *call = EX(call);
+ zend_function *fbc = call->func;
+ zval *ret;
+
+ SAVE_OPLINE();
+ EX(call) = call->prev_execute_data;
+
+ if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
+ ret = NULL;
+ if (0) {
+ ret = EX_VAR(opline->result.var);
+ }
+
+ call->prev_execute_data = execute_data;
+ execute_data = call;
+ i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
+ zend_observer_maybe_fcall_call_begin(execute_data);
+ LOAD_OPLINE_EX();
+
+ ZEND_VM_ENTER_EX();
+ } else {
+ zval retval;
+ ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
+
+ if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
+ zend_deprecated_function(fbc);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
+ if (!0) {
+ ret = &retval;
+ ZVAL_UNDEF(ret);
+ }
+ goto fcall_by_name_end;
+ }
+ }
+
+ call->prev_execute_data = execute_data;
+ EG(current_execute_data) = call;
+
+#if ZEND_DEBUG
+ zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
+#endif
+
+ ret = 0 ? EX_VAR(opline->result.var) : &retval;
+ ZVAL_NULL(ret);
+
+ fbc->internal_function.handler(call, ret);
+
+#if ZEND_DEBUG
+ if (!EG(exception) && call->func) {
+ if (should_throw) {
+ zend_internal_call_arginfo_violation(call->func);
+ }
+ ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
+ zend_verify_internal_return_type(call->func, ret));
+ ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
+ ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
+ }
+#endif
+
+ EG(current_execute_data) = execute_data;
+
+fcall_by_name_end:
+ zend_vm_stack_free_args(call);
+
+ uint32_t call_info = ZEND_CALL_INFO(call);
+ if (UNEXPECTED(call_info & (ZEND_CALL_HAS_EXTRA_NAMED_PARAMS|ZEND_CALL_ALLOCATED))) {
+ if (call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS) {
+ zend_free_extra_named_params(call->extra_named_params);
+ }
+ zend_vm_stack_free_call_frame_ex(call_info, call);
+ } else {
+ EG(vm_stack_top) = (zval*)call;
+ }
+
+ if (!0) {
+ i_zval_ptr_dtor(ret);
+ }
+ }
+
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ zend_rethrow_exception(execute_data);
+ HANDLE_EXCEPTION();
+ }
+ ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_CONTINUE();
+}
+
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_execute_data *call = EX(call);
+ zend_function *fbc = call->func;
+ zval *ret;
+
+ SAVE_OPLINE();
+ EX(call) = call->prev_execute_data;
+
+ if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
+ ret = NULL;
+ if (1) {
+ ret = EX_VAR(opline->result.var);
+ }
+
+ call->prev_execute_data = execute_data;
+ execute_data = call;
+ i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
+ zend_observer_maybe_fcall_call_begin(execute_data);
LOAD_OPLINE_EX();
ZEND_VM_ENTER_EX();
@@ -1761,6 +1996,212 @@ fcall_end:
ZEND_VM_CONTINUE();
}
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_execute_data *call = EX(call);
+ zend_function *fbc = call->func;
+ zval *ret;
+
+ SAVE_OPLINE();
+ EX(call) = call->prev_execute_data;
+
+ if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
+ ret = NULL;
+ if (0) {
+ ret = EX_VAR(opline->result.var);
+ }
+
+ call->prev_execute_data = execute_data;
+ execute_data = call;
+ i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
+ zend_observer_maybe_fcall_call_begin(execute_data);
+
+ if (EXPECTED(zend_execute_ex == execute_ex)) {
+ LOAD_OPLINE_EX();
+ ZEND_VM_ENTER_EX();
+ } else {
+ SAVE_OPLINE_EX();
+ execute_data = EX(prev_execute_data);
+ LOAD_OPLINE();
+ ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
+ zend_execute_ex(call);
+ }
+ } else {
+ zval retval;
+ ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
+
+ if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
+ zend_deprecated_function(fbc);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
+ if (!0) {
+ ret = &retval;
+ ZVAL_UNDEF(ret);
+ }
+ goto fcall_end;
+ }
+ }
+
+ call->prev_execute_data = execute_data;
+ EG(current_execute_data) = call;
+
+#if ZEND_DEBUG
+ zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
+#endif
+
+ ret = 0 ? EX_VAR(opline->result.var) : &retval;
+ ZVAL_NULL(ret);
+
+ if (!zend_execute_internal) {
+ /* saves one function call if zend_execute_internal is not used */
+ fbc->internal_function.handler(call, ret);
+ } else {
+ zend_execute_internal(call, ret);
+ }
+
+#if ZEND_DEBUG
+ if (!EG(exception) && call->func) {
+ if (should_throw) {
+ zend_internal_call_arginfo_violation(call->func);
+ }
+ ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
+ zend_verify_internal_return_type(call->func, ret));
+ ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
+ ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
+ }
+#endif
+
+ EG(current_execute_data) = execute_data;
+
+fcall_end:
+ zend_vm_stack_free_args(call);
+ if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
+ zend_free_extra_named_params(call->extra_named_params);
+ }
+
+ if (!0) {
+ i_zval_ptr_dtor(ret);
+ }
+ }
+
+ if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
+ OBJ_RELEASE(Z_OBJ(call->This));
+ }
+
+ zend_vm_stack_free_call_frame(call);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ zend_rethrow_exception(execute_data);
+ HANDLE_EXCEPTION();
+ }
+
+ ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_CONTINUE();
+}
+
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_execute_data *call = EX(call);
+ zend_function *fbc = call->func;
+ zval *ret;
+
+ SAVE_OPLINE();
+ EX(call) = call->prev_execute_data;
+
+ if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
+ ret = NULL;
+ if (1) {
+ ret = EX_VAR(opline->result.var);
+ }
+
+ call->prev_execute_data = execute_data;
+ execute_data = call;
+ i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC);
+ zend_observer_maybe_fcall_call_begin(execute_data);
+
+ if (EXPECTED(zend_execute_ex == execute_ex)) {
+ LOAD_OPLINE_EX();
+ ZEND_VM_ENTER_EX();
+ } else {
+ SAVE_OPLINE_EX();
+ execute_data = EX(prev_execute_data);
+ LOAD_OPLINE();
+ ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
+ zend_execute_ex(call);
+ }
+ } else {
+ zval retval;
+ ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
+
+ if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) {
+ zend_deprecated_function(fbc);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ UNDEF_RESULT();
+ if (!1) {
+ ret = &retval;
+ ZVAL_UNDEF(ret);
+ }
+ goto fcall_end;
+ }
+ }
+
+ call->prev_execute_data = execute_data;
+ EG(current_execute_data) = call;
+
+#if ZEND_DEBUG
+ zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
+#endif
+
+ ret = 1 ? EX_VAR(opline->result.var) : &retval;
+ ZVAL_NULL(ret);
+
+ if (!zend_execute_internal) {
+ /* saves one function call if zend_execute_internal is not used */
+ fbc->internal_function.handler(call, ret);
+ } else {
+ zend_execute_internal(call, ret);
+ }
+
+#if ZEND_DEBUG
+ if (!EG(exception) && call->func) {
+ if (should_throw) {
+ zend_internal_call_arginfo_violation(call->func);
+ }
+ ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
+ zend_verify_internal_return_type(call->func, ret));
+ ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
+ ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
+ }
+#endif
+
+ EG(current_execute_data) = execute_data;
+
+fcall_end:
+ zend_vm_stack_free_args(call);
+ if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
+ zend_free_extra_named_params(call->extra_named_params);
+ }
+
+ if (!1) {
+ i_zval_ptr_dtor(ret);
+ }
+ }
+
+ if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) {
+ OBJ_RELEASE(Z_OBJ(call->This));
+ }
+
+ zend_vm_stack_free_call_frame(call);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ zend_rethrow_exception(execute_data);
+ HANDLE_EXCEPTION();
+ }
+
+ ZEND_VM_SET_OPCODE(opline + 1);
+ ZEND_VM_CONTINUE();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zval *return_value = EX(return_value);
@@ -2720,6 +3161,61 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(
ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ const zend_op *throw_op = EG(opline_before_exception);
+ uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes;
+ int i, current_try_catch_offset = -1;
+
+ if ((throw_op->opcode == ZEND_FREE || throw_op->opcode == ZEND_FE_FREE)
+ && throw_op->extended_value & ZEND_FREE_ON_RETURN) {
+ /* exceptions thrown because of loop var destruction on return/break/...
+ * are logically thrown at the end of the foreach loop, so adjust the
+ * throw_op_num.
+ */
+ const zend_live_range *range = find_live_range(
+ &EX(func)->op_array, throw_op_num, throw_op->op1.var);
+ throw_op_num = range->end;
+ }
+
+ /* Find the innermost try/catch/finally the exception was thrown in */
+ for (i = 0; i < EX(func)->op_array.last_try_catch; i++) {
+ zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i];
+ if (try_catch->try_op > throw_op_num) {
+ /* further blocks will not be relevant... */
+ break;
+ }
+ if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) {
+ current_try_catch_offset = i;
+ }
+ }
+
+ zend_observer_maybe_fcall_call_end(execute_data, EX(return_value));
+ cleanup_unfinished_calls(execute_data, throw_op_num);
+
+ if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) {
+ switch (throw_op->opcode) {
+ case ZEND_ADD_ARRAY_ELEMENT:
+ case ZEND_ADD_ARRAY_UNPACK:
+ case ZEND_ROPE_INIT:
+ case ZEND_ROPE_ADD:
+ break; /* exception while building structures, live range handling will free those */
+
+ case ZEND_FETCH_CLASS:
+ case ZEND_DECLARE_ANON_CLASS:
+ break; /* return value is zend_class_entry pointer */
+
+ default:
+ /* smart branch opcodes may not initialize result */
+ if (!zend_is_smart_branch(throw_op)) {
+ zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var));
+ }
+ }
+ }
+
+ ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -2891,6 +3387,141 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(Z
}
execute_data = call;
i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
+
+ if (EXPECTED(zend_execute_ex == execute_ex)) {
+ LOAD_OPLINE_EX();
+ ZEND_VM_ENTER_EX();
+ } else {
+ SAVE_OPLINE_EX();
+ execute_data = EX(prev_execute_data);
+ LOAD_OPLINE();
+ ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
+ zend_execute_ex(call);
+ }
+ } else {
+ zval retval;
+
+ ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION);
+
+ EG(current_execute_data) = call;
+
+#if ZEND_DEBUG
+ zend_bool should_throw = zend_internal_call_should_throw(fbc, call);
+#endif
+
+ if (ret == NULL) {
+ ret = &retval;
+ }
+
+ ZVAL_NULL(ret);
+ if (!zend_execute_internal) {
+ /* saves one function call if zend_execute_internal is not used */
+ fbc->internal_function.handler(call, ret);
+ } else {
+ zend_execute_internal(call, ret);
+ }
+
+#if ZEND_DEBUG
+ if (!EG(exception) && call->func) {
+ if (should_throw) {
+ zend_internal_call_arginfo_violation(call->func);
+ }
+ ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
+ zend_verify_internal_return_type(call->func, ret));
+ ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
+ ? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
+ }
+#endif
+
+ EG(current_execute_data) = call->prev_execute_data;
+
+ zend_vm_stack_free_args(call);
+ if (ret == &retval) {
+ zval_ptr_dtor(ret);
+ }
+ }
+
+ execute_data = EG(current_execute_data);
+
+ if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) {
+ ZEND_VM_RETURN();
+ }
+
+ if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) {
+ zend_object *object = Z_OBJ(call->This);
+ OBJ_RELEASE(object);
+ }
+ zend_vm_stack_free_call_frame(call);
+
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ zend_rethrow_exception(execute_data);
+ HANDLE_EXCEPTION_LEAVE();
+ }
+
+ LOAD_OPLINE();
+ ZEND_VM_INC_OPCODE();
+ ZEND_VM_LEAVE();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ zend_array *args = NULL;
+ zend_function *fbc = EX(func);
+ zval *ret = EX(return_value);
+ uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS | ZEND_CALL_HAS_EXTRA_NAMED_PARAMS);
+ uint32_t num_args = EX_NUM_ARGS();
+ zend_execute_data *call;
+
+ SAVE_OPLINE();
+
+ if (num_args) {
+ zval *p = ZEND_CALL_ARG(execute_data, 1);
+ zval *end = p + num_args;
+
+ args = zend_new_array(num_args);
+ zend_hash_real_init_packed(args);
+ ZEND_HASH_FILL_PACKED(args) {
+ do {
+ ZEND_HASH_FILL_ADD(p);
+ p++;
+ } while (p != end);
+ } ZEND_HASH_FILL_END();
+ }
+
+ call = execute_data;
+ execute_data = EG(current_execute_data) = EX(prev_execute_data);
+
+ call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call;
+ ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call));
+ ZEND_CALL_NUM_ARGS(call) = 2;
+
+ ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name);
+
+ zval *call_args = ZEND_CALL_ARG(call, 2);
+ if (args) {
+ ZVAL_ARR(call_args, args);
+ } else {
+ ZVAL_EMPTY_ARRAY(call_args);
+ }
+ if (UNEXPECTED(call_info & ZEND_CALL_HAS_EXTRA_NAMED_PARAMS)) {
+ if (zend_hash_num_elements(Z_ARRVAL_P(call_args)) == 0) {
+ GC_ADDREF(call->extra_named_params);
+ ZVAL_ARR(call_args, call->extra_named_params);
+ } else {
+ SEPARATE_ARRAY(call_args);
+ zend_hash_copy(Z_ARRVAL_P(call_args), call->extra_named_params, zval_add_ref);
+ }
+ }
+ zend_free_trampoline(fbc);
+ fbc = call->func;
+
+ if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) {
+ if (UNEXPECTED(!RUN_TIME_CACHE(&fbc->op_array))) {
+ init_func_run_time_cache(&fbc->op_array);
+ }
+ execute_data = call;
+ i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC);
+ zend_observer_maybe_fcall_call_begin(execute_data);
if (EXPECTED(zend_execute_ex == execute_ex)) {
LOAD_OPLINE_EX();
ZEND_VM_ENTER_EX();
@@ -3691,6 +4322,80 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_
}
}
}
+
+ ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+}
+
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *retval_ptr;
+ zval *return_value;
+
+ retval_ptr = RT_CONSTANT(opline, opline->op1);
+ return_value = EX(return_value);
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ retval_ptr = ZVAL_UNDEFINED_OP1();
+ if (return_value) {
+ ZVAL_NULL(return_value);
+ }
+ } else if (!return_value) {
+ if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
+ if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
+ SAVE_OPLINE();
+ rc_dtor_func(Z_COUNTED_P(retval_ptr));
+ }
+ }
+ } else {
+ if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (IS_CONST == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
+ Z_ADDREF_P(return_value);
+ }
+ }
+ } else if (IS_CONST == IS_CV) {
+ do {
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+ if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (GC_MAY_LEAK(ref)) {
+ gc_possible_root(ref);
+ }
+ ZVAL_NULL(retval_ptr);
+ break;
+ } else {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ }
+ }
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ } while (0);
+ } else /* if (IS_CONST == IS_VAR) */ {
+ if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (UNEXPECTED(GC_DELREF(ref) == 0)) {
+ efree_size(ref, sizeof(zend_reference));
+ } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ }
+ }
+ }
+ zend_observer_maybe_fcall_call_end(execute_data, return_value);
ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -3753,6 +4458,66 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPE
ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *retval_ptr;
+
+ SAVE_OPLINE();
+
+ do {
+ if ((IS_CONST & (IS_CONST|IS_TMP_VAR)) ||
+ (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
+ /* Not supposed to happen, but we'll allow it */
+ zend_error(E_NOTICE, "Only variable references should be returned by reference");
+
+ retval_ptr = RT_CONSTANT(opline, opline->op1);
+ if (!EX(return_value)) {
+
+ } else {
+ if (IS_CONST == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
+ ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
+ break;
+ }
+
+ ZVAL_NEW_REF(EX(return_value), retval_ptr);
+ if (IS_CONST == IS_CONST) {
+ Z_TRY_ADDREF_P(retval_ptr);
+ }
+ }
+ break;
+ }
+
+ retval_ptr = NULL;
+
+ if (IS_CONST == IS_VAR) {
+ ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
+ if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
+ zend_error(E_NOTICE, "Only variable references should be returned by reference");
+ if (EX(return_value)) {
+ ZVAL_NEW_REF(EX(return_value), retval_ptr);
+ } else {
+
+ }
+ break;
+ }
+ }
+
+ if (EX(return_value)) {
+ if (Z_ISREF_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(retval_ptr, 2);
+ }
+ ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
+ }
+
+ } while (0);
+
+ zend_observer_maybe_fcall_call_end(execute_data, EX(return_value));
+ ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -3796,6 +4561,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HA
ZEND_VM_RETURN();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *retval;
+
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
+
+ SAVE_OPLINE();
+ retval = RT_CONSTANT(opline, opline->op1);
+
+ /* Copy return value into generator->retval */
+ if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
+ ZVAL_COPY_VALUE(&generator->retval, retval);
+ if (IS_CONST == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
+ Z_ADDREF(generator->retval);
+ }
+ }
+ } else if (IS_CONST == IS_CV) {
+ ZVAL_COPY_DEREF(&generator->retval, retval);
+ } else /* if (IS_CONST == IS_VAR) */ {
+ if (UNEXPECTED(Z_ISREF_P(retval))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval);
+
+ retval = Z_REFVAL_P(retval);
+ ZVAL_COPY_VALUE(&generator->retval, retval);
+ if (UNEXPECTED(GC_DELREF(ref) == 0)) {
+ efree_size(ref, sizeof(zend_reference));
+ } else if (Z_OPT_REFCOUNTED_P(retval)) {
+ Z_ADDREF_P(retval);
+ }
+ } else {
+ ZVAL_COPY_VALUE(&generator->retval, retval);
+ }
+ }
+
+ zend_observer_maybe_fcall_call_end(generator->execute_data, &generator->retval);
+
+ /* Close the generator to free up resources */
+ zend_generator_close(generator, 1);
+
+ /* Pass execution back to handling code */
+ ZEND_VM_RETURN();
+}
+
static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -4087,8 +4897,77 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HAN
SAVE_OPLINE();
inc_filename = RT_CONSTANT(opline, opline->op1);
new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+
+ if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
+ destroy_op_array(new_op_array);
+ efree_size(new_op_array, sizeof(zend_op_array));
+ }
+ UNDEF_RESULT();
+ HANDLE_EXCEPTION();
+ } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_TRUE(EX_VAR(opline->result.var));
+ }
+ } else if (EXPECTED(new_op_array != NULL)) {
+ zval *return_value = NULL;
+ zend_execute_data *call;
+
+ if (RETURN_VALUE_USED(opline)) {
+ return_value = EX_VAR(opline->result.var);
+ }
+
+ new_op_array->scope = EX(func)->op_array.scope;
+
+ call = zend_vm_stack_push_call_frame(
+ (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
+ (zend_function*)new_op_array, 0,
+ Z_PTR(EX(This)));
+
+ if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
+ call->symbol_table = EX(symbol_table);
+ } else {
+ call->symbol_table = zend_rebuild_symbol_table();
+ }
+
+ call->prev_execute_data = execute_data;
+ i_init_code_execute_data(call, new_op_array, return_value);
+
+ if (EXPECTED(zend_execute_ex == execute_ex)) {
+
+ ZEND_VM_ENTER();
+ } else {
+ ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
+ zend_execute_ex(call);
+ zend_vm_stack_free_call_frame(call);
+ }
+
+ destroy_op_array(new_op_array);
+ efree_size(new_op_array, sizeof(zend_op_array));
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ zend_rethrow_exception(execute_data);
+ UNDEF_RESULT();
+ HANDLE_EXCEPTION();
+ }
+ } else if (RETURN_VALUE_USED(opline)) {
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ }
+
+ ZEND_VM_NEXT_OPCODE();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_op_array *new_op_array;
+ zval *inc_filename;
+
+ SAVE_OPLINE();
+ inc_filename = RT_CONSTANT(opline, opline->op1);
+ new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
if (UNEXPECTED(EG(exception) != NULL)) {
+
if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
destroy_op_array(new_op_array);
efree_size(new_op_array, sizeof(zend_op_array));
@@ -4122,7 +5001,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HAN
call->prev_execute_data = execute_data;
i_init_code_execute_data(call, new_op_array, return_value);
+ zend_observer_maybe_fcall_call_begin(call);
if (EXPECTED(zend_execute_ex == execute_ex)) {
+
ZEND_VM_ENTER();
} else {
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
@@ -4134,12 +5015,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HAN
efree_size(new_op_array, sizeof(zend_op_array));
if (UNEXPECTED(EG(exception) != NULL)) {
zend_rethrow_exception(execute_data);
+
UNDEF_RESULT();
HANDLE_EXCEPTION();
}
} else if (RETURN_VALUE_USED(opline)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
}
+
ZEND_VM_NEXT_OPCODE();
}
@@ -13575,8 +14458,77 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HA
SAVE_OPLINE();
inc_filename = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
+ destroy_op_array(new_op_array);
+ efree_size(new_op_array, sizeof(zend_op_array));
+ }
+ UNDEF_RESULT();
+ HANDLE_EXCEPTION();
+ } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_TRUE(EX_VAR(opline->result.var));
+ }
+ } else if (EXPECTED(new_op_array != NULL)) {
+ zval *return_value = NULL;
+ zend_execute_data *call;
+
+ if (RETURN_VALUE_USED(opline)) {
+ return_value = EX_VAR(opline->result.var);
+ }
+
+ new_op_array->scope = EX(func)->op_array.scope;
+
+ call = zend_vm_stack_push_call_frame(
+ (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
+ (zend_function*)new_op_array, 0,
+ Z_PTR(EX(This)));
+
+ if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
+ call->symbol_table = EX(symbol_table);
+ } else {
+ call->symbol_table = zend_rebuild_symbol_table();
+ }
+
+ call->prev_execute_data = execute_data;
+ i_init_code_execute_data(call, new_op_array, return_value);
+
+ if (EXPECTED(zend_execute_ex == execute_ex)) {
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZEND_VM_ENTER();
+ } else {
+ ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
+ zend_execute_ex(call);
+ zend_vm_stack_free_call_frame(call);
+ }
+
+ destroy_op_array(new_op_array);
+ efree_size(new_op_array, sizeof(zend_op_array));
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ zend_rethrow_exception(execute_data);
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ UNDEF_RESULT();
+ HANDLE_EXCEPTION();
+ }
+ } else if (RETURN_VALUE_USED(opline)) {
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ }
zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZEND_VM_NEXT_OPCODE();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_op_array *new_op_array;
+ zval *inc_filename;
+
+ SAVE_OPLINE();
+ inc_filename = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
if (UNEXPECTED(EG(exception) != NULL)) {
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
destroy_op_array(new_op_array);
efree_size(new_op_array, sizeof(zend_op_array));
@@ -13610,7 +14562,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HA
call->prev_execute_data = execute_data;
i_init_code_execute_data(call, new_op_array, return_value);
+ zend_observer_maybe_fcall_call_begin(call);
if (EXPECTED(zend_execute_ex == execute_ex)) {
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
ZEND_VM_ENTER();
} else {
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
@@ -13622,12 +14576,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HA
efree_size(new_op_array, sizeof(zend_op_array));
if (UNEXPECTED(EG(exception) != NULL)) {
zend_rethrow_exception(execute_data);
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
UNDEF_RESULT();
HANDLE_EXCEPTION();
}
} else if (RETURN_VALUE_USED(opline)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
}
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
ZEND_VM_NEXT_OPCODE();
}
@@ -17931,6 +18887,80 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HA
}
}
}
+
+ ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+}
+
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *retval_ptr;
+ zval *return_value;
+
+ retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
+ return_value = EX(return_value);
+ if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ retval_ptr = ZVAL_UNDEFINED_OP1();
+ if (return_value) {
+ ZVAL_NULL(return_value);
+ }
+ } else if (!return_value) {
+ if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
+ if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
+ SAVE_OPLINE();
+ rc_dtor_func(Z_COUNTED_P(retval_ptr));
+ }
+ }
+ } else {
+ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (IS_TMP_VAR == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
+ Z_ADDREF_P(return_value);
+ }
+ }
+ } else if (IS_TMP_VAR == IS_CV) {
+ do {
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+ if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (GC_MAY_LEAK(ref)) {
+ gc_possible_root(ref);
+ }
+ ZVAL_NULL(retval_ptr);
+ break;
+ } else {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ }
+ }
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ } while (0);
+ } else /* if (IS_TMP_VAR == IS_VAR) */ {
+ if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (UNEXPECTED(GC_DELREF(ref) == 0)) {
+ efree_size(ref, sizeof(zend_reference));
+ } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ }
+ }
+ }
+ zend_observer_maybe_fcall_call_end(execute_data, return_value);
ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -17993,6 +19023,66 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER
ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *retval_ptr;
+
+ SAVE_OPLINE();
+
+ do {
+ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) ||
+ (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
+ /* Not supposed to happen, but we'll allow it */
+ zend_error(E_NOTICE, "Only variable references should be returned by reference");
+
+ retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
+ if (!EX(return_value)) {
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ } else {
+ if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
+ ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
+ break;
+ }
+
+ ZVAL_NEW_REF(EX(return_value), retval_ptr);
+ if (IS_TMP_VAR == IS_CONST) {
+ Z_TRY_ADDREF_P(retval_ptr);
+ }
+ }
+ break;
+ }
+
+ retval_ptr = NULL;
+
+ if (IS_TMP_VAR == IS_VAR) {
+ ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
+ if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
+ zend_error(E_NOTICE, "Only variable references should be returned by reference");
+ if (EX(return_value)) {
+ ZVAL_NEW_REF(EX(return_value), retval_ptr);
+ } else {
+
+ }
+ break;
+ }
+ }
+
+ if (EX(return_value)) {
+ if (Z_ISREF_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(retval_ptr, 2);
+ }
+ ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
+ }
+
+ } while (0);
+
+ zend_observer_maybe_fcall_call_end(execute_data, EX(return_value));
+ ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -18036,6 +19126,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HAND
ZEND_VM_RETURN();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *retval;
+
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
+
+ SAVE_OPLINE();
+ retval = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
+
+ /* Copy return value into generator->retval */
+ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
+ ZVAL_COPY_VALUE(&generator->retval, retval);
+ if (IS_TMP_VAR == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
+ Z_ADDREF(generator->retval);
+ }
+ }
+ } else if (IS_TMP_VAR == IS_CV) {
+ ZVAL_COPY_DEREF(&generator->retval, retval);
+ } else /* if (IS_TMP_VAR == IS_VAR) */ {
+ if (UNEXPECTED(Z_ISREF_P(retval))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval);
+
+ retval = Z_REFVAL_P(retval);
+ ZVAL_COPY_VALUE(&generator->retval, retval);
+ if (UNEXPECTED(GC_DELREF(ref) == 0)) {
+ efree_size(ref, sizeof(zend_reference));
+ } else if (Z_OPT_REFCOUNTED_P(retval)) {
+ Z_ADDREF_P(retval);
+ }
+ } else {
+ ZVAL_COPY_VALUE(&generator->retval, retval);
+ }
+ }
+
+ zend_observer_maybe_fcall_call_end(generator->execute_data, &generator->retval);
+
+ /* Close the generator to free up resources */
+ zend_generator_close(generator, 1);
+
+ /* Pass execution back to handling code */
+ ZEND_VM_RETURN();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -20477,6 +21612,80 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HA
}
}
}
+
+ ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+}
+
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *retval_ptr;
+ zval *return_value;
+
+ retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ return_value = EX(return_value);
+ if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ retval_ptr = ZVAL_UNDEFINED_OP1();
+ if (return_value) {
+ ZVAL_NULL(return_value);
+ }
+ } else if (!return_value) {
+ if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
+ if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
+ SAVE_OPLINE();
+ rc_dtor_func(Z_COUNTED_P(retval_ptr));
+ }
+ }
+ } else {
+ if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (IS_VAR == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
+ Z_ADDREF_P(return_value);
+ }
+ }
+ } else if (IS_VAR == IS_CV) {
+ do {
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+ if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (GC_MAY_LEAK(ref)) {
+ gc_possible_root(ref);
+ }
+ ZVAL_NULL(retval_ptr);
+ break;
+ } else {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ }
+ }
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ } while (0);
+ } else /* if (IS_VAR == IS_VAR) */ {
+ if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (UNEXPECTED(GC_DELREF(ref) == 0)) {
+ efree_size(ref, sizeof(zend_reference));
+ } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ }
+ }
+ }
+ zend_observer_maybe_fcall_call_end(execute_data, return_value);
ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -20540,6 +21749,67 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER
ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *retval_ptr;
+
+ SAVE_OPLINE();
+
+ do {
+ if ((IS_VAR & (IS_CONST|IS_TMP_VAR)) ||
+ (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
+ /* Not supposed to happen, but we'll allow it */
+ zend_error(E_NOTICE, "Only variable references should be returned by reference");
+
+ retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ if (!EX(return_value)) {
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ } else {
+ if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
+ ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
+ break;
+ }
+
+ ZVAL_NEW_REF(EX(return_value), retval_ptr);
+ if (IS_VAR == IS_CONST) {
+ Z_TRY_ADDREF_P(retval_ptr);
+ }
+ }
+ break;
+ }
+
+ retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+
+ if (IS_VAR == IS_VAR) {
+ ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
+ if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
+ zend_error(E_NOTICE, "Only variable references should be returned by reference");
+ if (EX(return_value)) {
+ ZVAL_NEW_REF(EX(return_value), retval_ptr);
+ } else {
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ }
+ break;
+ }
+ }
+
+ if (EX(return_value)) {
+ if (Z_ISREF_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(retval_ptr, 2);
+ }
+ ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
+ }
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ } while (0);
+
+ zend_observer_maybe_fcall_call_end(execute_data, EX(return_value));
+ ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -20583,6 +21853,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HAND
ZEND_VM_RETURN();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *retval;
+
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
+
+ SAVE_OPLINE();
+ retval = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+
+ /* Copy return value into generator->retval */
+ if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
+ ZVAL_COPY_VALUE(&generator->retval, retval);
+ if (IS_VAR == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
+ Z_ADDREF(generator->retval);
+ }
+ }
+ } else if (IS_VAR == IS_CV) {
+ ZVAL_COPY_DEREF(&generator->retval, retval);
+ } else /* if (IS_VAR == IS_VAR) */ {
+ if (UNEXPECTED(Z_ISREF_P(retval))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval);
+
+ retval = Z_REFVAL_P(retval);
+ ZVAL_COPY_VALUE(&generator->retval, retval);
+ if (UNEXPECTED(GC_DELREF(ref) == 0)) {
+ efree_size(ref, sizeof(zend_reference));
+ } else if (Z_OPT_REFCOUNTED_P(retval)) {
+ Z_ADDREF_P(retval);
+ }
+ } else {
+ ZVAL_COPY_VALUE(&generator->retval, retval);
+ }
+ }
+
+ zend_observer_maybe_fcall_call_end(generator->execute_data, &generator->retval);
+
+ /* Close the generator to free up resources */
+ zend_generator_close(generator, 1);
+
+ /* Pass execution back to handling code */
+ ZEND_VM_RETURN();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -36991,6 +38306,80 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HAN
}
}
}
+
+ ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+}
+
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *retval_ptr;
+ zval *return_value;
+
+ retval_ptr = EX_VAR(opline->op1.var);
+ return_value = EX(return_value);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ retval_ptr = ZVAL_UNDEFINED_OP1();
+ if (return_value) {
+ ZVAL_NULL(return_value);
+ }
+ } else if (!return_value) {
+ if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
+ if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
+ SAVE_OPLINE();
+ rc_dtor_func(Z_COUNTED_P(retval_ptr));
+ }
+ }
+ } else {
+ if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (IS_CV == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
+ Z_ADDREF_P(return_value);
+ }
+ }
+ } else if (IS_CV == IS_CV) {
+ do {
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+ if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (GC_MAY_LEAK(ref)) {
+ gc_possible_root(ref);
+ }
+ ZVAL_NULL(retval_ptr);
+ break;
+ } else {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ }
+ }
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ } while (0);
+ } else /* if (IS_CV == IS_VAR) */ {
+ if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (UNEXPECTED(GC_DELREF(ref) == 0)) {
+ efree_size(ref, sizeof(zend_reference));
+ } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ }
+ }
+ }
+ zend_observer_maybe_fcall_call_end(execute_data, return_value);
ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
@@ -37053,6 +38442,66 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(
ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
+static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *retval_ptr;
+
+ SAVE_OPLINE();
+
+ do {
+ if ((IS_CV & (IS_CONST|IS_TMP_VAR)) ||
+ (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) {
+ /* Not supposed to happen, but we'll allow it */
+ zend_error(E_NOTICE, "Only variable references should be returned by reference");
+
+ retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ if (!EX(return_value)) {
+
+ } else {
+ if (IS_CV == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) {
+ ZVAL_COPY_VALUE(EX(return_value), retval_ptr);
+ break;
+ }
+
+ ZVAL_NEW_REF(EX(return_value), retval_ptr);
+ if (IS_CV == IS_CONST) {
+ Z_TRY_ADDREF_P(retval_ptr);
+ }
+ }
+ break;
+ }
+
+ retval_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC);
+
+ if (IS_CV == IS_VAR) {
+ ZEND_ASSERT(retval_ptr != &EG(uninitialized_zval));
+ if (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr)) {
+ zend_error(E_NOTICE, "Only variable references should be returned by reference");
+ if (EX(return_value)) {
+ ZVAL_NEW_REF(EX(return_value), retval_ptr);
+ } else {
+
+ }
+ break;
+ }
+ }
+
+ if (EX(return_value)) {
+ if (Z_ISREF_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ } else {
+ ZVAL_MAKE_REF_EX(retval_ptr, 2);
+ }
+ ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr));
+ }
+
+ } while (0);
+
+ zend_observer_maybe_fcall_call_end(execute_data, EX(return_value));
+ ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -37096,6 +38545,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDL
ZEND_VM_RETURN();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *retval;
+
+ zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C);
+
+ SAVE_OPLINE();
+ retval = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+
+ /* Copy return value into generator->retval */
+ if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
+ ZVAL_COPY_VALUE(&generator->retval, retval);
+ if (IS_CV == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) {
+ Z_ADDREF(generator->retval);
+ }
+ }
+ } else if (IS_CV == IS_CV) {
+ ZVAL_COPY_DEREF(&generator->retval, retval);
+ } else /* if (IS_CV == IS_VAR) */ {
+ if (UNEXPECTED(Z_ISREF_P(retval))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval);
+
+ retval = Z_REFVAL_P(retval);
+ ZVAL_COPY_VALUE(&generator->retval, retval);
+ if (UNEXPECTED(GC_DELREF(ref) == 0)) {
+ efree_size(ref, sizeof(zend_reference));
+ } else if (Z_OPT_REFCOUNTED_P(retval)) {
+ Z_ADDREF_P(retval);
+ }
+ } else {
+ ZVAL_COPY_VALUE(&generator->retval, retval);
+ }
+ }
+
+ zend_observer_maybe_fcall_call_end(generator->execute_data, &generator->retval);
+
+ /* Close the generator to free up resources */
+ zend_generator_close(generator, 1);
+
+ /* Pass execution back to handling code */
+ ZEND_VM_RETURN();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -37336,8 +38830,77 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLE
SAVE_OPLINE();
inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
+ if (UNEXPECTED(EG(exception) != NULL)) {
+
+ if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
+ destroy_op_array(new_op_array);
+ efree_size(new_op_array, sizeof(zend_op_array));
+ }
+ UNDEF_RESULT();
+ HANDLE_EXCEPTION();
+ } else if (new_op_array == ZEND_FAKE_OP_ARRAY) {
+ if (RETURN_VALUE_USED(opline)) {
+ ZVAL_TRUE(EX_VAR(opline->result.var));
+ }
+ } else if (EXPECTED(new_op_array != NULL)) {
+ zval *return_value = NULL;
+ zend_execute_data *call;
+
+ if (RETURN_VALUE_USED(opline)) {
+ return_value = EX_VAR(opline->result.var);
+ }
+
+ new_op_array->scope = EX(func)->op_array.scope;
+
+ call = zend_vm_stack_push_call_frame(
+ (Z_TYPE_INFO(EX(This)) & ZEND_CALL_HAS_THIS) | ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE,
+ (zend_function*)new_op_array, 0,
+ Z_PTR(EX(This)));
+
+ if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) {
+ call->symbol_table = EX(symbol_table);
+ } else {
+ call->symbol_table = zend_rebuild_symbol_table();
+ }
+
+ call->prev_execute_data = execute_data;
+ i_init_code_execute_data(call, new_op_array, return_value);
+
+ if (EXPECTED(zend_execute_ex == execute_ex)) {
+
+ ZEND_VM_ENTER();
+ } else {
+ ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
+ zend_execute_ex(call);
+ zend_vm_stack_free_call_frame(call);
+ }
+
+ destroy_op_array(new_op_array);
+ efree_size(new_op_array, sizeof(zend_op_array));
+ if (UNEXPECTED(EG(exception) != NULL)) {
+ zend_rethrow_exception(execute_data);
+ UNDEF_RESULT();
+ HANDLE_EXCEPTION();
+ }
+ } else if (RETURN_VALUE_USED(opline)) {
+ ZVAL_FALSE(EX_VAR(opline->result.var));
+ }
+
+ ZEND_VM_NEXT_OPCODE();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zend_op_array *new_op_array;
+ zval *inc_filename;
+
+ SAVE_OPLINE();
+ inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
+ new_op_array = zend_include_or_eval(inc_filename, opline->extended_value);
if (UNEXPECTED(EG(exception) != NULL)) {
+
if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) {
destroy_op_array(new_op_array);
efree_size(new_op_array, sizeof(zend_op_array));
@@ -37371,7 +38934,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLE
call->prev_execute_data = execute_data;
i_init_code_execute_data(call, new_op_array, return_value);
+ zend_observer_maybe_fcall_call_begin(call);
if (EXPECTED(zend_execute_ex == execute_ex)) {
+
ZEND_VM_ENTER();
} else {
ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP);
@@ -37383,12 +38948,14 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLE
efree_size(new_op_array, sizeof(zend_op_array));
if (UNEXPECTED(EG(exception) != NULL)) {
zend_rethrow_exception(execute_data);
+
UNDEF_RESULT();
HANDLE_EXCEPTION();
}
} else if (RETURN_VALUE_USED(opline)) {
ZVAL_FALSE(EX_VAR(opline->result.var));
}
+
ZEND_VM_NEXT_OPCODE();
}
@@ -51443,12 +53010,19 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_LABEL,
(void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_LABEL,
(void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_LABEL,
+ (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_OBSERVER_LABEL,
+ (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_OBSERVER_LABEL,
(void*)&&ZEND_INIT_FCALL_SPEC_CONST_LABEL,
(void*)&&ZEND_RETURN_SPEC_CONST_LABEL,
+ (void*)&&ZEND_RETURN_SPEC_CONST_OBSERVER_LABEL,
(void*)&&ZEND_RETURN_SPEC_TMP_LABEL,
+ (void*)&&ZEND_RETURN_SPEC_TMP_OBSERVER_LABEL,
(void*)&&ZEND_RETURN_SPEC_VAR_LABEL,
+ (void*)&&ZEND_RETURN_SPEC_VAR_OBSERVER_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_RETURN_SPEC_CV_LABEL,
+ (void*)&&ZEND_RETURN_SPEC_CV_OBSERVER_LABEL,
(void*)&&ZEND_RECV_SPEC_UNUSED_LABEL,
(void*)&&ZEND_RECV_INIT_SPEC_CONST_LABEL,
(void*)&&ZEND_SEND_VAL_SPEC_CONST_CONST_LABEL,
@@ -51609,10 +53183,15 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_LABEL,
(void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_LABEL,
(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_LABEL,
+ (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBSERVER_LABEL,
(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER_LABEL,
(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL,
+ (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_LABEL,
+ (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_OBSERVER_LABEL,
(void*)&&ZEND_UNSET_VAR_SPEC_CONST_UNUSED_LABEL,
(void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
(void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL,
@@ -52068,10 +53647,15 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_CLONE_SPEC_UNUSED_LABEL,
(void*)&&ZEND_CLONE_SPEC_CV_LABEL,
(void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_LABEL,
+ (void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_OBSERVER_LABEL,
(void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_LABEL,
+ (void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_OBSERVER_LABEL,
(void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_LABEL,
+ (void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_OBSERVER_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_RETURN_BY_REF_SPEC_CV_LABEL,
+ (void*)&&ZEND_RETURN_BY_REF_SPEC_CV_OBSERVER_LABEL,
(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_LABEL,
(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
(void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL,
@@ -52270,8 +53854,12 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_DO_ICALL_SPEC_RETVAL_USED_LABEL,
(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_LABEL,
(void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_LABEL,
+ (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_OBSERVER_LABEL,
+ (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_OBSERVER_LABEL,
(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_LABEL,
(void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_LABEL,
+ (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_OBSERVER_LABEL,
+ (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_OBSERVER_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
@@ -52392,6 +53980,7 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_LABEL,
(void*)&&ZEND_HANDLE_EXCEPTION_SPEC_LABEL,
+ (void*)&&ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER_LABEL,
(void*)&&ZEND_USER_OPCODE_SPEC_LABEL,
(void*)&&ZEND_ASSERT_CHECK_SPEC_LABEL,
(void*)&&ZEND_JMP_SET_SPEC_CONST_LABEL,
@@ -52414,6 +54003,7 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_LABEL,
(void*)&&ZEND_FETCH_CLASS_NAME_SPEC_CV_LABEL,
(void*)&&ZEND_CALL_TRAMPOLINE_SPEC_LABEL,
+ (void*)&&ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_LABEL,
(void*)&&ZEND_DISCARD_EXCEPTION_SPEC_LABEL,
(void*)&&ZEND_YIELD_SPEC_CONST_CONST_LABEL,
(void*)&&ZEND_YIELD_SPEC_CONST_TMPVAR_LABEL,
@@ -52441,10 +54031,15 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_YIELD_SPEC_CV_UNUSED_LABEL,
(void*)&&ZEND_YIELD_SPEC_CV_CV_LABEL,
(void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_LABEL,
+ (void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_OBSERVER_LABEL,
(void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_LABEL,
+ (void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_OBSERVER_LABEL,
(void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_LABEL,
+ (void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_OBSERVER_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_LABEL,
+ (void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_OBSERVER_LABEL,
(void*)&&ZEND_FAST_CALL_SPEC_LABEL,
(void*)&&ZEND_FAST_RET_SPEC_LABEL,
(void*)&&ZEND_RECV_VARIADIC_SPEC_UNUSED_LABEL,
@@ -53741,6 +55336,14 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_USED)
ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_OBSERVER):
+ VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_OBSERVER)
+ ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_USED_OBSERVER):
+ VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_USED_OBSERVER)
+ ZEND_DO_UCALL_SPEC_RETVAL_USED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED):
VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED)
ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -53749,6 +55352,14 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED)
ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_OBSERVER):
+ VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_OBSERVER)
+ ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_OBSERVER):
+ VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_OBSERVER)
+ ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED):
VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED)
ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -53757,6 +55368,14 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_USED)
ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_OBSERVER):
+ VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_OBSERVER)
+ ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_USED_OBSERVER):
+ VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_USED_OBSERVER)
+ ZEND_DO_FCALL_SPEC_RETVAL_USED_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_GENERATOR_CREATE_SPEC):
VM_TRACE(ZEND_GENERATOR_CREATE_SPEC)
ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -53829,6 +55448,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_HANDLE_EXCEPTION_SPEC)
ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER):
+ VM_TRACE(ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER)
+ ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_USER_OPCODE_SPEC):
VM_TRACE(ZEND_USER_OPCODE_SPEC)
ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -53853,6 +55476,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC)
ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER):
+ VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER)
+ ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_JMP_FORWARD_SPEC):
VM_TRACE(ZEND_JMP_FORWARD_SPEC)
ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -53995,6 +55622,81 @@ zend_leave_helper_SPEC_LABEL:
}
}
}
+
+ goto zend_leave_helper_SPEC_LABEL;
+}
+
+ HYBRID_CASE(ZEND_RETURN_SPEC_CONST_OBSERVER):
+ VM_TRACE(ZEND_RETURN_SPEC_CONST_OBSERVER)
+{
+ USE_OPLINE
+ zval *retval_ptr;
+ zval *return_value;
+
+ retval_ptr = RT_CONSTANT(opline, opline->op1);
+ return_value = EX(return_value);
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ retval_ptr = ZVAL_UNDEFINED_OP1();
+ if (return_value) {
+ ZVAL_NULL(return_value);
+ }
+ } else if (!return_value) {
+ if (IS_CONST & (IS_VAR|IS_TMP_VAR)) {
+ if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
+ SAVE_OPLINE();
+ rc_dtor_func(Z_COUNTED_P(retval_ptr));
+ }
+ }
+ } else {
+ if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (IS_CONST == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
+ Z_ADDREF_P(return_value);
+ }
+ }
+ } else if (IS_CONST == IS_CV) {
+ do {
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+ if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (GC_MAY_LEAK(ref)) {
+ gc_possible_root(ref);
+ }
+ ZVAL_NULL(retval_ptr);
+ break;
+ } else {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ }
+ }
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ } while (0);
+ } else /* if (IS_CONST == IS_VAR) */ {
+ if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (UNEXPECTED(GC_DELREF(ref) == 0)) {
+ efree_size(ref, sizeof(zend_reference));
+ } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ }
+ }
+ }
+ zend_observer_maybe_fcall_call_end(execute_data, return_value);
goto zend_leave_helper_SPEC_LABEL;
}
@@ -54002,10 +55704,18 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CONST)
ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CONST_OBSERVER):
+ VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CONST_OBSERVER)
+ ZEND_RETURN_BY_REF_SPEC_CONST_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST):
VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CONST)
ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST_OBSERVER):
+ VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CONST_OBSERVER)
+ ZEND_GENERATOR_RETURN_SPEC_CONST_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_THROW_SPEC_CONST):
VM_TRACE(ZEND_THROW_SPEC_CONST)
ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54034,6 +55744,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST)
ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBSERVER):
+ VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBSERVER)
+ ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CONST):
VM_TRACE(ZEND_FE_RESET_R_SPEC_CONST)
ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -55134,6 +56848,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR)
ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER):
+ VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER)
+ ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMPVAR):
VM_TRACE(ZEND_YIELD_FROM_SPEC_TMPVAR)
ZEND_YIELD_FROM_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -55516,6 +57234,81 @@ zend_leave_helper_SPEC_LABEL:
}
}
}
+
+ goto zend_leave_helper_SPEC_LABEL;
+}
+
+ HYBRID_CASE(ZEND_RETURN_SPEC_TMP_OBSERVER):
+ VM_TRACE(ZEND_RETURN_SPEC_TMP_OBSERVER)
+{
+ USE_OPLINE
+ zval *retval_ptr;
+ zval *return_value;
+
+ retval_ptr = _get_zval_ptr_tmp(opline->op1.var EXECUTE_DATA_CC);
+ return_value = EX(return_value);
+ if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ retval_ptr = ZVAL_UNDEFINED_OP1();
+ if (return_value) {
+ ZVAL_NULL(return_value);
+ }
+ } else if (!return_value) {
+ if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) {
+ if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
+ SAVE_OPLINE();
+ rc_dtor_func(Z_COUNTED_P(retval_ptr));
+ }
+ }
+ } else {
+ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (IS_TMP_VAR == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
+ Z_ADDREF_P(return_value);
+ }
+ }
+ } else if (IS_TMP_VAR == IS_CV) {
+ do {
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+ if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (GC_MAY_LEAK(ref)) {
+ gc_possible_root(ref);
+ }
+ ZVAL_NULL(retval_ptr);
+ break;
+ } else {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ }
+ }
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ } while (0);
+ } else /* if (IS_TMP_VAR == IS_VAR) */ {
+ if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (UNEXPECTED(GC_DELREF(ref) == 0)) {
+ efree_size(ref, sizeof(zend_reference));
+ } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ }
+ }
+ }
+ zend_observer_maybe_fcall_call_end(execute_data, return_value);
goto zend_leave_helper_SPEC_LABEL;
}
@@ -55523,10 +57316,18 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_RETURN_BY_REF_SPEC_TMP)
ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_TMP_OBSERVER):
+ VM_TRACE(ZEND_RETURN_BY_REF_SPEC_TMP_OBSERVER)
+ ZEND_RETURN_BY_REF_SPEC_TMP_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP):
VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_TMP)
ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP_OBSERVER):
+ VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_TMP_OBSERVER)
+ ZEND_GENERATOR_RETURN_SPEC_TMP_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_SEND_USER_SPEC_TMP):
VM_TRACE(ZEND_SEND_USER_SPEC_TMP)
ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -55813,6 +57614,81 @@ zend_leave_helper_SPEC_LABEL:
}
}
}
+
+ goto zend_leave_helper_SPEC_LABEL;
+}
+
+ HYBRID_CASE(ZEND_RETURN_SPEC_VAR_OBSERVER):
+ VM_TRACE(ZEND_RETURN_SPEC_VAR_OBSERVER)
+{
+ USE_OPLINE
+ zval *retval_ptr;
+ zval *return_value;
+
+ retval_ptr = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ return_value = EX(return_value);
+ if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ retval_ptr = ZVAL_UNDEFINED_OP1();
+ if (return_value) {
+ ZVAL_NULL(return_value);
+ }
+ } else if (!return_value) {
+ if (IS_VAR & (IS_VAR|IS_TMP_VAR)) {
+ if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
+ SAVE_OPLINE();
+ rc_dtor_func(Z_COUNTED_P(retval_ptr));
+ }
+ }
+ } else {
+ if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (IS_VAR == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
+ Z_ADDREF_P(return_value);
+ }
+ }
+ } else if (IS_VAR == IS_CV) {
+ do {
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+ if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (GC_MAY_LEAK(ref)) {
+ gc_possible_root(ref);
+ }
+ ZVAL_NULL(retval_ptr);
+ break;
+ } else {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ }
+ }
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ } while (0);
+ } else /* if (IS_VAR == IS_VAR) */ {
+ if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (UNEXPECTED(GC_DELREF(ref) == 0)) {
+ efree_size(ref, sizeof(zend_reference));
+ } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ }
+ }
+ }
+ zend_observer_maybe_fcall_call_end(execute_data, return_value);
goto zend_leave_helper_SPEC_LABEL;
}
@@ -55820,10 +57696,18 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_RETURN_BY_REF_SPEC_VAR)
ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_VAR_OBSERVER):
+ VM_TRACE(ZEND_RETURN_BY_REF_SPEC_VAR_OBSERVER)
+ ZEND_RETURN_BY_REF_SPEC_VAR_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR):
VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_VAR)
ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR_OBSERVER):
+ VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_VAR_OBSERVER)
+ ZEND_GENERATOR_RETURN_SPEC_VAR_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_SEND_USER_SPEC_VAR):
VM_TRACE(ZEND_SEND_USER_SPEC_VAR)
ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -56926,6 +58810,81 @@ zend_leave_helper_SPEC_LABEL:
}
}
}
+
+ goto zend_leave_helper_SPEC_LABEL;
+}
+
+ HYBRID_CASE(ZEND_RETURN_SPEC_CV_OBSERVER):
+ VM_TRACE(ZEND_RETURN_SPEC_CV_OBSERVER)
+{
+ USE_OPLINE
+ zval *retval_ptr;
+ zval *return_value;
+
+ retval_ptr = EX_VAR(opline->op1.var);
+ return_value = EX(return_value);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) {
+ SAVE_OPLINE();
+ retval_ptr = ZVAL_UNDEFINED_OP1();
+ if (return_value) {
+ ZVAL_NULL(return_value);
+ }
+ } else if (!return_value) {
+ if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
+ if (Z_REFCOUNTED_P(retval_ptr) && !Z_DELREF_P(retval_ptr)) {
+ SAVE_OPLINE();
+ rc_dtor_func(Z_COUNTED_P(retval_ptr));
+ }
+ }
+ } else {
+ if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (IS_CV == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) {
+ Z_ADDREF_P(return_value);
+ }
+ }
+ } else if (IS_CV == IS_CV) {
+ do {
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) {
+ if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (GC_MAY_LEAK(ref)) {
+ gc_possible_root(ref);
+ }
+ ZVAL_NULL(retval_ptr);
+ break;
+ } else {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ }
+ }
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ } while (0);
+ } else /* if (IS_CV == IS_VAR) */ {
+ if (UNEXPECTED(Z_ISREF_P(retval_ptr))) {
+ zend_refcounted *ref = Z_COUNTED_P(retval_ptr);
+
+ retval_ptr = Z_REFVAL_P(retval_ptr);
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ if (UNEXPECTED(GC_DELREF(ref) == 0)) {
+ efree_size(ref, sizeof(zend_reference));
+ } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) {
+ Z_ADDREF_P(retval_ptr);
+ }
+ } else {
+ ZVAL_COPY_VALUE(return_value, retval_ptr);
+ }
+ }
+ }
+ zend_observer_maybe_fcall_call_end(execute_data, return_value);
goto zend_leave_helper_SPEC_LABEL;
}
@@ -56933,10 +58892,18 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CV)
ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CV_OBSERVER):
+ VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CV_OBSERVER)
+ ZEND_RETURN_BY_REF_SPEC_CV_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV):
VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CV)
ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV_OBSERVER):
+ VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CV_OBSERVER)
+ ZEND_GENERATOR_RETURN_SPEC_CV_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_THROW_SPEC_CV):
VM_TRACE(ZEND_THROW_SPEC_CV)
ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -56961,6 +58928,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CV)
ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CV_OBSERVER):
+ VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CV_OBSERVER)
+ ZEND_INCLUDE_OR_EVAL_SPEC_CV_OBSERVER_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CV):
VM_TRACE(ZEND_FE_RESET_R_SPEC_CV)
ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -57955,7 +59926,11 @@ ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value)
}
EX(prev_execute_data) = EG(current_execute_data);
i_init_code_execute_data(execute_data, op_array, return_value);
+ if (ZEND_OBSERVER_ENABLED) {
+ zend_observer_maybe_fcall_call_begin(execute_data);
+ }
zend_execute_ex(execute_data);
+ /* Observer end handlers are called from ZEND_RETURN */
zend_vm_stack_free_call_frame(execute_data);
}
@@ -59315,12 +61290,19 @@ void zend_vm_init(void)
ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER,
ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER,
+ ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER,
+ ZEND_DO_FCALL_SPEC_RETVAL_USED_OBSERVER_HANDLER,
ZEND_INIT_FCALL_SPEC_CONST_HANDLER,
ZEND_RETURN_SPEC_CONST_HANDLER,
+ ZEND_RETURN_SPEC_CONST_OBSERVER_HANDLER,
ZEND_RETURN_SPEC_TMP_HANDLER,
+ ZEND_RETURN_SPEC_TMP_OBSERVER_HANDLER,
ZEND_RETURN_SPEC_VAR_HANDLER,
+ ZEND_RETURN_SPEC_VAR_OBSERVER_HANDLER,
+ ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_RETURN_SPEC_CV_HANDLER,
+ ZEND_RETURN_SPEC_CV_OBSERVER_HANDLER,
ZEND_RECV_SPEC_UNUSED_HANDLER,
ZEND_RECV_INIT_SPEC_CONST_HANDLER,
ZEND_SEND_VAL_SPEC_CONST_CONST_HANDLER,
@@ -59481,10 +61463,15 @@ void zend_vm_init(void)
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER,
ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER,
ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
+ ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBSERVER_HANDLER,
ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
+ ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER_HANDLER,
ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER,
+ ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER_HANDLER,
+ ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
+ ZEND_INCLUDE_OR_EVAL_SPEC_CV_OBSERVER_HANDLER,
ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER,
ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER,
@@ -59940,10 +61927,15 @@ void zend_vm_init(void)
ZEND_CLONE_SPEC_UNUSED_HANDLER,
ZEND_CLONE_SPEC_CV_HANDLER,
ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER,
+ ZEND_RETURN_BY_REF_SPEC_CONST_OBSERVER_HANDLER,
ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER,
+ ZEND_RETURN_BY_REF_SPEC_TMP_OBSERVER_HANDLER,
ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER,
+ ZEND_RETURN_BY_REF_SPEC_VAR_OBSERVER_HANDLER,
+ ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_RETURN_BY_REF_SPEC_CV_HANDLER,
+ ZEND_RETURN_BY_REF_SPEC_CV_OBSERVER_HANDLER,
ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER,
ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER,
@@ -60142,8 +62134,12 @@ void zend_vm_init(void)
ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER,
ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER,
ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER,
+ ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER,
+ ZEND_DO_UCALL_SPEC_RETVAL_USED_OBSERVER_HANDLER,
ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER,
ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER,
+ ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_OBSERVER_HANDLER,
+ ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_OBSERVER_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
@@ -60264,6 +62260,7 @@ void zend_vm_init(void)
ZEND_NULL_HANDLER,
ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER,
ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
+ ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER_HANDLER,
ZEND_USER_OPCODE_SPEC_HANDLER,
ZEND_ASSERT_CHECK_SPEC_HANDLER,
ZEND_JMP_SET_SPEC_CONST_HANDLER,
@@ -60286,6 +62283,7 @@ void zend_vm_init(void)
ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER,
ZEND_FETCH_CLASS_NAME_SPEC_CV_HANDLER,
ZEND_CALL_TRAMPOLINE_SPEC_HANDLER,
+ ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER_HANDLER,
ZEND_DISCARD_EXCEPTION_SPEC_HANDLER,
ZEND_YIELD_SPEC_CONST_CONST_HANDLER,
ZEND_YIELD_SPEC_CONST_TMPVAR_HANDLER,
@@ -60313,10 +62311,15 @@ void zend_vm_init(void)
ZEND_YIELD_SPEC_CV_UNUSED_HANDLER,
ZEND_YIELD_SPEC_CV_CV_HANDLER,
ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER,
+ ZEND_GENERATOR_RETURN_SPEC_CONST_OBSERVER_HANDLER,
ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER,
+ ZEND_GENERATOR_RETURN_SPEC_TMP_OBSERVER_HANDLER,
ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER,
+ ZEND_GENERATOR_RETURN_SPEC_VAR_OBSERVER_HANDLER,
+ ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER,
+ ZEND_GENERATOR_RETURN_SPEC_CV_OBSERVER_HANDLER,
ZEND_FAST_CALL_SPEC_HANDLER,
ZEND_FAST_RET_SPEC_HANDLER,
ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER,
@@ -61449,147 +63452,147 @@ void zend_vm_init(void)
1347,
1348,
1349,
- 1350 | SPEC_RULE_RETVAL,
- 1352,
- 1353 | SPEC_RULE_OP1,
- 1358,
- 1359,
- 1360 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1385 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
- 1435 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1460 | SPEC_RULE_OP1,
- 1465,
- 1466,
- 1467 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1492 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1517 | SPEC_RULE_OP1,
- 1522 | SPEC_RULE_OP1,
- 1527 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1552 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1577 | SPEC_RULE_OP1,
- 1582,
- 1583,
- 1584 | SPEC_RULE_OP1,
- 1589 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1614 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1639 | SPEC_RULE_OP1,
- 1644 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1669 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1694 | SPEC_RULE_OP1,
- 1699 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1724 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1749 | SPEC_RULE_OP1,
- 1754 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1779 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1804 | SPEC_RULE_OP1,
- 1809 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1834 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1859 | SPEC_RULE_OP1,
- 1864 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1889 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1914 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 1939,
- 1940 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
- 1950,
+ 1350 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
+ 1354,
+ 1355 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
+ 1365,
+ 1366,
+ 1367 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1392 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
+ 1442 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1467 | SPEC_RULE_OP1,
+ 1472,
+ 1473,
+ 1474 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1499 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1524 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
+ 1534 | SPEC_RULE_OP1,
+ 1539 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1564 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1589 | SPEC_RULE_OP1,
+ 1594,
+ 1595,
+ 1596 | SPEC_RULE_OP1,
+ 1601 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1626 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1651 | SPEC_RULE_OP1,
+ 1656 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1681 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1706 | SPEC_RULE_OP1,
+ 1711 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1736 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1761 | SPEC_RULE_OP1,
+ 1766 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1791 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1816 | SPEC_RULE_OP1,
+ 1821 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1846 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1871 | SPEC_RULE_OP1,
+ 1876 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1901 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 1926 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
1951,
- 1952,
- 1953,
- 1954,
- 1955 | SPEC_RULE_OP2,
- 1960,
- 1961 | SPEC_RULE_OP1,
- 1966 | SPEC_RULE_OP2,
- 1971 | SPEC_RULE_OP1,
- 1976 | SPEC_RULE_OP1,
- 1981 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2006 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2031 | SPEC_RULE_OP1,
- 2036 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2061 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
- 2111 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2136 | SPEC_RULE_OP2,
- 2141,
- 2142 | SPEC_RULE_OP1,
- 2147 | SPEC_RULE_OP1,
- 2152,
- 2153 | SPEC_RULE_OP1,
- 2158 | SPEC_RULE_OP1,
- 2163 | SPEC_RULE_OP1,
- 2168,
+ 1952 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
+ 1962,
+ 1963,
+ 1964,
+ 1965,
+ 1966,
+ 1967 | SPEC_RULE_OP2,
+ 1972,
+ 1973 | SPEC_RULE_OP1,
+ 1978 | SPEC_RULE_OP2,
+ 1983 | SPEC_RULE_OP1,
+ 1988 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
+ 1998 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2023 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2048 | SPEC_RULE_OP1,
+ 2053 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2078 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_QUICK_ARG,
+ 2128 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2153 | SPEC_RULE_OP2,
+ 2158,
+ 2159 | SPEC_RULE_OP1,
+ 2164 | SPEC_RULE_OP1,
2169,
- 2170 | SPEC_RULE_OP2,
- 2175 | SPEC_RULE_RETVAL,
- 2177 | SPEC_RULE_RETVAL,
- 2179 | SPEC_RULE_RETVAL,
- 2181 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2181 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2206 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2206 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2231 | SPEC_RULE_OP1,
- 2236,
- 2237 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2262,
- 2263 | SPEC_RULE_OP1,
- 2268,
- 2269,
- 2270,
- 2271,
- 2272,
- 2273,
- 2274,
- 2275 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2300,
- 2301,
- 2302,
- 2303 | SPEC_RULE_OP1,
- 2308,
- 2309 | SPEC_RULE_ISSET,
- 2311 | SPEC_RULE_OP2,
- 2316,
- 2317 | SPEC_RULE_OP1,
- 2322,
+ 2170 | SPEC_RULE_OP1,
+ 2175 | SPEC_RULE_OP1,
+ 2180 | SPEC_RULE_OP1,
+ 2185,
+ 2186,
+ 2187 | SPEC_RULE_OP2,
+ 2192 | SPEC_RULE_RETVAL,
+ 2194 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
+ 2198 | SPEC_RULE_RETVAL | SPEC_RULE_OBSERVER,
+ 2202 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2202 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2227 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2227 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2252 | SPEC_RULE_OP1,
+ 2257,
+ 2258 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2283,
+ 2284 | SPEC_RULE_OP1,
+ 2289,
+ 2290,
+ 2291,
+ 2292,
+ 2293,
+ 2294,
+ 2295,
+ 2296 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2321 | SPEC_RULE_OBSERVER,
2323,
- 2324 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2349 | SPEC_RULE_OP1,
- 2354,
- 2355,
- 2356,
- 2357,
- 2358 | SPEC_RULE_OP1,
- 2363,
- 2364,
- 2365 | SPEC_RULE_OP1,
- 2370 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2395,
- 2396 | SPEC_RULE_OP1,
- 2401,
- 2402,
- 2403,
- 2404,
- 2405,
- 2406,
- 2407,
- 2408,
- 2409 | SPEC_RULE_OP1,
- 2414,
- 2415,
- 2416,
- 2417 | SPEC_RULE_OP2,
- 2422,
- 2423 | SPEC_RULE_OP1,
- 2428 | SPEC_RULE_OP1,
- 2433 | SPEC_RULE_OP1,
- 2438 | SPEC_RULE_OP1,
- 2443 | SPEC_RULE_OP1,
- 2448,
- 2449 | SPEC_RULE_OP1,
- 2454 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2479 | SPEC_RULE_OP1,
- 2484 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
- 2509 | SPEC_RULE_OP1,
- 2514 | SPEC_RULE_OP1,
- 2519,
- 3423
+ 2324,
+ 2325 | SPEC_RULE_OP1,
+ 2330,
+ 2331 | SPEC_RULE_ISSET,
+ 2333 | SPEC_RULE_OP2,
+ 2338,
+ 2339 | SPEC_RULE_OP1,
+ 2344 | SPEC_RULE_OBSERVER,
+ 2346,
+ 2347 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2372 | SPEC_RULE_OP1 | SPEC_RULE_OBSERVER,
+ 2382,
+ 2383,
+ 2384,
+ 2385,
+ 2386 | SPEC_RULE_OP1,
+ 2391,
+ 2392,
+ 2393 | SPEC_RULE_OP1,
+ 2398 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2423,
+ 2424 | SPEC_RULE_OP1,
+ 2429,
+ 2430,
+ 2431,
+ 2432,
+ 2433,
+ 2434,
+ 2435,
+ 2436,
+ 2437 | SPEC_RULE_OP1,
+ 2442,
+ 2443,
+ 2444,
+ 2445 | SPEC_RULE_OP2,
+ 2450,
+ 2451 | SPEC_RULE_OP1,
+ 2456 | SPEC_RULE_OP1,
+ 2461 | SPEC_RULE_OP1,
+ 2466 | SPEC_RULE_OP1,
+ 2471 | SPEC_RULE_OP1,
+ 2476,
+ 2477 | SPEC_RULE_OP1,
+ 2482 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2507 | SPEC_RULE_OP1,
+ 2512 | SPEC_RULE_OP1 | SPEC_RULE_OP2,
+ 2537 | SPEC_RULE_OP1,
+ 2542 | SPEC_RULE_OP1,
+ 2547,
+ 3451
};
#if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID)
zend_opcode_handler_funcs = labels;
@@ -61698,6 +63701,9 @@ static uint32_t ZEND_FASTCALL zend_vm_get_opcode_handler_idx(uint32_t spec, cons
if (spec & SPEC_EXTRA_MASK) {
if (spec & SPEC_RULE_RETVAL) {
offset = offset * 2 + (op->result_type != IS_UNUSED);
+ if ((spec & SPEC_RULE_OBSERVER) && ZEND_OBSERVER_ENABLED) {
+ offset += 2;
+ }
} else if (spec & SPEC_RULE_QUICK_ARG) {
offset = offset * 2 + (op->op2.num <= MAX_ARG_FLAG_NUM);
} else if (spec & SPEC_RULE_OP_DATA) {
@@ -61711,6 +63717,11 @@ static uint32_t ZEND_FASTCALL zend_vm_get_opcode_handler_idx(uint32_t spec, cons
} else if (op->result_type == (IS_SMART_BRANCH_JMPNZ|IS_TMP_VAR)) {
offset += 2;
}
+ } else if (spec & SPEC_RULE_OBSERVER) {
+ offset = offset * 2;
+ if (ZEND_OBSERVER_ENABLED) {
+ offset += 1;
+ }
}
}
return (spec & SPEC_START_MASK) + offset;
@@ -61754,7 +63765,7 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2522 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 2550 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
if (op->op1_type < op->op2_type) {
zend_swap_operands(op);
}
@@ -61762,7 +63773,7 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2547 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 2575 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
if (op->op1_type < op->op2_type) {
zend_swap_operands(op);
}
@@ -61770,7 +63781,7 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2572 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 2600 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
if (op->op1_type < op->op2_type) {
zend_swap_operands(op);
}
@@ -61781,17 +63792,17 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2597 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 2625 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2622 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 2650 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2647 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 2675 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
}
break;
case ZEND_MUL:
@@ -61802,17 +63813,17 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2672 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 2700 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2697 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 2725 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2722 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 2750 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
}
break;
case ZEND_IS_IDENTICAL:
@@ -61823,14 +63834,14 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2747 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 2775 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2822 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 2850 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
} 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))) {
- spec = 3047 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 3075 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
}
break;
case ZEND_IS_NOT_IDENTICAL:
@@ -61841,14 +63852,14 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2897 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 2925 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2972 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 3000 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
} 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))) {
- spec = 3052 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
+ spec = 3080 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE;
}
break;
case ZEND_IS_EQUAL:
@@ -61859,12 +63870,12 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2747 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 2775 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2822 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 2850 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
}
break;
case ZEND_IS_NOT_EQUAL:
@@ -61875,12 +63886,12 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2897 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 2925 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 2972 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
+ spec = 3000 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE;
}
break;
case ZEND_IS_SMALLER:
@@ -61888,12 +63899,12 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3057 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 3085 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3132 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 3160 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
}
break;
case ZEND_IS_SMALLER_OR_EQUAL:
@@ -61901,74 +63912,74 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3207 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 3235 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
} else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) {
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3282 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
+ spec = 3310 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH;
}
break;
case ZEND_QM_ASSIGN:
if (op1_info == MAY_BE_LONG) {
- spec = 3369 | SPEC_RULE_OP1;
+ spec = 3397 | SPEC_RULE_OP1;
} else if (op1_info == MAY_BE_DOUBLE) {
- spec = 3374 | SPEC_RULE_OP1;
+ spec = 3402 | SPEC_RULE_OP1;
} 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))))) {
- spec = 3379 | SPEC_RULE_OP1;
+ spec = 3407 | SPEC_RULE_OP1;
}
break;
case ZEND_PRE_INC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 3357 | SPEC_RULE_RETVAL;
+ spec = 3385 | SPEC_RULE_RETVAL;
} else if (op1_info == MAY_BE_LONG) {
- spec = 3359 | SPEC_RULE_RETVAL;
+ spec = 3387 | SPEC_RULE_RETVAL;
}
break;
case ZEND_PRE_DEC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 3361 | SPEC_RULE_RETVAL;
+ spec = 3389 | SPEC_RULE_RETVAL;
} else if (op1_info == MAY_BE_LONG) {
- spec = 3363 | SPEC_RULE_RETVAL;
+ spec = 3391 | SPEC_RULE_RETVAL;
}
break;
case ZEND_POST_INC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 3365;
+ spec = 3393;
} else if (op1_info == MAY_BE_LONG) {
- spec = 3366;
+ spec = 3394;
}
break;
case ZEND_POST_DEC:
if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) {
- spec = 3367;
+ spec = 3395;
} else if (op1_info == MAY_BE_LONG) {
- spec = 3368;
+ spec = 3396;
}
break;
case ZEND_JMP:
if (OP_JMP_ADDR(op, op->op1) > op) {
- spec = 2521;
+ spec = 2549;
}
break;
case ZEND_RECV:
if (op->op2.num == MAY_BE_ANY) {
- spec = 2520;
+ spec = 2548;
}
break;
case ZEND_SEND_VAL:
if (op->op1_type == IS_CONST && op->op2_type == IS_UNUSED && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) {
- spec = 3419;
+ spec = 3447;
}
break;
case ZEND_SEND_VAR_EX:
if (op->op2_type == IS_UNUSED && op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
- spec = 3414 | SPEC_RULE_OP1;
+ spec = 3442 | SPEC_RULE_OP1;
}
break;
case ZEND_FE_FETCH_R:
if (op->op2_type == IS_CV && (op1_info & (MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) {
- spec = 3421 | SPEC_RULE_RETVAL;
+ spec = 3449 | SPEC_RULE_RETVAL;
}
break;
case ZEND_FETCH_DIM_R:
@@ -61976,17 +63987,17 @@ ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t
if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) {
break;
}
- spec = 3384 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
+ spec = 3412 | SPEC_RULE_OP1 | SPEC_RULE_OP2;
}
break;
case ZEND_SEND_VAL_EX:
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))) {
- spec = 3420;
+ spec = 3448;
}
break;
case ZEND_SEND_VAR:
if (op->op2_type == IS_UNUSED && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) {
- spec = 3409 | SPEC_RULE_OP1;
+ spec = 3437 | SPEC_RULE_OP1;
}
break;
case ZEND_BW_OR:
diff --git a/Zend/zend_vm_execute.skl b/Zend/zend_vm_execute.skl
index fcd52aba9c..22911760e4 100644
--- a/Zend/zend_vm_execute.skl
+++ b/Zend/zend_vm_execute.skl
@@ -55,7 +55,11 @@ ZEND_API void zend_{%EXECUTOR_NAME%}(zend_op_array *op_array, zval *return_value
}
EX(prev_execute_data) = EG(current_execute_data);
i_init_code_execute_data(execute_data, op_array, return_value);
+ if (ZEND_OBSERVER_ENABLED) {
+ zend_observer_maybe_fcall_call_begin(execute_data);
+ }
zend_{%EXECUTOR_NAME%}_ex(execute_data);
+ /* Observer end handlers are called from ZEND_RETURN */
zend_vm_stack_free_call_frame(execute_data);
}
diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php
index d05c278c17..2c2a64b294 100755
--- a/Zend/zend_vm_gen.php
+++ b/Zend/zend_vm_gen.php
@@ -793,6 +793,12 @@ function gen_code($f, $spec, $kind, $code, $op1, $op2, $name, $extra_spec=null)
"/opline->extended_value\s*&\s*~\s*ZEND_ISEMPTY/" => isset($extra_spec['ISSET']) ?
($extra_spec['ISSET'] == 0 ? "\\0" : "opline->extended_value")
: "\\0",
+ "/OBSERVER_FCALL_BEGIN_HANDLERS\(\s*(.*)\s*\)/" => isset($extra_spec['OBSERVER']) ?
+ ($extra_spec['OBSERVER'] == 0 ? "" : "zend_observer_maybe_fcall_call_begin(\\1)")
+ : "",
+ "/OBSERVER_FCALL_END_HANDLERS\(\s*([^,]*)\s*,\s*(.*)\s*\)/" => isset($extra_spec['OBSERVER']) ?
+ ($extra_spec['OBSERVER'] == 0 ? "" : "zend_observer_maybe_fcall_call_end(\\1, \\2)")
+ : "",
);
$code = preg_replace(array_keys($specialized_replacements), array_values($specialized_replacements), $code);
@@ -952,6 +958,9 @@ function is_hot_handler($hot, $op1, $op2, $extra_spec) {
if (isset($extra_spec["SMART_BRANCH"]) && $extra_spec["SMART_BRANCH"] == 0) {
return false;
}
+ if (isset($extra_spec["OBSERVER"]) && $extra_spec["OBSERVER"] == 1) {
+ return false;
+ }
if ($hot === 'HOT_' || $hot === 'INLINE_') {
return true;
} else if ($hot === 'HOT_NOCONST_') {
@@ -970,6 +979,8 @@ function is_hot_handler($hot, $op1, $op2, $extra_spec) {
function is_cold_handler($hot, $op1, $op2, $extra_spec) {
if ($hot === 'COLD_') {
return true;
+ } else if (isset($extra_spec["OBSERVER"]) && $extra_spec["OBSERVER"] == 1) {
+ return true;
} else if ($hot === 'COLD_CONST_') {
return ($op1 === 'CONST');
} else if ($hot === 'COLD_CONSTCONST_') {
@@ -1550,6 +1561,11 @@ function extra_spec_name($extra_spec) {
$s .= "_EMPTY";
}
}
+ if (isset($extra_spec["OBSERVER"])) {
+ if ($extra_spec["OBSERVER"]) {
+ $s .= "_OBSERVER";
+ }
+ }
return $s;
}
@@ -1573,6 +1589,9 @@ function extra_spec_flags($extra_spec) {
if (isset($extra_spec["ISSET"])) {
$s[] = "SPEC_RULE_ISSET";
}
+ if (isset($extra_spec["OBSERVER"])) {
+ $s[] = "SPEC_RULE_OBSERVER";
+ }
return $s;
}
@@ -1771,6 +1790,7 @@ function gen_executor($f, $skl, $spec, $kind, $executor_name, $initializer_name)
out($f,"#define SPEC_RULE_SMART_BRANCH 0x00200000\n");
out($f,"#define SPEC_RULE_COMMUTATIVE 0x00800000\n");
out($f,"#define SPEC_RULE_ISSET 0x01000000\n");
+ out($f,"#define SPEC_RULE_OBSERVER 0x02000000\n");
out($f,"\n");
out($f,"static const uint32_t *zend_spec_handlers;\n");
out($f,"static const void * const *zend_opcode_handlers;\n");
@@ -2247,6 +2267,9 @@ function parse_spec_rules($def, $lineno, $str) {
case "ISSET":
$ret["ISSET"] = array(0, 1);
break;
+ case "OBSERVER":
+ $ret["OBSERVER"] = array(0, 1);
+ break;
default:
die("ERROR ($def:$lineno): Wrong specialization rules '$str'\n");
}
@@ -2653,7 +2676,8 @@ function gen_vm($def, $skel) {
isset($used_extra_spec["RETVAL"]) ||
isset($used_extra_spec["QUICK_ARG"]) ||
isset($used_extra_spec["SMART_BRANCH"]) ||
- isset($used_extra_spec["ISSET"])) {
+ isset($used_extra_spec["ISSET"]) ||
+ isset($used_extra_spec["OBSERVER"])) {
$else = "";
out($f, "\tif (spec & SPEC_EXTRA_MASK) {\n");
@@ -2661,6 +2685,9 @@ function gen_vm($def, $skel) {
if (isset($used_extra_spec["RETVAL"])) {
out($f, "\t\t{$else}if (spec & SPEC_RULE_RETVAL) {\n");
out($f, "\t\t\toffset = offset * 2 + (op->result_type != IS_UNUSED);\n");
+ out($f, "\t\t\tif ((spec & SPEC_RULE_OBSERVER) && ZEND_OBSERVER_ENABLED) {\n");
+ out($f, "\t\t\t\toffset += 2;\n");
+ out($f, "\t\t\t}\n");
$else = "} else ";
}
if (isset($used_extra_spec["QUICK_ARG"])) {
@@ -2688,6 +2715,14 @@ function gen_vm($def, $skel) {
out($f, "\t\t\t}\n");
$else = "} else ";
}
+ if (isset($used_extra_spec["OBSERVER"])) {
+ out($f, "\t\t{$else}if (spec & SPEC_RULE_OBSERVER) {\n");
+ out($f, "\t\t\toffset = offset * 2;\n");
+ out($f, "\t\t\tif (ZEND_OBSERVER_ENABLED) {\n");
+ out($f, "\t\t\t\toffset += 1;\n");
+ out($f, "\t\t\t}\n");
+ $else = "} else ";
+ }
if ($else !== "") {
out($f, "\t\t}\n");
}
diff --git a/Zend/zend_vm_handlers.h b/Zend/zend_vm_handlers.h
index afcc07a8fd..8410c70e15 100644
--- a/Zend/zend_vm_handlers.h
+++ b/Zend/zend_vm_handlers.h
@@ -637,1190 +637,1214 @@
_(1349, ZEND_INIT_FCALL_BY_NAME_SPEC_CONST) \
_(1350, ZEND_DO_FCALL_SPEC_RETVAL_UNUSED) \
_(1351, ZEND_DO_FCALL_SPEC_RETVAL_USED) \
- _(1352, ZEND_INIT_FCALL_SPEC_CONST) \
- _(1353, ZEND_RETURN_SPEC_CONST) \
- _(1354, ZEND_RETURN_SPEC_TMP) \
- _(1355, ZEND_RETURN_SPEC_VAR) \
- _(1357, ZEND_RETURN_SPEC_CV) \
- _(1358, ZEND_RECV_SPEC_UNUSED) \
- _(1359, ZEND_RECV_INIT_SPEC_CONST) \
- _(1360, ZEND_SEND_VAL_SPEC_CONST_CONST) \
- _(1363, ZEND_SEND_VAL_SPEC_CONST_UNUSED) \
- _(1365, ZEND_SEND_VAL_SPEC_TMPVAR_CONST) \
- _(1368, ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED) \
- _(1370, ZEND_SEND_VAL_SPEC_TMPVAR_CONST) \
- _(1373, ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED) \
- _(1405, ZEND_SEND_VAR_EX_SPEC_VAR_CONST) \
- _(1406, ZEND_SEND_VAR_EX_SPEC_VAR_CONST) \
- _(1411, ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED) \
- _(1412, ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK) \
- _(1425, ZEND_SEND_VAR_EX_SPEC_CV_CONST) \
- _(1426, ZEND_SEND_VAR_EX_SPEC_CV_CONST) \
- _(1431, ZEND_SEND_VAR_EX_SPEC_CV_UNUSED) \
- _(1432, ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK) \
- _(1445, ZEND_SEND_REF_SPEC_VAR_CONST) \
- _(1448, ZEND_SEND_REF_SPEC_VAR_UNUSED) \
- _(1455, ZEND_SEND_REF_SPEC_CV_CONST) \
- _(1458, ZEND_SEND_REF_SPEC_CV_UNUSED) \
- _(1460, ZEND_NEW_SPEC_CONST_UNUSED) \
- _(1462, ZEND_NEW_SPEC_VAR_UNUSED) \
- _(1463, ZEND_NEW_SPEC_UNUSED_UNUSED) \
- _(1465, ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST) \
- _(1466, ZEND_FREE_SPEC_TMPVAR) \
- _(1467, ZEND_INIT_ARRAY_SPEC_CONST_CONST) \
- _(1468, ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR) \
- _(1469, ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR) \
- _(1470, ZEND_INIT_ARRAY_SPEC_CONST_UNUSED) \
- _(1471, ZEND_INIT_ARRAY_SPEC_CONST_CV) \
- _(1472, ZEND_INIT_ARRAY_SPEC_TMP_CONST) \
- _(1473, ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR) \
- _(1474, ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR) \
- _(1475, ZEND_INIT_ARRAY_SPEC_TMP_UNUSED) \
- _(1476, ZEND_INIT_ARRAY_SPEC_TMP_CV) \
- _(1477, ZEND_INIT_ARRAY_SPEC_VAR_CONST) \
- _(1478, ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR) \
- _(1479, ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR) \
- _(1480, ZEND_INIT_ARRAY_SPEC_VAR_UNUSED) \
- _(1481, ZEND_INIT_ARRAY_SPEC_VAR_CV) \
- _(1482, ZEND_INIT_ARRAY_SPEC_UNUSED_CONST) \
- _(1483, ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR) \
- _(1484, ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR) \
- _(1485, ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED) \
- _(1486, ZEND_INIT_ARRAY_SPEC_UNUSED_CV) \
- _(1487, ZEND_INIT_ARRAY_SPEC_CV_CONST) \
- _(1488, ZEND_INIT_ARRAY_SPEC_CV_TMPVAR) \
- _(1489, ZEND_INIT_ARRAY_SPEC_CV_TMPVAR) \
- _(1490, ZEND_INIT_ARRAY_SPEC_CV_UNUSED) \
- _(1491, ZEND_INIT_ARRAY_SPEC_CV_CV) \
- _(1492, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST) \
- _(1493, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR) \
- _(1494, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR) \
- _(1495, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED) \
- _(1496, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV) \
- _(1497, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST) \
- _(1498, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR) \
- _(1499, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR) \
- _(1500, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED) \
- _(1501, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV) \
- _(1502, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST) \
- _(1503, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR) \
- _(1504, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR) \
- _(1505, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED) \
- _(1506, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV) \
- _(1512, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST) \
- _(1513, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR) \
- _(1514, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR) \
- _(1515, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED) \
- _(1516, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV) \
- _(1517, ZEND_INCLUDE_OR_EVAL_SPEC_CONST) \
- _(1518, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) \
- _(1519, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) \
- _(1521, ZEND_INCLUDE_OR_EVAL_SPEC_CV) \
- _(1522, ZEND_UNSET_VAR_SPEC_CONST_UNUSED) \
- _(1523, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) \
- _(1524, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) \
- _(1526, ZEND_UNSET_VAR_SPEC_CV_UNUSED) \
- _(1537, ZEND_UNSET_DIM_SPEC_VAR_CONST) \
- _(1538, ZEND_UNSET_DIM_SPEC_VAR_TMPVAR) \
- _(1539, ZEND_UNSET_DIM_SPEC_VAR_TMPVAR) \
- _(1541, ZEND_UNSET_DIM_SPEC_VAR_CV) \
- _(1547, ZEND_UNSET_DIM_SPEC_CV_CONST) \
- _(1548, ZEND_UNSET_DIM_SPEC_CV_TMPVAR) \
- _(1549, ZEND_UNSET_DIM_SPEC_CV_TMPVAR) \
- _(1551, ZEND_UNSET_DIM_SPEC_CV_CV) \
- _(1562, ZEND_UNSET_OBJ_SPEC_VAR_CONST) \
- _(1563, ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR) \
- _(1564, ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR) \
- _(1566, ZEND_UNSET_OBJ_SPEC_VAR_CV) \
- _(1567, ZEND_UNSET_OBJ_SPEC_UNUSED_CONST) \
- _(1568, ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR) \
- _(1569, ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR) \
- _(1571, ZEND_UNSET_OBJ_SPEC_UNUSED_CV) \
- _(1572, ZEND_UNSET_OBJ_SPEC_CV_CONST) \
- _(1573, ZEND_UNSET_OBJ_SPEC_CV_TMPVAR) \
- _(1574, ZEND_UNSET_OBJ_SPEC_CV_TMPVAR) \
- _(1576, ZEND_UNSET_OBJ_SPEC_CV_CV) \
- _(1577, ZEND_FE_RESET_R_SPEC_CONST) \
- _(1578, ZEND_FE_RESET_R_SPEC_TMP) \
- _(1579, ZEND_FE_RESET_R_SPEC_VAR) \
- _(1581, ZEND_FE_RESET_R_SPEC_CV) \
- _(1582, ZEND_FE_FETCH_R_SPEC_VAR) \
- _(1583, ZEND_EXIT_SPEC) \
- _(1584, ZEND_FETCH_R_SPEC_CONST_UNUSED) \
- _(1585, ZEND_FETCH_R_SPEC_TMPVAR_UNUSED) \
- _(1586, ZEND_FETCH_R_SPEC_TMPVAR_UNUSED) \
- _(1588, ZEND_FETCH_R_SPEC_CV_UNUSED) \
- _(1589, ZEND_FETCH_DIM_R_SPEC_CONST_CONST) \
- _(1590, ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR) \
- _(1591, ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR) \
- _(1593, ZEND_FETCH_DIM_R_SPEC_CONST_CV) \
- _(1594, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST) \
- _(1595, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
- _(1596, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
- _(1598, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV) \
- _(1599, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST) \
- _(1600, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
- _(1601, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
- _(1603, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV) \
- _(1609, ZEND_FETCH_DIM_R_SPEC_CV_CONST) \
- _(1610, ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR) \
- _(1611, ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR) \
- _(1613, ZEND_FETCH_DIM_R_SPEC_CV_CV) \
- _(1614, ZEND_FETCH_OBJ_R_SPEC_CONST_CONST) \
- _(1615, ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR) \
- _(1616, ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR) \
- _(1618, ZEND_FETCH_OBJ_R_SPEC_CONST_CV) \
- _(1619, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST) \
- _(1620, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
- _(1621, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
- _(1623, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV) \
- _(1624, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST) \
- _(1625, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
- _(1626, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
- _(1628, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV) \
- _(1629, ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST) \
- _(1630, ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR) \
- _(1631, ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR) \
- _(1633, ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV) \
- _(1634, ZEND_FETCH_OBJ_R_SPEC_CV_CONST) \
- _(1635, ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR) \
- _(1636, ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR) \
- _(1638, ZEND_FETCH_OBJ_R_SPEC_CV_CV) \
- _(1639, ZEND_FETCH_W_SPEC_CONST_UNUSED) \
- _(1640, ZEND_FETCH_W_SPEC_TMPVAR_UNUSED) \
- _(1641, ZEND_FETCH_W_SPEC_TMPVAR_UNUSED) \
- _(1643, ZEND_FETCH_W_SPEC_CV_UNUSED) \
- _(1654, ZEND_FETCH_DIM_W_SPEC_VAR_CONST) \
- _(1655, ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR) \
- _(1656, ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR) \
- _(1657, ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED) \
- _(1658, ZEND_FETCH_DIM_W_SPEC_VAR_CV) \
- _(1664, ZEND_FETCH_DIM_W_SPEC_CV_CONST) \
- _(1665, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \
- _(1666, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \
- _(1667, ZEND_FETCH_DIM_W_SPEC_CV_UNUSED) \
- _(1668, ZEND_FETCH_DIM_W_SPEC_CV_CV) \
- _(1679, ZEND_FETCH_OBJ_W_SPEC_VAR_CONST) \
- _(1680, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
- _(1681, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
- _(1683, ZEND_FETCH_OBJ_W_SPEC_VAR_CV) \
- _(1684, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST) \
- _(1685, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
- _(1686, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
- _(1688, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV) \
- _(1689, ZEND_FETCH_OBJ_W_SPEC_CV_CONST) \
- _(1690, ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR) \
- _(1691, ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR) \
- _(1693, ZEND_FETCH_OBJ_W_SPEC_CV_CV) \
- _(1694, ZEND_FETCH_RW_SPEC_CONST_UNUSED) \
- _(1695, ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED) \
- _(1696, ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED) \
- _(1698, ZEND_FETCH_RW_SPEC_CV_UNUSED) \
- _(1709, ZEND_FETCH_DIM_RW_SPEC_VAR_CONST) \
- _(1710, ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR) \
- _(1711, ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR) \
- _(1712, ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED) \
- _(1713, ZEND_FETCH_DIM_RW_SPEC_VAR_CV) \
- _(1719, ZEND_FETCH_DIM_RW_SPEC_CV_CONST) \
- _(1720, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \
- _(1721, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \
- _(1722, ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED) \
- _(1723, ZEND_FETCH_DIM_RW_SPEC_CV_CV) \
- _(1734, ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST) \
- _(1735, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
- _(1736, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
- _(1738, ZEND_FETCH_OBJ_RW_SPEC_VAR_CV) \
- _(1739, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST) \
- _(1740, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
- _(1741, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
- _(1743, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV) \
- _(1744, ZEND_FETCH_OBJ_RW_SPEC_CV_CONST) \
- _(1745, ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR) \
- _(1746, ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR) \
- _(1748, ZEND_FETCH_OBJ_RW_SPEC_CV_CV) \
- _(1749, ZEND_FETCH_IS_SPEC_CONST_UNUSED) \
- _(1750, ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED) \
- _(1751, ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED) \
- _(1753, ZEND_FETCH_IS_SPEC_CV_UNUSED) \
- _(1754, ZEND_FETCH_DIM_IS_SPEC_CONST_CONST) \
- _(1755, ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR) \
- _(1756, ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR) \
- _(1758, ZEND_FETCH_DIM_IS_SPEC_CONST_CV) \
- _(1759, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST) \
- _(1760, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
- _(1761, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
- _(1763, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV) \
- _(1764, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST) \
- _(1765, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
- _(1766, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
- _(1768, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV) \
- _(1774, ZEND_FETCH_DIM_IS_SPEC_CV_CONST) \
- _(1775, ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR) \
- _(1776, ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR) \
- _(1778, ZEND_FETCH_DIM_IS_SPEC_CV_CV) \
- _(1779, ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST) \
- _(1780, ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR) \
- _(1781, ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR) \
- _(1783, ZEND_FETCH_OBJ_IS_SPEC_CONST_CV) \
- _(1784, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST) \
- _(1785, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
- _(1786, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
- _(1788, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV) \
- _(1789, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST) \
- _(1790, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
- _(1791, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
- _(1793, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV) \
- _(1794, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST) \
- _(1795, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR) \
- _(1796, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR) \
- _(1798, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV) \
- _(1799, ZEND_FETCH_OBJ_IS_SPEC_CV_CONST) \
- _(1800, ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR) \
- _(1801, ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR) \
- _(1803, ZEND_FETCH_OBJ_IS_SPEC_CV_CV) \
- _(1804, ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED) \
- _(1805, ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED) \
- _(1806, ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED) \
- _(1808, ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED) \
- _(1809, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST) \
- _(1810, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR) \
- _(1811, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR) \
- _(1812, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED) \
- _(1813, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV) \
- _(1814, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST) \
- _(1815, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR) \
- _(1816, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR) \
- _(1817, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED) \
- _(1818, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV) \
- _(1819, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST) \
- _(1820, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR) \
- _(1821, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR) \
- _(1822, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED) \
- _(1823, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV) \
- _(1829, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST) \
- _(1830, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR) \
- _(1831, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR) \
- _(1832, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED) \
- _(1833, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV) \
- _(1834, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST) \
- _(1835, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
- _(1836, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
- _(1838, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV) \
- _(1839, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST) \
- _(1840, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
- _(1841, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
- _(1843, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV) \
- _(1844, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST) \
- _(1845, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
- _(1846, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
- _(1848, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV) \
- _(1849, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST) \
- _(1850, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
- _(1851, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
- _(1853, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV) \
- _(1854, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST) \
- _(1855, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR) \
- _(1856, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR) \
- _(1858, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV) \
- _(1859, ZEND_FETCH_UNSET_SPEC_CONST_UNUSED) \
- _(1860, ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED) \
- _(1861, ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED) \
- _(1863, ZEND_FETCH_UNSET_SPEC_CV_UNUSED) \
- _(1874, ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST) \
- _(1875, ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR) \
- _(1876, ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR) \
- _(1878, ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV) \
- _(1884, ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST) \
- _(1885, ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR) \
- _(1886, ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR) \
- _(1888, ZEND_FETCH_DIM_UNSET_SPEC_CV_CV) \
- _(1899, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST) \
- _(1900, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR) \
- _(1901, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR) \
- _(1903, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV) \
- _(1904, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST) \
- _(1905, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR) \
- _(1906, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR) \
- _(1908, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV) \
- _(1909, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST) \
- _(1910, ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR) \
- _(1911, ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR) \
- _(1913, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV) \
- _(1914, ZEND_FETCH_LIST_R_SPEC_CONST_CONST) \
- _(1915, ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR) \
- _(1916, ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR) \
- _(1918, ZEND_FETCH_LIST_R_SPEC_CONST_CV) \
- _(1919, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \
- _(1920, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
- _(1921, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
- _(1923, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \
- _(1924, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \
- _(1925, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
- _(1926, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
- _(1928, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \
- _(1934, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \
- _(1935, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
- _(1936, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
- _(1938, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \
- _(1939, ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST) \
- _(1940, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST) \
- _(1941, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST) \
- _(1946, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED) \
- _(1947, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK) \
- _(1950, ZEND_EXT_STMT_SPEC) \
- _(1951, ZEND_EXT_FCALL_BEGIN_SPEC) \
- _(1952, ZEND_EXT_FCALL_END_SPEC) \
- _(1953, ZEND_EXT_NOP_SPEC) \
- _(1954, ZEND_TICKS_SPEC) \
- _(1955, ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST) \
- _(1958, ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED) \
- _(1960, ZEND_CATCH_SPEC_CONST) \
- _(1961, ZEND_THROW_SPEC_CONST) \
- _(1962, ZEND_THROW_SPEC_TMPVAR) \
- _(1963, ZEND_THROW_SPEC_TMPVAR) \
- _(1965, ZEND_THROW_SPEC_CV) \
- _(1966, ZEND_FETCH_CLASS_SPEC_UNUSED_CONST) \
- _(1967, ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR) \
- _(1968, ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR) \
- _(1969, ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED) \
- _(1970, ZEND_FETCH_CLASS_SPEC_UNUSED_CV) \
- _(1971, ZEND_CLONE_SPEC_CONST) \
- _(1972, ZEND_CLONE_SPEC_TMPVAR) \
- _(1973, ZEND_CLONE_SPEC_TMPVAR) \
- _(1974, ZEND_CLONE_SPEC_UNUSED) \
- _(1975, ZEND_CLONE_SPEC_CV) \
- _(1976, ZEND_RETURN_BY_REF_SPEC_CONST) \
- _(1977, ZEND_RETURN_BY_REF_SPEC_TMP) \
- _(1978, ZEND_RETURN_BY_REF_SPEC_VAR) \
- _(1980, ZEND_RETURN_BY_REF_SPEC_CV) \
- _(1981, ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST) \
- _(1982, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) \
- _(1983, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) \
- _(1985, ZEND_INIT_METHOD_CALL_SPEC_CONST_CV) \
- _(1986, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST) \
- _(1987, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
- _(1988, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
- _(1990, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV) \
- _(1991, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST) \
- _(1992, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
- _(1993, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
- _(1995, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV) \
- _(1996, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST) \
- _(1997, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
- _(1998, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
- _(2000, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV) \
- _(2001, ZEND_INIT_METHOD_CALL_SPEC_CV_CONST) \
- _(2002, ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR) \
- _(2003, ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR) \
- _(2005, ZEND_INIT_METHOD_CALL_SPEC_CV_CV) \
- _(2006, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST) \
- _(2007, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR) \
- _(2008, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR) \
- _(2009, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED) \
- _(2010, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV) \
- _(2016, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST) \
- _(2017, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR) \
- _(2018, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR) \
- _(2019, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED) \
- _(2020, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV) \
- _(2021, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST) \
- _(2022, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
- _(2023, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
- _(2024, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED) \
- _(2025, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV) \
- _(2031, ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED) \
- _(2032, ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED) \
- _(2033, ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED) \
- _(2035, ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED) \
- _(2036, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST) \
- _(2037, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR) \
- _(2038, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR) \
- _(2040, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV) \
- _(2041, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST) \
- _(2042, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2043, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2045, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV) \
- _(2046, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST) \
- _(2047, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2048, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2050, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV) \
- _(2056, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST) \
- _(2057, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR) \
- _(2058, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR) \
- _(2060, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV) \
- _(2061, ZEND_SEND_VAL_EX_SPEC_CONST_CONST) \
- _(2062, ZEND_SEND_VAL_EX_SPEC_CONST_CONST) \
- _(2067, ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED) \
- _(2068, ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK) \
- _(2071, ZEND_SEND_VAL_EX_SPEC_TMP_CONST) \
- _(2072, ZEND_SEND_VAL_EX_SPEC_TMP_CONST) \
- _(2077, ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED) \
- _(2078, ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK) \
- _(2121, ZEND_SEND_VAR_SPEC_VAR_CONST) \
- _(2124, ZEND_SEND_VAR_SPEC_VAR_UNUSED) \
- _(2131, ZEND_SEND_VAR_SPEC_CV_CONST) \
- _(2134, ZEND_SEND_VAR_SPEC_CV_UNUSED) \
- _(2136, ZEND_INIT_USER_CALL_SPEC_CONST_CONST) \
- _(2137, ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR) \
- _(2138, ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR) \
- _(2140, ZEND_INIT_USER_CALL_SPEC_CONST_CV) \
- _(2141, ZEND_SEND_ARRAY_SPEC) \
- _(2142, ZEND_SEND_USER_SPEC_CONST) \
- _(2143, ZEND_SEND_USER_SPEC_TMP) \
- _(2144, ZEND_SEND_USER_SPEC_VAR) \
- _(2146, ZEND_SEND_USER_SPEC_CV) \
- _(2147, ZEND_STRLEN_SPEC_CONST) \
- _(2148, ZEND_STRLEN_SPEC_TMPVAR) \
- _(2149, ZEND_STRLEN_SPEC_TMPVAR) \
- _(2151, ZEND_STRLEN_SPEC_CV) \
- _(2152, ZEND_DEFINED_SPEC_CONST) \
- _(2153, ZEND_TYPE_CHECK_SPEC_CONST) \
- _(2154, ZEND_TYPE_CHECK_SPEC_TMPVAR) \
- _(2155, ZEND_TYPE_CHECK_SPEC_TMPVAR) \
- _(2157, ZEND_TYPE_CHECK_SPEC_CV) \
- _(2158, ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED) \
- _(2159, ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED) \
- _(2160, ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED) \
- _(2161, ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED) \
- _(2162, ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED) \
- _(2163, ZEND_FE_RESET_RW_SPEC_CONST) \
- _(2164, ZEND_FE_RESET_RW_SPEC_TMP) \
- _(2165, ZEND_FE_RESET_RW_SPEC_VAR) \
- _(2167, ZEND_FE_RESET_RW_SPEC_CV) \
- _(2168, ZEND_FE_FETCH_RW_SPEC_VAR) \
- _(2169, ZEND_FE_FREE_SPEC_TMPVAR) \
- _(2170, ZEND_INIT_DYNAMIC_CALL_SPEC_CONST) \
- _(2171, ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR) \
- _(2172, ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR) \
- _(2174, ZEND_INIT_DYNAMIC_CALL_SPEC_CV) \
- _(2175, ZEND_DO_ICALL_SPEC_RETVAL_UNUSED) \
- _(2176, ZEND_DO_ICALL_SPEC_RETVAL_USED) \
- _(2177, ZEND_DO_UCALL_SPEC_RETVAL_UNUSED) \
- _(2178, ZEND_DO_UCALL_SPEC_RETVAL_USED) \
- _(2179, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED) \
- _(2180, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED) \
- _(2191, ZEND_PRE_INC_OBJ_SPEC_VAR_CONST) \
- _(2192, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
- _(2193, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
- _(2195, ZEND_PRE_INC_OBJ_SPEC_VAR_CV) \
- _(2196, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST) \
- _(2197, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
- _(2198, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
- _(2200, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV) \
- _(2201, ZEND_PRE_INC_OBJ_SPEC_CV_CONST) \
- _(2202, ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR) \
- _(2203, ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR) \
- _(2205, ZEND_PRE_INC_OBJ_SPEC_CV_CV) \
- _(2216, ZEND_POST_INC_OBJ_SPEC_VAR_CONST) \
- _(2217, ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR) \
- _(2218, ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR) \
- _(2220, ZEND_POST_INC_OBJ_SPEC_VAR_CV) \
- _(2221, ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST) \
- _(2222, ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR) \
- _(2223, ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR) \
- _(2225, ZEND_POST_INC_OBJ_SPEC_UNUSED_CV) \
- _(2226, ZEND_POST_INC_OBJ_SPEC_CV_CONST) \
- _(2227, ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR) \
- _(2228, ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR) \
- _(2230, ZEND_POST_INC_OBJ_SPEC_CV_CV) \
- _(2231, ZEND_ECHO_SPEC_CONST) \
- _(2232, ZEND_ECHO_SPEC_TMPVAR) \
- _(2233, ZEND_ECHO_SPEC_TMPVAR) \
- _(2235, ZEND_ECHO_SPEC_CV) \
- _(2242, ZEND_INSTANCEOF_SPEC_TMPVAR_CONST) \
- _(2244, ZEND_INSTANCEOF_SPEC_TMPVAR_VAR) \
- _(2245, ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED) \
- _(2247, ZEND_INSTANCEOF_SPEC_TMPVAR_CONST) \
- _(2249, ZEND_INSTANCEOF_SPEC_TMPVAR_VAR) \
- _(2250, ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED) \
- _(2257, ZEND_INSTANCEOF_SPEC_CV_CONST) \
- _(2259, ZEND_INSTANCEOF_SPEC_CV_VAR) \
- _(2260, ZEND_INSTANCEOF_SPEC_CV_UNUSED) \
- _(2262, ZEND_GENERATOR_CREATE_SPEC) \
- _(2265, ZEND_MAKE_REF_SPEC_VAR_UNUSED) \
- _(2267, ZEND_MAKE_REF_SPEC_CV_UNUSED) \
- _(2268, ZEND_DECLARE_FUNCTION_SPEC) \
- _(2269, ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED) \
- _(2270, ZEND_DECLARE_CONST_SPEC_CONST_CONST) \
- _(2271, ZEND_DECLARE_CLASS_SPEC_CONST) \
- _(2272, ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST) \
- _(2273, ZEND_DECLARE_ANON_CLASS_SPEC) \
- _(2274, ZEND_ADD_ARRAY_UNPACK_SPEC) \
- _(2275, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST) \
- _(2276, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR) \
- _(2277, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR) \
- _(2279, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV) \
- _(2280, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST) \
- _(2281, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2282, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2284, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV) \
- _(2285, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST) \
- _(2286, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2287, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2289, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV) \
- _(2290, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST) \
- _(2291, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR) \
- _(2292, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR) \
- _(2294, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV) \
- _(2295, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST) \
- _(2296, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR) \
- _(2297, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR) \
- _(2299, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV) \
- _(2300, ZEND_HANDLE_EXCEPTION_SPEC) \
- _(2301, ZEND_USER_OPCODE_SPEC) \
- _(2302, ZEND_ASSERT_CHECK_SPEC) \
- _(2303, ZEND_JMP_SET_SPEC_CONST) \
- _(2304, ZEND_JMP_SET_SPEC_TMP) \
- _(2305, ZEND_JMP_SET_SPEC_VAR) \
- _(2307, ZEND_JMP_SET_SPEC_CV) \
- _(2308, ZEND_UNSET_CV_SPEC_CV_UNUSED) \
- _(2309, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET) \
- _(2310, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY) \
- _(2311, ZEND_FETCH_LIST_W_SPEC_VAR_CONST) \
- _(2312, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \
- _(2313, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \
- _(2315, ZEND_FETCH_LIST_W_SPEC_VAR_CV) \
- _(2316, ZEND_SEPARATE_SPEC_VAR_UNUSED) \
- _(2318, ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR) \
- _(2319, ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR) \
- _(2320, ZEND_FETCH_CLASS_NAME_SPEC_UNUSED) \
- _(2321, ZEND_FETCH_CLASS_NAME_SPEC_CV) \
- _(2322, ZEND_CALL_TRAMPOLINE_SPEC) \
- _(2323, ZEND_DISCARD_EXCEPTION_SPEC) \
- _(2324, ZEND_YIELD_SPEC_CONST_CONST) \
- _(2325, ZEND_YIELD_SPEC_CONST_TMPVAR) \
- _(2326, ZEND_YIELD_SPEC_CONST_TMPVAR) \
- _(2327, ZEND_YIELD_SPEC_CONST_UNUSED) \
- _(2328, ZEND_YIELD_SPEC_CONST_CV) \
- _(2329, ZEND_YIELD_SPEC_TMP_CONST) \
- _(2330, ZEND_YIELD_SPEC_TMP_TMPVAR) \
- _(2331, ZEND_YIELD_SPEC_TMP_TMPVAR) \
- _(2332, ZEND_YIELD_SPEC_TMP_UNUSED) \
- _(2333, ZEND_YIELD_SPEC_TMP_CV) \
- _(2334, ZEND_YIELD_SPEC_VAR_CONST) \
- _(2335, ZEND_YIELD_SPEC_VAR_TMPVAR) \
- _(2336, ZEND_YIELD_SPEC_VAR_TMPVAR) \
- _(2337, ZEND_YIELD_SPEC_VAR_UNUSED) \
- _(2338, ZEND_YIELD_SPEC_VAR_CV) \
- _(2339, ZEND_YIELD_SPEC_UNUSED_CONST) \
- _(2340, ZEND_YIELD_SPEC_UNUSED_TMPVAR) \
- _(2341, ZEND_YIELD_SPEC_UNUSED_TMPVAR) \
- _(2342, ZEND_YIELD_SPEC_UNUSED_UNUSED) \
- _(2343, ZEND_YIELD_SPEC_UNUSED_CV) \
- _(2344, ZEND_YIELD_SPEC_CV_CONST) \
- _(2345, ZEND_YIELD_SPEC_CV_TMPVAR) \
- _(2346, ZEND_YIELD_SPEC_CV_TMPVAR) \
- _(2347, ZEND_YIELD_SPEC_CV_UNUSED) \
- _(2348, ZEND_YIELD_SPEC_CV_CV) \
- _(2349, ZEND_GENERATOR_RETURN_SPEC_CONST) \
- _(2350, ZEND_GENERATOR_RETURN_SPEC_TMP) \
- _(2351, ZEND_GENERATOR_RETURN_SPEC_VAR) \
- _(2353, ZEND_GENERATOR_RETURN_SPEC_CV) \
- _(2354, ZEND_FAST_CALL_SPEC) \
- _(2355, ZEND_FAST_RET_SPEC) \
- _(2356, ZEND_RECV_VARIADIC_SPEC_UNUSED) \
- _(2357, ZEND_SEND_UNPACK_SPEC) \
- _(2358, ZEND_YIELD_FROM_SPEC_CONST) \
- _(2359, ZEND_YIELD_FROM_SPEC_TMPVAR) \
- _(2360, ZEND_YIELD_FROM_SPEC_TMPVAR) \
- _(2362, ZEND_YIELD_FROM_SPEC_CV) \
- _(2363, ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED) \
- _(2364, ZEND_BIND_GLOBAL_SPEC_CV_CONST) \
- _(2365, ZEND_COALESCE_SPEC_CONST) \
- _(2366, ZEND_COALESCE_SPEC_TMP) \
- _(2367, ZEND_COALESCE_SPEC_VAR) \
- _(2369, ZEND_COALESCE_SPEC_CV) \
- _(2370, ZEND_SPACESHIP_SPEC_CONST_CONST) \
- _(2371, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \
- _(2372, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \
- _(2374, ZEND_SPACESHIP_SPEC_CONST_CV) \
- _(2375, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \
- _(2376, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
- _(2377, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
- _(2379, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \
- _(2380, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \
- _(2381, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
- _(2382, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
- _(2384, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \
- _(2390, ZEND_SPACESHIP_SPEC_CV_CONST) \
- _(2391, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \
- _(2392, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \
- _(2394, ZEND_SPACESHIP_SPEC_CV_CV) \
- _(2395, ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED) \
- _(2396, ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED) \
- _(2399, ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED) \
- _(2401, ZEND_FETCH_STATIC_PROP_R_SPEC) \
- _(2402, ZEND_FETCH_STATIC_PROP_W_SPEC) \
- _(2403, ZEND_FETCH_STATIC_PROP_RW_SPEC) \
- _(2404, ZEND_FETCH_STATIC_PROP_IS_SPEC) \
- _(2405, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC) \
- _(2406, ZEND_FETCH_STATIC_PROP_UNSET_SPEC) \
- _(2407, ZEND_UNSET_STATIC_PROP_SPEC) \
- _(2408, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC) \
- _(2409, ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST) \
- _(2411, ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST) \
- _(2412, ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST) \
- _(2414, ZEND_BIND_LEXICAL_SPEC_TMP_CV) \
- _(2415, ZEND_BIND_STATIC_SPEC_CV_UNUSED) \
- _(2416, ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED) \
- _(2417, ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST) \
- _(2420, ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED) \
- _(2422, ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED) \
- _(2423, ZEND_SWITCH_LONG_SPEC_CONST_CONST) \
- _(2424, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \
- _(2425, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \
- _(2427, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \
- _(2428, ZEND_SWITCH_STRING_SPEC_CONST_CONST) \
- _(2429, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \
- _(2430, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \
- _(2432, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \
- _(2433, ZEND_IN_ARRAY_SPEC_CONST_CONST) \
- _(2434, ZEND_IN_ARRAY_SPEC_TMP_CONST) \
- _(2435, ZEND_IN_ARRAY_SPEC_VAR_CONST) \
- _(2437, ZEND_IN_ARRAY_SPEC_CV_CONST) \
- _(2438, ZEND_COUNT_SPEC_CONST_UNUSED) \
- _(2439, ZEND_COUNT_SPEC_TMPVAR_UNUSED) \
- _(2440, ZEND_COUNT_SPEC_TMPVAR_UNUSED) \
- _(2442, ZEND_COUNT_SPEC_CV_UNUSED) \
- _(2443, ZEND_GET_CLASS_SPEC_CONST_UNUSED) \
- _(2444, ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED) \
- _(2445, ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED) \
- _(2446, ZEND_GET_CLASS_SPEC_UNUSED_UNUSED) \
- _(2447, ZEND_GET_CLASS_SPEC_CV_UNUSED) \
- _(2448, ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED) \
- _(2449, ZEND_GET_TYPE_SPEC_CONST_UNUSED) \
- _(2450, ZEND_GET_TYPE_SPEC_TMP_UNUSED) \
- _(2451, ZEND_GET_TYPE_SPEC_VAR_UNUSED) \
- _(2453, ZEND_GET_TYPE_SPEC_CV_UNUSED) \
- _(2454, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST) \
- _(2455, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR) \
- _(2456, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR) \
- _(2458, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV) \
- _(2459, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST) \
- _(2460, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
- _(2461, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
- _(2463, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV) \
- _(2464, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST) \
- _(2465, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
- _(2466, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
- _(2468, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV) \
- _(2474, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST) \
- _(2475, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR) \
- _(2476, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR) \
- _(2478, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV) \
- _(2479, ZEND_MATCH_SPEC_CONST_CONST) \
- _(2480, ZEND_MATCH_SPEC_TMPVARCV_CONST) \
- _(2481, ZEND_MATCH_SPEC_TMPVARCV_CONST) \
- _(2483, ZEND_MATCH_SPEC_TMPVARCV_CONST) \
- _(2489, ZEND_CASE_STRICT_SPEC_TMP_CONST) \
- _(2490, ZEND_CASE_STRICT_SPEC_TMP_TMP) \
- _(2491, ZEND_CASE_STRICT_SPEC_TMP_VAR) \
- _(2493, ZEND_CASE_STRICT_SPEC_TMP_CV) \
- _(2494, ZEND_CASE_STRICT_SPEC_VAR_CONST) \
- _(2495, ZEND_CASE_STRICT_SPEC_VAR_TMP) \
- _(2496, ZEND_CASE_STRICT_SPEC_VAR_VAR) \
- _(2498, ZEND_CASE_STRICT_SPEC_VAR_CV) \
- _(2509, ZEND_MATCH_ERROR_SPEC_CONST_UNUSED) \
- _(2510, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
- _(2511, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
- _(2513, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
- _(2514, ZEND_JMP_NULL_SPEC_CONST) \
- _(2515, ZEND_JMP_NULL_SPEC_TMPVARCV) \
- _(2516, ZEND_JMP_NULL_SPEC_TMPVARCV) \
- _(2518, ZEND_JMP_NULL_SPEC_TMPVARCV) \
- _(2519, ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED) \
- _(2520, ZEND_RECV_NOTYPE_SPEC) \
- _(2521, ZEND_JMP_FORWARD_SPEC) \
- _(2527, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
- _(2528, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2529, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2531, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2532, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
- _(2533, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2534, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2536, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2542, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
- _(2543, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2544, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2546, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2552, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
- _(2553, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2554, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2556, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2557, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
- _(2558, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2559, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2561, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2567, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
- _(2568, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2569, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2571, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2577, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2578, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2579, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2581, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2582, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2583, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2584, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2586, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2592, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2593, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2594, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2596, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2598, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \
- _(2599, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \
- _(2601, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \
- _(2602, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
- _(2603, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2604, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2606, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2607, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
- _(2608, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2609, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2611, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2617, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
- _(2618, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2619, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2621, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2623, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \
- _(2624, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \
- _(2626, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \
- _(2627, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
- _(2628, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2629, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2631, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2632, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
- _(2633, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2634, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2636, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2642, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
- _(2643, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2644, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2646, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2648, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(2649, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(2651, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(2652, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2653, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2654, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2656, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2657, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2658, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2659, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2661, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2667, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2668, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2669, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2671, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2677, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
- _(2678, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2679, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2681, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2682, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
- _(2683, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2684, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2686, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2692, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
- _(2693, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2694, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2696, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
- _(2702, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
- _(2703, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2704, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2706, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2707, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
- _(2708, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2709, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2711, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2717, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
- _(2718, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2719, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2721, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2727, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2728, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2729, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2731, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2732, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2733, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2734, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2736, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2742, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2743, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2744, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2746, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2762, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(2763, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2764, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(2765, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2766, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2767, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2768, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2769, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2770, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2774, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2775, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2776, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2777, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(2778, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2779, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(2780, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2781, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2782, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2783, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2784, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2785, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2789, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2790, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2791, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2807, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(2808, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2809, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(2810, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2811, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2812, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2813, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2814, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2815, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2819, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2820, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2821, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2837, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2838, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2839, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(2840, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2841, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2842, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2843, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2844, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2845, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2849, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2850, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2851, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2852, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2853, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2854, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(2855, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2856, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2857, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2858, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2859, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2860, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2864, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2865, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2866, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2882, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2883, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2884, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(2885, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2886, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2887, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2888, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2889, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2890, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2894, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2895, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2896, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2912, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(2913, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2914, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(2915, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2916, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2917, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2918, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2919, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2920, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2924, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2925, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2926, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2927, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(2928, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2929, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(2930, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2931, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2932, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2933, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2934, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2935, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2939, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2940, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2941, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2957, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(2958, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2959, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(2960, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2961, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2962, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2963, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2964, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2965, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2969, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(2970, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2971, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2987, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(2988, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(2989, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(2990, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2991, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2992, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2993, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(2994, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(2995, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(2999, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3000, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3001, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3002, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3003, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3004, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(3005, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3006, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3007, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3008, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3009, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3010, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3014, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3015, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3016, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3032, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3033, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3034, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(3035, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3036, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3037, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3038, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3039, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3040, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3044, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3045, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3046, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3047, ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST) \
- _(3051, ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV) \
- _(3052, ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST) \
- _(3056, ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV) \
- _(3060, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \
- _(3061, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3062, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3063, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \
- _(3064, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3065, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3069, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \
- _(3070, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3071, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3072, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
- _(3073, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3074, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(3075, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3076, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3077, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3078, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3079, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3080, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3084, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3085, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3086, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3087, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
- _(3088, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3089, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(3090, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3091, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3092, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3093, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3094, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3095, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3099, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3100, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3101, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3117, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
- _(3118, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3119, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(3120, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3121, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3122, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3123, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3124, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3125, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3129, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3130, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3131, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3135, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(3136, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3137, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3138, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(3139, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3140, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3144, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(3145, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3146, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3147, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3148, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3149, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(3150, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3151, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3152, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3153, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3154, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3155, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3159, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3160, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3161, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3162, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3163, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3164, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(3165, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3166, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3167, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3168, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3169, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3170, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3174, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3175, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3176, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3192, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3193, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3194, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(3195, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3196, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3197, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3198, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3199, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3200, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3204, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3205, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3206, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3210, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \
- _(3211, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3212, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3213, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \
- _(3214, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3215, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3219, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \
- _(3220, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3221, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3222, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(3223, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3224, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(3225, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3226, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3227, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3228, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3229, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3230, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3234, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3235, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3236, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3237, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(3238, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3239, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(3240, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3241, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3242, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3243, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3244, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3245, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3249, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3250, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3251, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3267, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
- _(3268, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3269, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(3270, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3271, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3272, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3273, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3274, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3275, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3279, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
- _(3280, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3281, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3285, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(3286, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3287, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3288, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(3289, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3290, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3294, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \
- _(3295, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
- _(3296, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
- _(3297, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3298, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3299, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(3300, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3301, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3302, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3303, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3304, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3305, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3309, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3310, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3311, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3312, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3313, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3314, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(3315, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3316, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3317, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3318, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3319, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3320, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3324, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3325, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3326, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3342, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
- _(3343, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
- _(3344, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
- _(3345, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3346, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3347, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3348, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3349, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3350, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3354, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
- _(3355, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
- _(3356, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
- _(3357, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \
- _(3358, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \
- _(3359, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED) \
- _(3360, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED) \
- _(3361, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \
- _(3362, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \
- _(3363, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED) \
- _(3364, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED) \
- _(3365, ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV) \
- _(3366, ZEND_POST_INC_LONG_SPEC_CV) \
- _(3367, ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV) \
- _(3368, ZEND_POST_DEC_LONG_SPEC_CV) \
- _(3369, ZEND_QM_ASSIGN_LONG_SPEC_CONST) \
- _(3370, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \
- _(3371, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \
- _(3373, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \
- _(3374, ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST) \
- _(3375, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \
- _(3376, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \
- _(3378, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \
- _(3379, ZEND_QM_ASSIGN_NOREF_SPEC_CONST) \
- _(3380, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \
- _(3381, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \
- _(3383, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \
- _(3385, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \
- _(3386, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \
- _(3388, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \
- _(3389, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \
- _(3390, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
- _(3391, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
- _(3393, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
- _(3394, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \
- _(3395, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
- _(3396, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
- _(3398, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
- _(3404, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST) \
- _(3405, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \
- _(3406, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \
- _(3408, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \
- _(3411, ZEND_SEND_VAR_SIMPLE_SPEC_VAR) \
- _(3413, ZEND_SEND_VAR_SIMPLE_SPEC_CV) \
- _(3416, ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED) \
- _(3418, ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED) \
- _(3419, ZEND_SEND_VAL_SIMPLE_SPEC_CONST) \
- _(3420, ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST) \
- _(3421, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED) \
- _(3422, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED) \
- _(3422+1, ZEND_NULL)
+ _(1352, ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_OBSERVER) \
+ _(1353, ZEND_DO_FCALL_SPEC_RETVAL_USED_OBSERVER) \
+ _(1354, ZEND_INIT_FCALL_SPEC_CONST) \
+ _(1355, ZEND_RETURN_SPEC_CONST) \
+ _(1356, ZEND_RETURN_SPEC_CONST_OBSERVER) \
+ _(1357, ZEND_RETURN_SPEC_TMP) \
+ _(1358, ZEND_RETURN_SPEC_TMP_OBSERVER) \
+ _(1359, ZEND_RETURN_SPEC_VAR) \
+ _(1360, ZEND_RETURN_SPEC_VAR_OBSERVER) \
+ _(1363, ZEND_RETURN_SPEC_CV) \
+ _(1364, ZEND_RETURN_SPEC_CV_OBSERVER) \
+ _(1365, ZEND_RECV_SPEC_UNUSED) \
+ _(1366, ZEND_RECV_INIT_SPEC_CONST) \
+ _(1367, ZEND_SEND_VAL_SPEC_CONST_CONST) \
+ _(1370, ZEND_SEND_VAL_SPEC_CONST_UNUSED) \
+ _(1372, ZEND_SEND_VAL_SPEC_TMPVAR_CONST) \
+ _(1375, ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED) \
+ _(1377, ZEND_SEND_VAL_SPEC_TMPVAR_CONST) \
+ _(1380, ZEND_SEND_VAL_SPEC_TMPVAR_UNUSED) \
+ _(1412, ZEND_SEND_VAR_EX_SPEC_VAR_CONST) \
+ _(1413, ZEND_SEND_VAR_EX_SPEC_VAR_CONST) \
+ _(1418, ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED) \
+ _(1419, ZEND_SEND_VAR_EX_SPEC_VAR_UNUSED_QUICK) \
+ _(1432, ZEND_SEND_VAR_EX_SPEC_CV_CONST) \
+ _(1433, ZEND_SEND_VAR_EX_SPEC_CV_CONST) \
+ _(1438, ZEND_SEND_VAR_EX_SPEC_CV_UNUSED) \
+ _(1439, ZEND_SEND_VAR_EX_SPEC_CV_UNUSED_QUICK) \
+ _(1452, ZEND_SEND_REF_SPEC_VAR_CONST) \
+ _(1455, ZEND_SEND_REF_SPEC_VAR_UNUSED) \
+ _(1462, ZEND_SEND_REF_SPEC_CV_CONST) \
+ _(1465, ZEND_SEND_REF_SPEC_CV_UNUSED) \
+ _(1467, ZEND_NEW_SPEC_CONST_UNUSED) \
+ _(1469, ZEND_NEW_SPEC_VAR_UNUSED) \
+ _(1470, ZEND_NEW_SPEC_UNUSED_UNUSED) \
+ _(1472, ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST) \
+ _(1473, ZEND_FREE_SPEC_TMPVAR) \
+ _(1474, ZEND_INIT_ARRAY_SPEC_CONST_CONST) \
+ _(1475, ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR) \
+ _(1476, ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR) \
+ _(1477, ZEND_INIT_ARRAY_SPEC_CONST_UNUSED) \
+ _(1478, ZEND_INIT_ARRAY_SPEC_CONST_CV) \
+ _(1479, ZEND_INIT_ARRAY_SPEC_TMP_CONST) \
+ _(1480, ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR) \
+ _(1481, ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR) \
+ _(1482, ZEND_INIT_ARRAY_SPEC_TMP_UNUSED) \
+ _(1483, ZEND_INIT_ARRAY_SPEC_TMP_CV) \
+ _(1484, ZEND_INIT_ARRAY_SPEC_VAR_CONST) \
+ _(1485, ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR) \
+ _(1486, ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR) \
+ _(1487, ZEND_INIT_ARRAY_SPEC_VAR_UNUSED) \
+ _(1488, ZEND_INIT_ARRAY_SPEC_VAR_CV) \
+ _(1489, ZEND_INIT_ARRAY_SPEC_UNUSED_CONST) \
+ _(1490, ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR) \
+ _(1491, ZEND_INIT_ARRAY_SPEC_UNUSED_TMPVAR) \
+ _(1492, ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED) \
+ _(1493, ZEND_INIT_ARRAY_SPEC_UNUSED_CV) \
+ _(1494, ZEND_INIT_ARRAY_SPEC_CV_CONST) \
+ _(1495, ZEND_INIT_ARRAY_SPEC_CV_TMPVAR) \
+ _(1496, ZEND_INIT_ARRAY_SPEC_CV_TMPVAR) \
+ _(1497, ZEND_INIT_ARRAY_SPEC_CV_UNUSED) \
+ _(1498, ZEND_INIT_ARRAY_SPEC_CV_CV) \
+ _(1499, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST) \
+ _(1500, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR) \
+ _(1501, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR) \
+ _(1502, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED) \
+ _(1503, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV) \
+ _(1504, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST) \
+ _(1505, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR) \
+ _(1506, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR) \
+ _(1507, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED) \
+ _(1508, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV) \
+ _(1509, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST) \
+ _(1510, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR) \
+ _(1511, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR) \
+ _(1512, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED) \
+ _(1513, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV) \
+ _(1519, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST) \
+ _(1520, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR) \
+ _(1521, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR) \
+ _(1522, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED) \
+ _(1523, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV) \
+ _(1524, ZEND_INCLUDE_OR_EVAL_SPEC_CONST) \
+ _(1525, ZEND_INCLUDE_OR_EVAL_SPEC_CONST_OBSERVER) \
+ _(1526, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) \
+ _(1527, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER) \
+ _(1528, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) \
+ _(1529, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_OBSERVER) \
+ _(1532, ZEND_INCLUDE_OR_EVAL_SPEC_CV) \
+ _(1533, ZEND_INCLUDE_OR_EVAL_SPEC_CV_OBSERVER) \
+ _(1534, ZEND_UNSET_VAR_SPEC_CONST_UNUSED) \
+ _(1535, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) \
+ _(1536, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) \
+ _(1538, ZEND_UNSET_VAR_SPEC_CV_UNUSED) \
+ _(1549, ZEND_UNSET_DIM_SPEC_VAR_CONST) \
+ _(1550, ZEND_UNSET_DIM_SPEC_VAR_TMPVAR) \
+ _(1551, ZEND_UNSET_DIM_SPEC_VAR_TMPVAR) \
+ _(1553, ZEND_UNSET_DIM_SPEC_VAR_CV) \
+ _(1559, ZEND_UNSET_DIM_SPEC_CV_CONST) \
+ _(1560, ZEND_UNSET_DIM_SPEC_CV_TMPVAR) \
+ _(1561, ZEND_UNSET_DIM_SPEC_CV_TMPVAR) \
+ _(1563, ZEND_UNSET_DIM_SPEC_CV_CV) \
+ _(1574, ZEND_UNSET_OBJ_SPEC_VAR_CONST) \
+ _(1575, ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR) \
+ _(1576, ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR) \
+ _(1578, ZEND_UNSET_OBJ_SPEC_VAR_CV) \
+ _(1579, ZEND_UNSET_OBJ_SPEC_UNUSED_CONST) \
+ _(1580, ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(1581, ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(1583, ZEND_UNSET_OBJ_SPEC_UNUSED_CV) \
+ _(1584, ZEND_UNSET_OBJ_SPEC_CV_CONST) \
+ _(1585, ZEND_UNSET_OBJ_SPEC_CV_TMPVAR) \
+ _(1586, ZEND_UNSET_OBJ_SPEC_CV_TMPVAR) \
+ _(1588, ZEND_UNSET_OBJ_SPEC_CV_CV) \
+ _(1589, ZEND_FE_RESET_R_SPEC_CONST) \
+ _(1590, ZEND_FE_RESET_R_SPEC_TMP) \
+ _(1591, ZEND_FE_RESET_R_SPEC_VAR) \
+ _(1593, ZEND_FE_RESET_R_SPEC_CV) \
+ _(1594, ZEND_FE_FETCH_R_SPEC_VAR) \
+ _(1595, ZEND_EXIT_SPEC) \
+ _(1596, ZEND_FETCH_R_SPEC_CONST_UNUSED) \
+ _(1597, ZEND_FETCH_R_SPEC_TMPVAR_UNUSED) \
+ _(1598, ZEND_FETCH_R_SPEC_TMPVAR_UNUSED) \
+ _(1600, ZEND_FETCH_R_SPEC_CV_UNUSED) \
+ _(1601, ZEND_FETCH_DIM_R_SPEC_CONST_CONST) \
+ _(1602, ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR) \
+ _(1603, ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR) \
+ _(1605, ZEND_FETCH_DIM_R_SPEC_CONST_CV) \
+ _(1606, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST) \
+ _(1607, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
+ _(1608, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
+ _(1610, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV) \
+ _(1611, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST) \
+ _(1612, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
+ _(1613, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \
+ _(1615, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV) \
+ _(1621, ZEND_FETCH_DIM_R_SPEC_CV_CONST) \
+ _(1622, ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR) \
+ _(1623, ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR) \
+ _(1625, ZEND_FETCH_DIM_R_SPEC_CV_CV) \
+ _(1626, ZEND_FETCH_OBJ_R_SPEC_CONST_CONST) \
+ _(1627, ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR) \
+ _(1628, ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR) \
+ _(1630, ZEND_FETCH_OBJ_R_SPEC_CONST_CV) \
+ _(1631, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST) \
+ _(1632, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
+ _(1633, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
+ _(1635, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV) \
+ _(1636, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST) \
+ _(1637, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
+ _(1638, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \
+ _(1640, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV) \
+ _(1641, ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST) \
+ _(1642, ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR) \
+ _(1643, ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR) \
+ _(1645, ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV) \
+ _(1646, ZEND_FETCH_OBJ_R_SPEC_CV_CONST) \
+ _(1647, ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR) \
+ _(1648, ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR) \
+ _(1650, ZEND_FETCH_OBJ_R_SPEC_CV_CV) \
+ _(1651, ZEND_FETCH_W_SPEC_CONST_UNUSED) \
+ _(1652, ZEND_FETCH_W_SPEC_TMPVAR_UNUSED) \
+ _(1653, ZEND_FETCH_W_SPEC_TMPVAR_UNUSED) \
+ _(1655, ZEND_FETCH_W_SPEC_CV_UNUSED) \
+ _(1666, ZEND_FETCH_DIM_W_SPEC_VAR_CONST) \
+ _(1667, ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR) \
+ _(1668, ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR) \
+ _(1669, ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED) \
+ _(1670, ZEND_FETCH_DIM_W_SPEC_VAR_CV) \
+ _(1676, ZEND_FETCH_DIM_W_SPEC_CV_CONST) \
+ _(1677, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \
+ _(1678, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \
+ _(1679, ZEND_FETCH_DIM_W_SPEC_CV_UNUSED) \
+ _(1680, ZEND_FETCH_DIM_W_SPEC_CV_CV) \
+ _(1691, ZEND_FETCH_OBJ_W_SPEC_VAR_CONST) \
+ _(1692, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
+ _(1693, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
+ _(1695, ZEND_FETCH_OBJ_W_SPEC_VAR_CV) \
+ _(1696, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST) \
+ _(1697, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
+ _(1698, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
+ _(1700, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV) \
+ _(1701, ZEND_FETCH_OBJ_W_SPEC_CV_CONST) \
+ _(1702, ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR) \
+ _(1703, ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR) \
+ _(1705, ZEND_FETCH_OBJ_W_SPEC_CV_CV) \
+ _(1706, ZEND_FETCH_RW_SPEC_CONST_UNUSED) \
+ _(1707, ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED) \
+ _(1708, ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED) \
+ _(1710, ZEND_FETCH_RW_SPEC_CV_UNUSED) \
+ _(1721, ZEND_FETCH_DIM_RW_SPEC_VAR_CONST) \
+ _(1722, ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR) \
+ _(1723, ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR) \
+ _(1724, ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED) \
+ _(1725, ZEND_FETCH_DIM_RW_SPEC_VAR_CV) \
+ _(1731, ZEND_FETCH_DIM_RW_SPEC_CV_CONST) \
+ _(1732, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \
+ _(1733, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \
+ _(1734, ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED) \
+ _(1735, ZEND_FETCH_DIM_RW_SPEC_CV_CV) \
+ _(1746, ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST) \
+ _(1747, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
+ _(1748, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
+ _(1750, ZEND_FETCH_OBJ_RW_SPEC_VAR_CV) \
+ _(1751, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST) \
+ _(1752, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
+ _(1753, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
+ _(1755, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV) \
+ _(1756, ZEND_FETCH_OBJ_RW_SPEC_CV_CONST) \
+ _(1757, ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR) \
+ _(1758, ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR) \
+ _(1760, ZEND_FETCH_OBJ_RW_SPEC_CV_CV) \
+ _(1761, ZEND_FETCH_IS_SPEC_CONST_UNUSED) \
+ _(1762, ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED) \
+ _(1763, ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED) \
+ _(1765, ZEND_FETCH_IS_SPEC_CV_UNUSED) \
+ _(1766, ZEND_FETCH_DIM_IS_SPEC_CONST_CONST) \
+ _(1767, ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR) \
+ _(1768, ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR) \
+ _(1770, ZEND_FETCH_DIM_IS_SPEC_CONST_CV) \
+ _(1771, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST) \
+ _(1772, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
+ _(1773, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
+ _(1775, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV) \
+ _(1776, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST) \
+ _(1777, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
+ _(1778, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \
+ _(1780, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV) \
+ _(1786, ZEND_FETCH_DIM_IS_SPEC_CV_CONST) \
+ _(1787, ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR) \
+ _(1788, ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR) \
+ _(1790, ZEND_FETCH_DIM_IS_SPEC_CV_CV) \
+ _(1791, ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST) \
+ _(1792, ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR) \
+ _(1793, ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR) \
+ _(1795, ZEND_FETCH_OBJ_IS_SPEC_CONST_CV) \
+ _(1796, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST) \
+ _(1797, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
+ _(1798, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
+ _(1800, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV) \
+ _(1801, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST) \
+ _(1802, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
+ _(1803, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \
+ _(1805, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV) \
+ _(1806, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST) \
+ _(1807, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR) \
+ _(1808, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR) \
+ _(1810, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV) \
+ _(1811, ZEND_FETCH_OBJ_IS_SPEC_CV_CONST) \
+ _(1812, ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR) \
+ _(1813, ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR) \
+ _(1815, ZEND_FETCH_OBJ_IS_SPEC_CV_CV) \
+ _(1816, ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED) \
+ _(1817, ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED) \
+ _(1818, ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED) \
+ _(1820, ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED) \
+ _(1821, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST) \
+ _(1822, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR) \
+ _(1823, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR) \
+ _(1824, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED) \
+ _(1825, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV) \
+ _(1826, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST) \
+ _(1827, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR) \
+ _(1828, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR) \
+ _(1829, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED) \
+ _(1830, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV) \
+ _(1831, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST) \
+ _(1832, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR) \
+ _(1833, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR) \
+ _(1834, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED) \
+ _(1835, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV) \
+ _(1841, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST) \
+ _(1842, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR) \
+ _(1843, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR) \
+ _(1844, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED) \
+ _(1845, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV) \
+ _(1846, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST) \
+ _(1847, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
+ _(1848, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
+ _(1850, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV) \
+ _(1851, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST) \
+ _(1852, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
+ _(1853, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
+ _(1855, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV) \
+ _(1856, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST) \
+ _(1857, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
+ _(1858, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
+ _(1860, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV) \
+ _(1861, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST) \
+ _(1862, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
+ _(1863, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
+ _(1865, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV) \
+ _(1866, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST) \
+ _(1867, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR) \
+ _(1868, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR) \
+ _(1870, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV) \
+ _(1871, ZEND_FETCH_UNSET_SPEC_CONST_UNUSED) \
+ _(1872, ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED) \
+ _(1873, ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED) \
+ _(1875, ZEND_FETCH_UNSET_SPEC_CV_UNUSED) \
+ _(1886, ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST) \
+ _(1887, ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR) \
+ _(1888, ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR) \
+ _(1890, ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV) \
+ _(1896, ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST) \
+ _(1897, ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR) \
+ _(1898, ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR) \
+ _(1900, ZEND_FETCH_DIM_UNSET_SPEC_CV_CV) \
+ _(1911, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST) \
+ _(1912, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR) \
+ _(1913, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR) \
+ _(1915, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV) \
+ _(1916, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST) \
+ _(1917, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR) \
+ _(1918, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR) \
+ _(1920, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV) \
+ _(1921, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST) \
+ _(1922, ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR) \
+ _(1923, ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR) \
+ _(1925, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV) \
+ _(1926, ZEND_FETCH_LIST_R_SPEC_CONST_CONST) \
+ _(1927, ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR) \
+ _(1928, ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR) \
+ _(1930, ZEND_FETCH_LIST_R_SPEC_CONST_CV) \
+ _(1931, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \
+ _(1932, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
+ _(1933, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
+ _(1935, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \
+ _(1936, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \
+ _(1937, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
+ _(1938, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
+ _(1940, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \
+ _(1946, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \
+ _(1947, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
+ _(1948, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \
+ _(1950, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \
+ _(1951, ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST) \
+ _(1952, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST) \
+ _(1953, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_CONST) \
+ _(1958, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED) \
+ _(1959, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_UNUSED_QUICK) \
+ _(1962, ZEND_EXT_STMT_SPEC) \
+ _(1963, ZEND_EXT_FCALL_BEGIN_SPEC) \
+ _(1964, ZEND_EXT_FCALL_END_SPEC) \
+ _(1965, ZEND_EXT_NOP_SPEC) \
+ _(1966, ZEND_TICKS_SPEC) \
+ _(1967, ZEND_SEND_VAR_NO_REF_SPEC_VAR_CONST) \
+ _(1970, ZEND_SEND_VAR_NO_REF_SPEC_VAR_UNUSED) \
+ _(1972, ZEND_CATCH_SPEC_CONST) \
+ _(1973, ZEND_THROW_SPEC_CONST) \
+ _(1974, ZEND_THROW_SPEC_TMPVAR) \
+ _(1975, ZEND_THROW_SPEC_TMPVAR) \
+ _(1977, ZEND_THROW_SPEC_CV) \
+ _(1978, ZEND_FETCH_CLASS_SPEC_UNUSED_CONST) \
+ _(1979, ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR) \
+ _(1980, ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR) \
+ _(1981, ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED) \
+ _(1982, ZEND_FETCH_CLASS_SPEC_UNUSED_CV) \
+ _(1983, ZEND_CLONE_SPEC_CONST) \
+ _(1984, ZEND_CLONE_SPEC_TMPVAR) \
+ _(1985, ZEND_CLONE_SPEC_TMPVAR) \
+ _(1986, ZEND_CLONE_SPEC_UNUSED) \
+ _(1987, ZEND_CLONE_SPEC_CV) \
+ _(1988, ZEND_RETURN_BY_REF_SPEC_CONST) \
+ _(1989, ZEND_RETURN_BY_REF_SPEC_CONST_OBSERVER) \
+ _(1990, ZEND_RETURN_BY_REF_SPEC_TMP) \
+ _(1991, ZEND_RETURN_BY_REF_SPEC_TMP_OBSERVER) \
+ _(1992, ZEND_RETURN_BY_REF_SPEC_VAR) \
+ _(1993, ZEND_RETURN_BY_REF_SPEC_VAR_OBSERVER) \
+ _(1996, ZEND_RETURN_BY_REF_SPEC_CV) \
+ _(1997, ZEND_RETURN_BY_REF_SPEC_CV_OBSERVER) \
+ _(1998, ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST) \
+ _(1999, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) \
+ _(2000, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) \
+ _(2002, ZEND_INIT_METHOD_CALL_SPEC_CONST_CV) \
+ _(2003, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST) \
+ _(2004, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
+ _(2005, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
+ _(2007, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV) \
+ _(2008, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST) \
+ _(2009, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
+ _(2010, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \
+ _(2012, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV) \
+ _(2013, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST) \
+ _(2014, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
+ _(2015, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
+ _(2017, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV) \
+ _(2018, ZEND_INIT_METHOD_CALL_SPEC_CV_CONST) \
+ _(2019, ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR) \
+ _(2020, ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR) \
+ _(2022, ZEND_INIT_METHOD_CALL_SPEC_CV_CV) \
+ _(2023, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST) \
+ _(2024, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR) \
+ _(2025, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR) \
+ _(2026, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED) \
+ _(2027, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV) \
+ _(2033, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST) \
+ _(2034, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR) \
+ _(2035, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR) \
+ _(2036, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED) \
+ _(2037, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV) \
+ _(2038, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST) \
+ _(2039, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
+ _(2040, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR) \
+ _(2041, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED) \
+ _(2042, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV) \
+ _(2048, ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED) \
+ _(2049, ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED) \
+ _(2050, ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED) \
+ _(2052, ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED) \
+ _(2053, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST) \
+ _(2054, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR) \
+ _(2055, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR) \
+ _(2057, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV) \
+ _(2058, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST) \
+ _(2059, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
+ _(2060, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
+ _(2062, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV) \
+ _(2063, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST) \
+ _(2064, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
+ _(2065, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \
+ _(2067, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV) \
+ _(2073, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST) \
+ _(2074, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR) \
+ _(2075, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR) \
+ _(2077, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV) \
+ _(2078, ZEND_SEND_VAL_EX_SPEC_CONST_CONST) \
+ _(2079, ZEND_SEND_VAL_EX_SPEC_CONST_CONST) \
+ _(2084, ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED) \
+ _(2085, ZEND_SEND_VAL_EX_SPEC_CONST_UNUSED_QUICK) \
+ _(2088, ZEND_SEND_VAL_EX_SPEC_TMP_CONST) \
+ _(2089, ZEND_SEND_VAL_EX_SPEC_TMP_CONST) \
+ _(2094, ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED) \
+ _(2095, ZEND_SEND_VAL_EX_SPEC_TMP_UNUSED_QUICK) \
+ _(2138, ZEND_SEND_VAR_SPEC_VAR_CONST) \
+ _(2141, ZEND_SEND_VAR_SPEC_VAR_UNUSED) \
+ _(2148, ZEND_SEND_VAR_SPEC_CV_CONST) \
+ _(2151, ZEND_SEND_VAR_SPEC_CV_UNUSED) \
+ _(2153, ZEND_INIT_USER_CALL_SPEC_CONST_CONST) \
+ _(2154, ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR) \
+ _(2155, ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR) \
+ _(2157, ZEND_INIT_USER_CALL_SPEC_CONST_CV) \
+ _(2158, ZEND_SEND_ARRAY_SPEC) \
+ _(2159, ZEND_SEND_USER_SPEC_CONST) \
+ _(2160, ZEND_SEND_USER_SPEC_TMP) \
+ _(2161, ZEND_SEND_USER_SPEC_VAR) \
+ _(2163, ZEND_SEND_USER_SPEC_CV) \
+ _(2164, ZEND_STRLEN_SPEC_CONST) \
+ _(2165, ZEND_STRLEN_SPEC_TMPVAR) \
+ _(2166, ZEND_STRLEN_SPEC_TMPVAR) \
+ _(2168, ZEND_STRLEN_SPEC_CV) \
+ _(2169, ZEND_DEFINED_SPEC_CONST) \
+ _(2170, ZEND_TYPE_CHECK_SPEC_CONST) \
+ _(2171, ZEND_TYPE_CHECK_SPEC_TMPVAR) \
+ _(2172, ZEND_TYPE_CHECK_SPEC_TMPVAR) \
+ _(2174, ZEND_TYPE_CHECK_SPEC_CV) \
+ _(2175, ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED) \
+ _(2176, ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED) \
+ _(2177, ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED) \
+ _(2178, ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED) \
+ _(2179, ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED) \
+ _(2180, ZEND_FE_RESET_RW_SPEC_CONST) \
+ _(2181, ZEND_FE_RESET_RW_SPEC_TMP) \
+ _(2182, ZEND_FE_RESET_RW_SPEC_VAR) \
+ _(2184, ZEND_FE_RESET_RW_SPEC_CV) \
+ _(2185, ZEND_FE_FETCH_RW_SPEC_VAR) \
+ _(2186, ZEND_FE_FREE_SPEC_TMPVAR) \
+ _(2187, ZEND_INIT_DYNAMIC_CALL_SPEC_CONST) \
+ _(2188, ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR) \
+ _(2189, ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR) \
+ _(2191, ZEND_INIT_DYNAMIC_CALL_SPEC_CV) \
+ _(2192, ZEND_DO_ICALL_SPEC_RETVAL_UNUSED) \
+ _(2193, ZEND_DO_ICALL_SPEC_RETVAL_USED) \
+ _(2194, ZEND_DO_UCALL_SPEC_RETVAL_UNUSED) \
+ _(2195, ZEND_DO_UCALL_SPEC_RETVAL_USED) \
+ _(2196, ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_OBSERVER) \
+ _(2197, ZEND_DO_UCALL_SPEC_RETVAL_USED_OBSERVER) \
+ _(2198, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED) \
+ _(2199, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED) \
+ _(2200, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_OBSERVER) \
+ _(2201, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_OBSERVER) \
+ _(2212, ZEND_PRE_INC_OBJ_SPEC_VAR_CONST) \
+ _(2213, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
+ _(2214, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
+ _(2216, ZEND_PRE_INC_OBJ_SPEC_VAR_CV) \
+ _(2217, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST) \
+ _(2218, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(2219, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(2221, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV) \
+ _(2222, ZEND_PRE_INC_OBJ_SPEC_CV_CONST) \
+ _(2223, ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR) \
+ _(2224, ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR) \
+ _(2226, ZEND_PRE_INC_OBJ_SPEC_CV_CV) \
+ _(2237, ZEND_POST_INC_OBJ_SPEC_VAR_CONST) \
+ _(2238, ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR) \
+ _(2239, ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR) \
+ _(2241, ZEND_POST_INC_OBJ_SPEC_VAR_CV) \
+ _(2242, ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST) \
+ _(2243, ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(2244, ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(2246, ZEND_POST_INC_OBJ_SPEC_UNUSED_CV) \
+ _(2247, ZEND_POST_INC_OBJ_SPEC_CV_CONST) \
+ _(2248, ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR) \
+ _(2249, ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR) \
+ _(2251, ZEND_POST_INC_OBJ_SPEC_CV_CV) \
+ _(2252, ZEND_ECHO_SPEC_CONST) \
+ _(2253, ZEND_ECHO_SPEC_TMPVAR) \
+ _(2254, ZEND_ECHO_SPEC_TMPVAR) \
+ _(2256, ZEND_ECHO_SPEC_CV) \
+ _(2263, ZEND_INSTANCEOF_SPEC_TMPVAR_CONST) \
+ _(2265, ZEND_INSTANCEOF_SPEC_TMPVAR_VAR) \
+ _(2266, ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED) \
+ _(2268, ZEND_INSTANCEOF_SPEC_TMPVAR_CONST) \
+ _(2270, ZEND_INSTANCEOF_SPEC_TMPVAR_VAR) \
+ _(2271, ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED) \
+ _(2278, ZEND_INSTANCEOF_SPEC_CV_CONST) \
+ _(2280, ZEND_INSTANCEOF_SPEC_CV_VAR) \
+ _(2281, ZEND_INSTANCEOF_SPEC_CV_UNUSED) \
+ _(2283, ZEND_GENERATOR_CREATE_SPEC) \
+ _(2286, ZEND_MAKE_REF_SPEC_VAR_UNUSED) \
+ _(2288, ZEND_MAKE_REF_SPEC_CV_UNUSED) \
+ _(2289, ZEND_DECLARE_FUNCTION_SPEC) \
+ _(2290, ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED) \
+ _(2291, ZEND_DECLARE_CONST_SPEC_CONST_CONST) \
+ _(2292, ZEND_DECLARE_CLASS_SPEC_CONST) \
+ _(2293, ZEND_DECLARE_CLASS_DELAYED_SPEC_CONST_CONST) \
+ _(2294, ZEND_DECLARE_ANON_CLASS_SPEC) \
+ _(2295, ZEND_ADD_ARRAY_UNPACK_SPEC) \
+ _(2296, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST) \
+ _(2297, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR) \
+ _(2298, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR) \
+ _(2300, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV) \
+ _(2301, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST) \
+ _(2302, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
+ _(2303, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
+ _(2305, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV) \
+ _(2306, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST) \
+ _(2307, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
+ _(2308, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \
+ _(2310, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV) \
+ _(2311, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST) \
+ _(2312, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(2313, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR) \
+ _(2315, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV) \
+ _(2316, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST) \
+ _(2317, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR) \
+ _(2318, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR) \
+ _(2320, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV) \
+ _(2321, ZEND_HANDLE_EXCEPTION_SPEC) \
+ _(2322, ZEND_HANDLE_EXCEPTION_SPEC_OBSERVER) \
+ _(2323, ZEND_USER_OPCODE_SPEC) \
+ _(2324, ZEND_ASSERT_CHECK_SPEC) \
+ _(2325, ZEND_JMP_SET_SPEC_CONST) \
+ _(2326, ZEND_JMP_SET_SPEC_TMP) \
+ _(2327, ZEND_JMP_SET_SPEC_VAR) \
+ _(2329, ZEND_JMP_SET_SPEC_CV) \
+ _(2330, ZEND_UNSET_CV_SPEC_CV_UNUSED) \
+ _(2331, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET) \
+ _(2332, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY) \
+ _(2333, ZEND_FETCH_LIST_W_SPEC_VAR_CONST) \
+ _(2334, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \
+ _(2335, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \
+ _(2337, ZEND_FETCH_LIST_W_SPEC_VAR_CV) \
+ _(2338, ZEND_SEPARATE_SPEC_VAR_UNUSED) \
+ _(2340, ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR) \
+ _(2341, ZEND_FETCH_CLASS_NAME_SPEC_TMPVAR) \
+ _(2342, ZEND_FETCH_CLASS_NAME_SPEC_UNUSED) \
+ _(2343, ZEND_FETCH_CLASS_NAME_SPEC_CV) \
+ _(2344, ZEND_CALL_TRAMPOLINE_SPEC) \
+ _(2345, ZEND_CALL_TRAMPOLINE_SPEC_OBSERVER) \
+ _(2346, ZEND_DISCARD_EXCEPTION_SPEC) \
+ _(2347, ZEND_YIELD_SPEC_CONST_CONST) \
+ _(2348, ZEND_YIELD_SPEC_CONST_TMPVAR) \
+ _(2349, ZEND_YIELD_SPEC_CONST_TMPVAR) \
+ _(2350, ZEND_YIELD_SPEC_CONST_UNUSED) \
+ _(2351, ZEND_YIELD_SPEC_CONST_CV) \
+ _(2352, ZEND_YIELD_SPEC_TMP_CONST) \
+ _(2353, ZEND_YIELD_SPEC_TMP_TMPVAR) \
+ _(2354, ZEND_YIELD_SPEC_TMP_TMPVAR) \
+ _(2355, ZEND_YIELD_SPEC_TMP_UNUSED) \
+ _(2356, ZEND_YIELD_SPEC_TMP_CV) \
+ _(2357, ZEND_YIELD_SPEC_VAR_CONST) \
+ _(2358, ZEND_YIELD_SPEC_VAR_TMPVAR) \
+ _(2359, ZEND_YIELD_SPEC_VAR_TMPVAR) \
+ _(2360, ZEND_YIELD_SPEC_VAR_UNUSED) \
+ _(2361, ZEND_YIELD_SPEC_VAR_CV) \
+ _(2362, ZEND_YIELD_SPEC_UNUSED_CONST) \
+ _(2363, ZEND_YIELD_SPEC_UNUSED_TMPVAR) \
+ _(2364, ZEND_YIELD_SPEC_UNUSED_TMPVAR) \
+ _(2365, ZEND_YIELD_SPEC_UNUSED_UNUSED) \
+ _(2366, ZEND_YIELD_SPEC_UNUSED_CV) \
+ _(2367, ZEND_YIELD_SPEC_CV_CONST) \
+ _(2368, ZEND_YIELD_SPEC_CV_TMPVAR) \
+ _(2369, ZEND_YIELD_SPEC_CV_TMPVAR) \
+ _(2370, ZEND_YIELD_SPEC_CV_UNUSED) \
+ _(2371, ZEND_YIELD_SPEC_CV_CV) \
+ _(2372, ZEND_GENERATOR_RETURN_SPEC_CONST) \
+ _(2373, ZEND_GENERATOR_RETURN_SPEC_CONST_OBSERVER) \
+ _(2374, ZEND_GENERATOR_RETURN_SPEC_TMP) \
+ _(2375, ZEND_GENERATOR_RETURN_SPEC_TMP_OBSERVER) \
+ _(2376, ZEND_GENERATOR_RETURN_SPEC_VAR) \
+ _(2377, ZEND_GENERATOR_RETURN_SPEC_VAR_OBSERVER) \
+ _(2380, ZEND_GENERATOR_RETURN_SPEC_CV) \
+ _(2381, ZEND_GENERATOR_RETURN_SPEC_CV_OBSERVER) \
+ _(2382, ZEND_FAST_CALL_SPEC) \
+ _(2383, ZEND_FAST_RET_SPEC) \
+ _(2384, ZEND_RECV_VARIADIC_SPEC_UNUSED) \
+ _(2385, ZEND_SEND_UNPACK_SPEC) \
+ _(2386, ZEND_YIELD_FROM_SPEC_CONST) \
+ _(2387, ZEND_YIELD_FROM_SPEC_TMPVAR) \
+ _(2388, ZEND_YIELD_FROM_SPEC_TMPVAR) \
+ _(2390, ZEND_YIELD_FROM_SPEC_CV) \
+ _(2391, ZEND_COPY_TMP_SPEC_TMPVAR_UNUSED) \
+ _(2392, ZEND_BIND_GLOBAL_SPEC_CV_CONST) \
+ _(2393, ZEND_COALESCE_SPEC_CONST) \
+ _(2394, ZEND_COALESCE_SPEC_TMP) \
+ _(2395, ZEND_COALESCE_SPEC_VAR) \
+ _(2397, ZEND_COALESCE_SPEC_CV) \
+ _(2398, ZEND_SPACESHIP_SPEC_CONST_CONST) \
+ _(2399, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \
+ _(2400, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \
+ _(2402, ZEND_SPACESHIP_SPEC_CONST_CV) \
+ _(2403, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \
+ _(2404, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
+ _(2405, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
+ _(2407, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \
+ _(2408, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \
+ _(2409, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
+ _(2410, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \
+ _(2412, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \
+ _(2418, ZEND_SPACESHIP_SPEC_CV_CONST) \
+ _(2419, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \
+ _(2420, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \
+ _(2422, ZEND_SPACESHIP_SPEC_CV_CV) \
+ _(2423, ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED) \
+ _(2424, ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED) \
+ _(2427, ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED) \
+ _(2429, ZEND_FETCH_STATIC_PROP_R_SPEC) \
+ _(2430, ZEND_FETCH_STATIC_PROP_W_SPEC) \
+ _(2431, ZEND_FETCH_STATIC_PROP_RW_SPEC) \
+ _(2432, ZEND_FETCH_STATIC_PROP_IS_SPEC) \
+ _(2433, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC) \
+ _(2434, ZEND_FETCH_STATIC_PROP_UNSET_SPEC) \
+ _(2435, ZEND_UNSET_STATIC_PROP_SPEC) \
+ _(2436, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC) \
+ _(2437, ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST) \
+ _(2439, ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST) \
+ _(2440, ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST) \
+ _(2442, ZEND_BIND_LEXICAL_SPEC_TMP_CV) \
+ _(2443, ZEND_BIND_STATIC_SPEC_CV_UNUSED) \
+ _(2444, ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED) \
+ _(2445, ZEND_SEND_FUNC_ARG_SPEC_VAR_CONST) \
+ _(2448, ZEND_SEND_FUNC_ARG_SPEC_VAR_UNUSED) \
+ _(2450, ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED) \
+ _(2451, ZEND_SWITCH_LONG_SPEC_CONST_CONST) \
+ _(2452, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \
+ _(2453, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \
+ _(2455, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \
+ _(2456, ZEND_SWITCH_STRING_SPEC_CONST_CONST) \
+ _(2457, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \
+ _(2458, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \
+ _(2460, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \
+ _(2461, ZEND_IN_ARRAY_SPEC_CONST_CONST) \
+ _(2462, ZEND_IN_ARRAY_SPEC_TMP_CONST) \
+ _(2463, ZEND_IN_ARRAY_SPEC_VAR_CONST) \
+ _(2465, ZEND_IN_ARRAY_SPEC_CV_CONST) \
+ _(2466, ZEND_COUNT_SPEC_CONST_UNUSED) \
+ _(2467, ZEND_COUNT_SPEC_TMPVAR_UNUSED) \
+ _(2468, ZEND_COUNT_SPEC_TMPVAR_UNUSED) \
+ _(2470, ZEND_COUNT_SPEC_CV_UNUSED) \
+ _(2471, ZEND_GET_CLASS_SPEC_CONST_UNUSED) \
+ _(2472, ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED) \
+ _(2473, ZEND_GET_CLASS_SPEC_TMPVAR_UNUSED) \
+ _(2474, ZEND_GET_CLASS_SPEC_UNUSED_UNUSED) \
+ _(2475, ZEND_GET_CLASS_SPEC_CV_UNUSED) \
+ _(2476, ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED) \
+ _(2477, ZEND_GET_TYPE_SPEC_CONST_UNUSED) \
+ _(2478, ZEND_GET_TYPE_SPEC_TMP_UNUSED) \
+ _(2479, ZEND_GET_TYPE_SPEC_VAR_UNUSED) \
+ _(2481, ZEND_GET_TYPE_SPEC_CV_UNUSED) \
+ _(2482, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CONST) \
+ _(2483, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR) \
+ _(2484, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_TMPVAR) \
+ _(2486, ZEND_ARRAY_KEY_EXISTS_SPEC_CONST_CV) \
+ _(2487, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST) \
+ _(2488, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
+ _(2489, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
+ _(2491, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV) \
+ _(2492, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CONST) \
+ _(2493, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
+ _(2494, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_TMPVAR) \
+ _(2496, ZEND_ARRAY_KEY_EXISTS_SPEC_TMPVAR_CV) \
+ _(2502, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CONST) \
+ _(2503, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR) \
+ _(2504, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_TMPVAR) \
+ _(2506, ZEND_ARRAY_KEY_EXISTS_SPEC_CV_CV) \
+ _(2507, ZEND_MATCH_SPEC_CONST_CONST) \
+ _(2508, ZEND_MATCH_SPEC_TMPVARCV_CONST) \
+ _(2509, ZEND_MATCH_SPEC_TMPVARCV_CONST) \
+ _(2511, ZEND_MATCH_SPEC_TMPVARCV_CONST) \
+ _(2517, ZEND_CASE_STRICT_SPEC_TMP_CONST) \
+ _(2518, ZEND_CASE_STRICT_SPEC_TMP_TMP) \
+ _(2519, ZEND_CASE_STRICT_SPEC_TMP_VAR) \
+ _(2521, ZEND_CASE_STRICT_SPEC_TMP_CV) \
+ _(2522, ZEND_CASE_STRICT_SPEC_VAR_CONST) \
+ _(2523, ZEND_CASE_STRICT_SPEC_VAR_TMP) \
+ _(2524, ZEND_CASE_STRICT_SPEC_VAR_VAR) \
+ _(2526, ZEND_CASE_STRICT_SPEC_VAR_CV) \
+ _(2537, ZEND_MATCH_ERROR_SPEC_CONST_UNUSED) \
+ _(2538, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
+ _(2539, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
+ _(2541, ZEND_MATCH_ERROR_SPEC_TMPVARCV_UNUSED) \
+ _(2542, ZEND_JMP_NULL_SPEC_CONST) \
+ _(2543, ZEND_JMP_NULL_SPEC_TMPVARCV) \
+ _(2544, ZEND_JMP_NULL_SPEC_TMPVARCV) \
+ _(2546, ZEND_JMP_NULL_SPEC_TMPVARCV) \
+ _(2547, ZEND_CHECK_UNDEF_ARGS_SPEC_UNUSED_UNUSED) \
+ _(2548, ZEND_RECV_NOTYPE_SPEC) \
+ _(2549, ZEND_JMP_FORWARD_SPEC) \
+ _(2555, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2556, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2557, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2559, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2560, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2561, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2562, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2564, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2570, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2571, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2572, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2574, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2580, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
+ _(2581, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2582, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2584, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2585, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
+ _(2586, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2587, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2589, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2595, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \
+ _(2596, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2597, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2599, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2605, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2606, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2607, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2609, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2610, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2611, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2612, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2614, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2620, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2621, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2622, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2624, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2626, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \
+ _(2627, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \
+ _(2629, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \
+ _(2630, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2631, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2632, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2634, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2635, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2636, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2637, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2639, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2645, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2646, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2647, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2649, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2651, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \
+ _(2652, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \
+ _(2654, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \
+ _(2655, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
+ _(2656, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2657, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2659, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2660, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
+ _(2661, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2662, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2664, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2670, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \
+ _(2671, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2672, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2674, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2676, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \
+ _(2677, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \
+ _(2679, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \
+ _(2680, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2681, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2682, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2684, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2685, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2686, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2687, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2689, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2695, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2696, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2697, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2699, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2705, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2706, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2707, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2709, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2710, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2711, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2712, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2714, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2720, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \
+ _(2721, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2722, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2724, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \
+ _(2730, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2731, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2732, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2734, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2735, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2736, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2737, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2739, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2745, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2746, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2747, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2749, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2755, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2756, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2757, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2759, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2760, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2761, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2762, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2764, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2770, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2771, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2772, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2774, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2790, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2791, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2792, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2793, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2794, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2795, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2796, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2797, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2798, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2802, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2803, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2804, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2805, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2806, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2807, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2808, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2809, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2810, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2811, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2812, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2813, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2817, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2818, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2819, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2835, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2836, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2837, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2838, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2839, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2840, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2841, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2842, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2843, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2847, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2848, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2849, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2865, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2866, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2867, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2868, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2869, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2870, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2871, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2872, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2873, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2877, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2878, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2879, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2880, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2881, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2882, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2883, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2884, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2885, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2886, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2887, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2888, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2892, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2893, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2894, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2910, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(2911, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2912, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2913, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2914, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2915, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2916, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2917, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2918, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2922, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(2923, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2924, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2940, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2941, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2942, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2943, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2944, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2945, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2946, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2947, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2948, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2952, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2953, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2954, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2955, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2956, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2957, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2958, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2959, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2960, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2961, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2962, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2963, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2967, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2968, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2969, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2985, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(2986, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(2987, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(2988, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2989, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2990, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2991, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2992, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2993, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(2997, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(2998, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(2999, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3015, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3016, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3017, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3018, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3019, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3020, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3021, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3022, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3023, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3027, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3028, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3029, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3030, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3031, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3032, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3033, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3034, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3035, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3036, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3037, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3038, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3042, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3043, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3044, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3060, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3061, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3062, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3063, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3064, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3065, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3066, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3067, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3068, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3072, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3073, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3074, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3075, ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CONST) \
+ _(3079, ZEND_IS_IDENTICAL_NOTHROW_SPEC_CV_CV) \
+ _(3080, ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CONST) \
+ _(3084, ZEND_IS_NOT_IDENTICAL_NOTHROW_SPEC_CV_CV) \
+ _(3088, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \
+ _(3089, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3090, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3091, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \
+ _(3092, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3093, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3097, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \
+ _(3098, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3099, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3100, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
+ _(3101, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3102, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3103, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3104, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3105, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3106, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3107, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3108, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3112, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3113, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3114, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3115, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
+ _(3116, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3117, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3118, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3119, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3120, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3121, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3122, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3123, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3127, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3128, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3129, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3145, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \
+ _(3146, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3147, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3148, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3149, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3150, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3151, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3152, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3153, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3157, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3158, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3159, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3163, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \
+ _(3164, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3165, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3166, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \
+ _(3167, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3168, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3172, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \
+ _(3173, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3174, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3175, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3176, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3177, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3178, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3179, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3180, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3181, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3182, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3183, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3187, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3188, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3189, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3190, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3191, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3192, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3193, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3194, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3195, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3196, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3197, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3198, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3202, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3203, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3204, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3220, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3221, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3222, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3223, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3224, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3225, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3226, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3227, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3228, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3232, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3233, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3234, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3238, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \
+ _(3239, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3240, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3241, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \
+ _(3242, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3243, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3247, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \
+ _(3248, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3249, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3250, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(3251, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3252, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3253, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3254, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3255, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3256, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3257, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3258, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3262, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3263, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3264, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3265, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(3266, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3267, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3268, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3269, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3270, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3271, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3272, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3273, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3277, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3278, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3279, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3295, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \
+ _(3296, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3297, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3298, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3299, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3300, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3301, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3302, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3303, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3307, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \
+ _(3308, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3309, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3313, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \
+ _(3314, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3315, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3316, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \
+ _(3317, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3318, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3322, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \
+ _(3323, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \
+ _(3324, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \
+ _(3325, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3326, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3327, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3328, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3329, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3330, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3331, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3332, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3333, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3337, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3338, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3339, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3340, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3341, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3342, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3343, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3344, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3345, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3346, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3347, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3348, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3352, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3353, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3354, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3370, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \
+ _(3371, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \
+ _(3372, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \
+ _(3373, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3374, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3375, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3376, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3377, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3378, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3382, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \
+ _(3383, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \
+ _(3384, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \
+ _(3385, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \
+ _(3386, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \
+ _(3387, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED) \
+ _(3388, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED) \
+ _(3389, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \
+ _(3390, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \
+ _(3391, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED) \
+ _(3392, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED) \
+ _(3393, ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV) \
+ _(3394, ZEND_POST_INC_LONG_SPEC_CV) \
+ _(3395, ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV) \
+ _(3396, ZEND_POST_DEC_LONG_SPEC_CV) \
+ _(3397, ZEND_QM_ASSIGN_LONG_SPEC_CONST) \
+ _(3398, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \
+ _(3399, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \
+ _(3401, ZEND_QM_ASSIGN_LONG_SPEC_TMPVARCV) \
+ _(3402, ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST) \
+ _(3403, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \
+ _(3404, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \
+ _(3406, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \
+ _(3407, ZEND_QM_ASSIGN_NOREF_SPEC_CONST) \
+ _(3408, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \
+ _(3409, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \
+ _(3411, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \
+ _(3413, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \
+ _(3414, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \
+ _(3416, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \
+ _(3417, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \
+ _(3418, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
+ _(3419, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
+ _(3421, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
+ _(3422, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \
+ _(3423, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
+ _(3424, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
+ _(3426, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \
+ _(3432, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST) \
+ _(3433, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \
+ _(3434, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \
+ _(3436, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \
+ _(3439, ZEND_SEND_VAR_SIMPLE_SPEC_VAR) \
+ _(3441, ZEND_SEND_VAR_SIMPLE_SPEC_CV) \
+ _(3444, ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_UNUSED) \
+ _(3446, ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_UNUSED) \
+ _(3447, ZEND_SEND_VAL_SIMPLE_SPEC_CONST) \
+ _(3448, ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST) \
+ _(3449, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED) \
+ _(3450, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED) \
+ _(3450+1, ZEND_NULL)
diff --git a/configure.ac b/configure.ac
index 116bb6031f..7e7f3edec4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1458,7 +1458,8 @@ PHP_ADD_SOURCES(Zend, \
zend_iterators.c zend_interfaces.c zend_exceptions.c zend_strtod.c zend_gc.c \
zend_closures.c zend_weakrefs.c zend_float.c zend_string.c zend_signal.c zend_generators.c \
zend_virtual_cwd.c zend_ast.c zend_objects.c zend_object_handlers.c zend_objects_API.c \
- zend_default_classes.c zend_inheritance.c zend_smart_str.c zend_cpuinfo.c zend_gdb.c, \
+ zend_default_classes.c zend_inheritance.c zend_smart_str.c zend_cpuinfo.c zend_gdb.c \
+ zend_observer.c, \
-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
PHP_ADD_BUILD_DIR(main main/streams)
diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c
index 9ee1a5b5d7..725b33d913 100644
--- a/ext/opcache/ZendAccelerator.c
+++ b/ext/opcache/ZendAccelerator.c
@@ -44,6 +44,7 @@
#include "zend_accelerator_util_funcs.h"
#include "zend_accelerator_hash.h"
#include "zend_file_cache.h"
+#include "zend_observer.h"
#include "ext/pcre/php_pcre.h"
#include "ext/standard/md5.h"
#include "ext/hash/php_hash.h"
@@ -2977,6 +2978,15 @@ static zend_result accel_post_startup(void)
}
}
+#ifdef HAVE_JIT
+ /* TODO Observer support for JIT */
+ if (ZEND_OBSERVER_ENABLED) {
+ JIT_G(enabled) = 0;
+ JIT_G(on) = 0;
+ zend_accel_error(ACCEL_LOG_INFO, "Observer extension present. Disabling JIT.");
+ }
+#endif
+
/* Initialize zend_func_info_rid */
zend_optimizer_startup();
diff --git a/ext/zend_test/test.c b/ext/zend_test/test.c
index 900c70f59d..64fd421292 100644
--- a/ext/zend_test/test.c
+++ b/ext/zend_test/test.c
@@ -21,9 +21,27 @@
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
+#include "ext/standard/php_var.h"
#include "php_test.h"
#include "test_arginfo.h"
#include "zend_attributes.h"
+#include "zend_observer.h"
+#include "zend_smart_str.h"
+
+ZEND_BEGIN_MODULE_GLOBALS(zend_test)
+ int observer_enabled;
+ int observer_show_output;
+ int observer_observe_all;
+ int observer_observe_includes;
+ int observer_observe_functions;
+ int observer_show_return_type;
+ int observer_show_return_value;
+ int observer_nesting_depth;
+ZEND_END_MODULE_GLOBALS(zend_test)
+
+ZEND_DECLARE_MODULE_GLOBALS(zend_test)
+
+#define ZT_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(zend_test, v)
static zend_class_entry *zend_test_interface;
static zend_class_entry *zend_test_class;
@@ -277,6 +295,18 @@ ZEND_METHOD(_ZendTestTrait, testMethod) /* {{{ */ {
}
/* }}} */
+PHP_INI_BEGIN()
+ STD_PHP_INI_BOOLEAN("zend_test.observer.enabled", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_enabled, zend_zend_test_globals, zend_test_globals)
+ STD_PHP_INI_BOOLEAN("zend_test.observer.show_output", "1", PHP_INI_SYSTEM, OnUpdateBool, observer_show_output, zend_zend_test_globals, zend_test_globals)
+ STD_PHP_INI_BOOLEAN("zend_test.observer.observe_all", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_observe_all, zend_zend_test_globals, zend_test_globals)
+ STD_PHP_INI_BOOLEAN("zend_test.observer.observe_includes", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_observe_includes, zend_zend_test_globals, zend_test_globals)
+ STD_PHP_INI_BOOLEAN("zend_test.observer.observe_functions", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_observe_functions, zend_zend_test_globals, zend_test_globals)
+ STD_PHP_INI_BOOLEAN("zend_test.observer.show_return_type", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_show_return_type, zend_zend_test_globals, zend_test_globals)
+ STD_PHP_INI_BOOLEAN("zend_test.observer.show_return_value", "0", PHP_INI_SYSTEM, OnUpdateBool, observer_show_return_value, zend_zend_test_globals, zend_test_globals)
+PHP_INI_END()
+
+static zend_observer_fcall observer_fcall_init(zend_function *fbc);
+
PHP_MINIT_FUNCTION(zend_test)
{
zend_class_entry class_entry;
@@ -362,19 +392,118 @@ PHP_MINIT_FUNCTION(zend_test)
attr->validator = zend_attribute_validate_zendtestattribute;
}
+ // Loading via dl() not supported with the observer API
+ if (type != MODULE_TEMPORARY) {
+ REGISTER_INI_ENTRIES();
+ if (ZT_G(observer_enabled)) {
+ zend_observer_fcall_register(observer_fcall_init);
+ }
+ } else {
+ (void)ini_entries;
+ }
+
return SUCCESS;
}
PHP_MSHUTDOWN_FUNCTION(zend_test)
{
+ if (type != MODULE_TEMPORARY) {
+ UNREGISTER_INI_ENTRIES();
+ }
+
return SUCCESS;
}
+static void observer_begin(zend_execute_data *execute_data)
+{
+ if (!ZT_G(observer_show_output)) {
+ return;
+ }
+
+ if (execute_data->func && execute_data->func->common.function_name) {
+ if (execute_data->func->common.scope) {
+ php_printf("%*s<%s::%s>\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(execute_data->func->common.scope->name), ZSTR_VAL(execute_data->func->common.function_name));
+ } else {
+ php_printf("%*s<%s>\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(execute_data->func->common.function_name));
+ }
+ } else {
+ php_printf("%*s<file '%s'>\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(execute_data->func->op_array.filename));
+ }
+ ZT_G(observer_nesting_depth)++;
+}
+
+static void get_retval_info(zval *retval, smart_str *buf)
+{
+ if (!ZT_G(observer_show_return_type) && !ZT_G(observer_show_return_value)) {
+ return;
+ }
+
+ smart_str_appendc(buf, ':');
+ if (retval == NULL) {
+ smart_str_appendl(buf, "NULL", 4);
+ } else if (ZT_G(observer_show_return_value)) {
+ php_var_export_ex(retval, 2 * ZT_G(observer_nesting_depth) + 3, buf);
+ } else if (ZT_G(observer_show_return_type)) {
+ smart_str_appends(buf, zend_zval_type_name(retval));
+ }
+ smart_str_0(buf);
+}
+
+static void observer_end(zend_execute_data *execute_data, zval *retval)
+{
+ if (!ZT_G(observer_show_output)) {
+ return;
+ }
+
+ if (EG(exception)) {
+ php_printf("%*s<!-- Exception: %s -->\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(EG(exception)->ce->name));
+ }
+ ZT_G(observer_nesting_depth)--;
+ if (execute_data->func && execute_data->func->common.function_name) {
+ smart_str retval_info = {0};
+ get_retval_info(retval, &retval_info);
+ if (execute_data->func->common.scope) {
+ php_printf("%*s</%s::%s%s>\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(execute_data->func->common.scope->name), ZSTR_VAL(execute_data->func->common.function_name), retval_info.s ? ZSTR_VAL(retval_info.s) : "");
+ } else {
+ php_printf("%*s</%s%s>\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(execute_data->func->common.function_name), retval_info.s ? ZSTR_VAL(retval_info.s) : "");
+ }
+ smart_str_free(&retval_info);
+ } else {
+ php_printf("%*s</file '%s'>\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(execute_data->func->op_array.filename));
+ }
+}
+
+static void observer_show_init(zend_function *fbc)
+{
+ if (fbc->common.function_name) {
+ if (fbc->common.scope) {
+ php_printf("%*s<!-- init %s::%s() -->\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name));
+ } else {
+ php_printf("%*s<!-- init %s() -->\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(fbc->common.function_name));
+ }
+ } else {
+ php_printf("%*s<!-- init '%s' -->\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(fbc->op_array.filename));
+ }
+}
+
+static zend_observer_fcall observer_fcall_init(zend_function *fbc)
+{
+ if (ZT_G(observer_show_output)) {
+ observer_show_init(fbc);
+ }
+
+ if (ZT_G(observer_observe_all)) {
+ return (zend_observer_fcall){observer_begin, observer_end};
+ } else if (ZT_G(observer_observe_includes) && !fbc->common.function_name) {
+ return (zend_observer_fcall){observer_begin, observer_end};
+ } else if (ZT_G(observer_observe_functions) && fbc->common.function_name) {
+ return (zend_observer_fcall){observer_begin, observer_end};
+ }
+ return (zend_observer_fcall){NULL, NULL};
+}
+
PHP_RINIT_FUNCTION(zend_test)
{
-#if defined(COMPILE_DL_ZEND_TEST) && defined(ZTS)
- ZEND_TSRMLS_CACHE_UPDATE();
-#endif
return SUCCESS;
}
@@ -383,11 +512,21 @@ PHP_RSHUTDOWN_FUNCTION(zend_test)
return SUCCESS;
}
+static PHP_GINIT_FUNCTION(zend_test)
+{
+#if defined(COMPILE_DL_ZEND_TEST) && defined(ZTS)
+ ZEND_TSRMLS_CACHE_UPDATE();
+#endif
+ memset(zend_test_globals, 0, sizeof(*zend_test_globals));
+}
+
PHP_MINFO_FUNCTION(zend_test)
{
php_info_print_table_start();
php_info_print_table_header(2, "zend-test extension", "enabled");
php_info_print_table_end();
+
+ DISPLAY_INI_ENTRIES();
}
zend_module_entry zend_test_module_entry = {
@@ -400,7 +539,11 @@ zend_module_entry zend_test_module_entry = {
PHP_RSHUTDOWN(zend_test),
PHP_MINFO(zend_test),
PHP_ZEND_TEST_VERSION,
- STANDARD_MODULE_PROPERTIES
+ PHP_MODULE_GLOBALS(zend_test),
+ PHP_GINIT(zend_test),
+ NULL,
+ NULL,
+ STANDARD_MODULE_PROPERTIES_EX
};
#ifdef COMPILE_DL_ZEND_TEST
diff --git a/ext/zend_test/tests/observer.inc b/ext/zend_test/tests/observer.inc
new file mode 100644
index 0000000000..611e9fa0e6
--- /dev/null
+++ b/ext/zend_test/tests/observer.inc
@@ -0,0 +1,8 @@
+<?php
+
+function foo_observer_test()
+{
+ echo __FUNCTION__ . PHP_EOL;
+}
+
+foo_observer_test();
diff --git a/ext/zend_test/tests/observer_basic_01.phpt b/ext/zend_test/tests/observer_basic_01.phpt
new file mode 100644
index 0000000000..9e31204dbe
--- /dev/null
+++ b/ext/zend_test/tests/observer_basic_01.phpt
@@ -0,0 +1,55 @@
+--TEST--
+Observer: Basic observability of userland functions
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+--FILE--
+<?php
+function bar()
+{
+ echo 'Bar' . PHP_EOL;
+ var_dump(array_sum([1,2,3]));
+}
+
+function foo()
+{
+ echo 'Foo' . PHP_EOL;
+ bar();
+}
+
+foo();
+foo();
+foo();
+
+echo 'DONE' . PHP_EOL;
+?>
+--EXPECTF--
+<!-- init '%s/observer_basic_01.php' -->
+<file '%s/observer_basic_01.php'>
+ <!-- init foo() -->
+ <foo>
+Foo
+ <!-- init bar() -->
+ <bar>
+Bar
+int(6)
+ </bar>
+ </foo>
+ <foo>
+Foo
+ <bar>
+Bar
+int(6)
+ </bar>
+ </foo>
+ <foo>
+Foo
+ <bar>
+Bar
+int(6)
+ </bar>
+ </foo>
+DONE
+</file '%s/observer_basic_01.php'>
diff --git a/ext/zend_test/tests/observer_basic_02.phpt b/ext/zend_test/tests/observer_basic_02.phpt
new file mode 100644
index 0000000000..9d16b4fe18
--- /dev/null
+++ b/ext/zend_test/tests/observer_basic_02.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Observer: Basic observability of userland methods
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+--FILE--
+<?php
+class TestClass
+{
+ private function bar()
+ {
+ echo 'Bar' . PHP_EOL;
+ var_dump(array_sum([1,2,3]));
+ }
+
+ public function foo()
+ {
+ echo 'Foo' . PHP_EOL;
+ $this->bar();
+ }
+}
+
+$test = new TestClass();
+$test->foo();
+$test->foo();
+$test->foo();
+
+echo 'DONE' . PHP_EOL;
+?>
+--EXPECTF--
+<!-- init '%s/observer_basic_02.php' -->
+<file '%s/observer_basic_02.php'>
+ <!-- init TestClass::foo() -->
+ <TestClass::foo>
+Foo
+ <!-- init TestClass::bar() -->
+ <TestClass::bar>
+Bar
+int(6)
+ </TestClass::bar>
+ </TestClass::foo>
+ <TestClass::foo>
+Foo
+ <TestClass::bar>
+Bar
+int(6)
+ </TestClass::bar>
+ </TestClass::foo>
+ <TestClass::foo>
+Foo
+ <TestClass::bar>
+Bar
+int(6)
+ </TestClass::bar>
+ </TestClass::foo>
+DONE
+</file '%s/observer_basic_02.php'>
diff --git a/ext/zend_test/tests/observer_basic_03.phpt b/ext/zend_test/tests/observer_basic_03.phpt
new file mode 100644
index 0000000000..6a2d0b16ee
--- /dev/null
+++ b/ext/zend_test/tests/observer_basic_03.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Observer: Basic observability of includes
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+--FILE--
+<?php
+function foo()
+{
+ echo 'Foo' . PHP_EOL;
+}
+
+foo();
+include __DIR__ . '/observer.inc';
+foo();
+?>
+--EXPECTF--
+<!-- init '%s/observer_basic_03.php' -->
+<file '%s/observer_basic_03.php'>
+ <!-- init foo() -->
+ <foo>
+Foo
+ </foo>
+ <!-- init '%s/observer.inc' -->
+ <file '%s/observer.inc'>
+ <!-- init foo_observer_test() -->
+ <foo_observer_test>
+foo_observer_test
+ </foo_observer_test>
+ </file '%s/observer.inc'>
+ <foo>
+Foo
+ </foo>
+</file '%s/observer_basic_03.php'>
diff --git a/ext/zend_test/tests/observer_basic_04.phpt b/ext/zend_test/tests/observer_basic_04.phpt
new file mode 100644
index 0000000000..6c0a8df59d
--- /dev/null
+++ b/ext/zend_test/tests/observer_basic_04.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Observer: Basic observability of includes only (no functions)
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_includes=1
+--FILE--
+<?php
+function foo()
+{
+ echo 'Foo' . PHP_EOL;
+}
+
+foo();
+include __DIR__ . '/observer.inc';
+foo();
+?>
+--EXPECTF--
+<!-- init '%s/observer_basic_04.php' -->
+<file '%s/observer_basic_04.php'>
+ <!-- init foo() -->
+Foo
+ <!-- init '%s/observer.inc' -->
+ <file '%s/observer.inc'>
+ <!-- init foo_observer_test() -->
+foo_observer_test
+ </file '%s/observer.inc'>
+Foo
+</file '%s/observer_basic_04.php'>
diff --git a/ext/zend_test/tests/observer_basic_05.phpt b/ext/zend_test/tests/observer_basic_05.phpt
new file mode 100644
index 0000000000..27462aadb3
--- /dev/null
+++ b/ext/zend_test/tests/observer_basic_05.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Observer: Basic observability of functions only (no includes)
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_functions=1
+--FILE--
+<?php
+function foo()
+{
+ echo 'Foo' . PHP_EOL;
+}
+
+foo();
+include __DIR__ . '/observer.inc';
+foo();
+?>
+--EXPECTF--
+<!-- init '%s/observer_basic_05.php' -->
+<!-- init foo() -->
+<foo>
+Foo
+</foo>
+<!-- init '%s/observer.inc' -->
+<!-- init foo_observer_test() -->
+<foo_observer_test>
+foo_observer_test
+</foo_observer_test>
+<foo>
+Foo
+</foo>
diff --git a/ext/zend_test/tests/observer_closure_01.phpt b/ext/zend_test/tests/observer_closure_01.phpt
new file mode 100644
index 0000000000..3e120493bc
--- /dev/null
+++ b/ext/zend_test/tests/observer_closure_01.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Observer: Basic observability of closures
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+--FILE--
+<?php
+$bar = function() {
+ var_dump(array_sum([40,2]));
+};
+
+$foo = function($bar) {
+ echo 'Answer' . PHP_EOL;
+ $bar();
+};
+
+$foo($bar);
+$foo($bar);
+$foo($bar);
+
+echo 'DONE' . PHP_EOL;
+?>
+--EXPECTF--
+<!-- init '%s/observer_closure_%d.php' -->
+<file '%s/observer_closure_%d.php'>
+ <!-- init {closure}() -->
+ <{closure}>
+Answer
+ <!-- init {closure}() -->
+ <{closure}>
+int(42)
+ </{closure}>
+ </{closure}>
+ <{closure}>
+Answer
+ <{closure}>
+int(42)
+ </{closure}>
+ </{closure}>
+ <{closure}>
+Answer
+ <{closure}>
+int(42)
+ </{closure}>
+ </{closure}>
+DONE
+</file '%s/observer_closure_%d.php'>
diff --git a/ext/zend_test/tests/observer_eval_01.phpt b/ext/zend_test/tests/observer_eval_01.phpt
new file mode 100644
index 0000000000..1a230c7d96
--- /dev/null
+++ b/ext/zend_test/tests/observer_eval_01.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Observer: Basic eval observability
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+--FILE--
+<?php
+echo eval("return 'Foo eval' . PHP_EOL;");
+echo 'DONE' . PHP_EOL;
+?>
+--EXPECTF--
+<!-- init '%s/observer_eval_%d.php' -->
+<file '%s/observer_eval_%d.php'>
+ <!-- init '%s/observer_eval_%d.php(%d) : eval()'d code' -->
+ <file '%s/observer_eval_%d.php(%d) : eval()'d code'>
+ </file '%s/observer_eval_%d.php(%d) : eval()'d code'>
+Foo eval
+DONE
+</file '%s/observer_eval_%d.php'>
diff --git a/ext/zend_test/tests/observer_exception_01.phpt b/ext/zend_test/tests/observer_exception_01.phpt
new file mode 100644
index 0000000000..fd49c0618b
--- /dev/null
+++ b/ext/zend_test/tests/observer_exception_01.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Observer: Basic observability of userland functions with uncaught exceptions
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+--FILE--
+<?php
+function foo()
+{
+ static $callCount = 0;
+ echo 'Call #' . $callCount . PHP_EOL;
+ if (++$callCount == 3) {
+ throw new RuntimeException('Third time is a charm');
+ }
+}
+
+foo();
+foo();
+foo();
+
+echo 'You should not see this' . PHP_EOL;
+?>
+--EXPECTF--
+<!-- init '%s/observer_exception_%d.php' -->
+<file '%s/observer_exception_%d.php'>
+ <!-- init foo() -->
+ <foo>
+Call #0
+ </foo>
+ <foo>
+Call #1
+ </foo>
+ <foo>
+Call #2
+ <!-- Exception: RuntimeException -->
+ </foo>
+ <!-- Exception: RuntimeException -->
+</file '%s/observer_exception_%d.php'>
+
+Fatal error: Uncaught RuntimeException: Third time is a charm in %s/observer_exception_%d.php:%d
+Stack trace:
+#0 %s/observer_exception_%d.php(%d): foo()
+#1 {main}
+ thrown in %s/observer_exception_%d.php on line %d
diff --git a/ext/zend_test/tests/observer_generator_01.phpt b/ext/zend_test/tests/observer_generator_01.phpt
new file mode 100644
index 0000000000..a2d8b02a2b
--- /dev/null
+++ b/ext/zend_test/tests/observer_generator_01.phpt
@@ -0,0 +1,47 @@
+--TEST--
+Observer: Basic generator observability
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+zend_test.observer.show_return_value=1
+--FILE--
+<?php
+function getResults() {
+ for ($i = 10; $i < 13; $i++) {
+ yield $i;
+ }
+}
+
+function doSomething() {
+ $generator = getResults();
+ foreach ($generator as $value) {
+ echo $value . PHP_EOL;
+ }
+
+ return 'Done';
+}
+
+echo doSomething() . PHP_EOL;
+?>
+--EXPECTF--
+<!-- init '%s/observer_generator_%d.php' -->
+<file '%s/observer_generator_%d.php'>
+ <!-- init doSomething() -->
+ <doSomething>
+ <!-- init getResults() -->
+ <getResults>
+ </getResults:10>
+10
+ <getResults>
+ </getResults:11>
+11
+ <getResults>
+ </getResults:12>
+12
+ <getResults>
+ </getResults:NULL>
+ </doSomething:'Done'>
+Done
+</file '%s/observer_generator_%d.php'>
diff --git a/ext/zend_test/tests/observer_generator_02.phpt b/ext/zend_test/tests/observer_generator_02.phpt
new file mode 100644
index 0000000000..2e045f93f2
--- /dev/null
+++ b/ext/zend_test/tests/observer_generator_02.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Observer: Generator with explicit return
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+zend_test.observer.show_return_value=1
+--FILE--
+<?php
+function getResults() {
+ for ($i = 10; $i < 13; $i++) {
+ yield $i;
+ }
+ return 1337;
+}
+
+function doSomething() {
+ $generator = getResults();
+ foreach ($generator as $value) {
+ echo $value . PHP_EOL;
+ }
+ echo $generator->getReturn() . PHP_EOL;
+
+ return 'Done';
+}
+
+echo doSomething() . PHP_EOL;
+?>
+--EXPECTF--
+<!-- init '%s/observer_generator_%d.php' -->
+<file '%s/observer_generator_%d.php'>
+ <!-- init doSomething() -->
+ <doSomething>
+ <!-- init getResults() -->
+ <getResults>
+ </getResults:10>
+10
+ <getResults>
+ </getResults:11>
+11
+ <getResults>
+ </getResults:12>
+12
+ <getResults>
+ </getResults:1337>
+1337
+ </doSomething:'Done'>
+Done
+</file '%s/observer_generator_%d.php'>
diff --git a/ext/zend_test/tests/observer_generator_03.phpt b/ext/zend_test/tests/observer_generator_03.phpt
new file mode 100644
index 0000000000..459bdfb424
--- /dev/null
+++ b/ext/zend_test/tests/observer_generator_03.phpt
@@ -0,0 +1,68 @@
+--TEST--
+Observer: Generator with 'yield from'
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+zend_test.observer.show_return_value=1
+--FILE--
+<?php
+function barResults() {
+ for ($i = 10; $i < 13; $i++) {
+ yield $i;
+ }
+}
+
+function fooResults() {
+ yield 0;
+ yield 1;
+ yield from barResults();
+ yield 42;
+}
+
+function doSomething() {
+ $generator = fooResults();
+ foreach ($generator as $value) {
+ echo $value . PHP_EOL;
+ }
+
+ return 'Done';
+}
+
+echo doSomething() . PHP_EOL;
+?>
+--EXPECTF--
+<!-- init '%s/observer_generator_%d.php' -->
+<file '%s/observer_generator_%d.php'>
+ <!-- init doSomething() -->
+ <doSomething>
+ <!-- init fooResults() -->
+ <fooResults>
+ </fooResults:0>
+0
+ <fooResults>
+ </fooResults:1>
+1
+ <fooResults>
+ </fooResults:1>
+ <!-- init barResults() -->
+ <barResults>
+ </barResults:10>
+10
+ <barResults>
+ </barResults:11>
+11
+ <barResults>
+ </barResults:12>
+12
+ <barResults>
+ </barResults:NULL>
+ <fooResults>
+ </fooResults:42>
+42
+ <fooResults>
+ </fooResults:NULL>
+ </doSomething:'Done'>
+Done
+</file '%s/observer_generator_%d.php'>
diff --git a/ext/zend_test/tests/observer_generator_04.phpt b/ext/zend_test/tests/observer_generator_04.phpt
new file mode 100644
index 0000000000..6c2f182077
--- /dev/null
+++ b/ext/zend_test/tests/observer_generator_04.phpt
@@ -0,0 +1,64 @@
+--TEST--
+Observer: Generator with manual traversal
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+zend_test.observer.show_return_value=1
+--FILE--
+<?php
+function fooResults() {
+ echo 'Starting generator' . PHP_EOL;
+ $i = 0;
+ while (true) {
+ if (yield $i++) break;
+ }
+}
+
+function doSomething() {
+ $generator = fooResults();
+
+ while($generator->current() !== NULL) {
+ echo $generator->current() . PHP_EOL;
+ if ($generator->current() === 5) {
+ $generator->send('Boop');
+ }
+ $generator->next();
+ }
+
+ return 'Done';
+}
+
+echo doSomething() . PHP_EOL;
+?>
+--EXPECTF--
+<!-- init '%s/observer_generator_%d.php' -->
+<file '%s/observer_generator_%d.php'>
+ <!-- init doSomething() -->
+ <doSomething>
+ <!-- init fooResults() -->
+ <fooResults>
+Starting generator
+ </fooResults:0>
+0
+ <fooResults>
+ </fooResults:1>
+1
+ <fooResults>
+ </fooResults:2>
+2
+ <fooResults>
+ </fooResults:3>
+3
+ <fooResults>
+ </fooResults:4>
+4
+ <fooResults>
+ </fooResults:5>
+5
+ <fooResults>
+ </fooResults:NULL>
+ </doSomething:'Done'>
+Done
+</file '%s/observer_generator_%d.php'>
diff --git a/ext/zend_test/tests/observer_jit_01.phpt b/ext/zend_test/tests/observer_jit_01.phpt
new file mode 100644
index 0000000000..f489986b6e
--- /dev/null
+++ b/ext/zend_test/tests/observer_jit_01.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Observer: JIT is disabled when observer extension is present
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+<?php if (!extension_loaded('Zend OPcache')) die('skip: OPcache extension required'); ?>
+<?php if (!isset(opcache_get_status()['jit'])) die('skip: Build with JIT required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+opcache.enable=1
+opcache.enable_cli=1
+opcache.jit=1
+opcache.jit_buffer_size=1M
+--FILE--
+<?php
+$status = opcache_get_status();
+echo 'JIT enabled: ' . ($status['jit']['enabled'] ? 'yes' : 'no') . PHP_EOL;
+echo 'JIT on: ' . ($status['jit']['on'] ? 'yes' : 'no') . PHP_EOL;
+?>
+--EXPECTF--
+<!-- init '%s/observer_jit_%d.php' -->
+<file '%s/observer_jit_%d.php'>
+JIT enabled: no
+JIT on: no
+</file '%s/observer_jit_%d.php'>
diff --git a/ext/zend_test/tests/observer_magic_01.phpt b/ext/zend_test/tests/observer_magic_01.phpt
new file mode 100644
index 0000000000..920f934b6c
--- /dev/null
+++ b/ext/zend_test/tests/observer_magic_01.phpt
@@ -0,0 +1,45 @@
+--TEST--
+Observer: Basic magic method observability
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+--FILE--
+<?php
+class MagicTest
+{
+ public function __call($name, $args)
+ {
+ echo '__call()' . PHP_EOL;
+ $this->foo($name);
+ }
+
+ public function foo($name)
+ {
+ echo $name . PHP_EOL;
+ }
+}
+
+$test = new MagicTest();
+$test->foo('test');
+$test->bar();
+
+echo 'DONE' . PHP_EOL;
+?>
+--EXPECTF--
+<!-- init '%s/observer_magic_01.php' -->
+<file '%s/observer_magic_01.php'>
+ <!-- init MagicTest::foo() -->
+ <MagicTest::foo>
+test
+ </MagicTest::foo>
+ <!-- init MagicTest::__call() -->
+ <MagicTest::__call>
+__call()
+ <MagicTest::foo>
+bar
+ </MagicTest::foo>
+ </MagicTest::__call>
+DONE
+</file '%s/observer_magic_01.php'>
diff --git a/ext/zend_test/tests/observer_zend_call_function_01.phpt b/ext/zend_test/tests/observer_zend_call_function_01.phpt
new file mode 100644
index 0000000000..03d7287470
--- /dev/null
+++ b/ext/zend_test/tests/observer_zend_call_function_01.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Observer: Calls that go through zend_call_function are observed
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+--FILE--
+<?php
+function sum($carry, $item) {
+ $carry += $item;
+ return $carry;
+}
+
+$a = [1, 2, 3, 4, 5];
+// array_reduce() calls zend_call_function() under the hood
+var_dump(array_reduce($a, 'sum'));
+echo 'Done' . PHP_EOL;
+?>
+--EXPECTF--
+<!-- init '%s/observer_zend_call_function_%d.php' -->
+<file '%s/observer_zend_call_function_%d.php'>
+ <!-- init sum() -->
+ <sum>
+ </sum>
+ <sum>
+ </sum>
+ <sum>
+ </sum>
+ <sum>
+ </sum>
+ <sum>
+ </sum>
+int(15)
+Done
+</file '%s/observer_zend_call_function_%d.php'>
diff --git a/main/main.c b/main/main.c
index 9a92447f41..9eb610fe64 100644
--- a/main/main.c
+++ b/main/main.c
@@ -71,6 +71,7 @@
#include "zend_extensions.h"
#include "zend_ini.h"
#include "zend_dtrace.h"
+#include "zend_observer.h"
#include "php_content_types.h"
#include "php_ticks.h"
@@ -2199,6 +2200,7 @@ int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_mod
php_startup_auto_globals();
zend_set_utility_values(&zuv);
php_startup_sapi_content_types();
+ zend_observer_startup();
/* startup extensions statically compiled in */
if (php_register_internal_extensions_func() == FAILURE) {
@@ -2416,6 +2418,8 @@ void php_module_shutdown(void)
_set_invalid_parameter_handler(old_invalid_parameter_handler);
}
#endif
+
+ zend_observer_shutdown();
}
/* }}} */
diff --git a/win32/build/config.w32 b/win32/build/config.w32
index 9b5e44c37d..94e4cbe1c5 100644
--- a/win32/build/config.w32
+++ b/win32/build/config.w32
@@ -237,7 +237,7 @@ ADD_SOURCES("Zend", "zend_language_parser.c zend_language_scanner.c \
zend_object_handlers.c zend_objects_API.c \
zend_default_classes.c zend_execute.c zend_strtod.c zend_gc.c zend_closures.c zend_weakrefs.c \
zend_float.c zend_string.c zend_generators.c zend_virtual_cwd.c zend_ast.c \
- zend_inheritance.c zend_smart_str.c zend_cpuinfo.c");
+ zend_inheritance.c zend_smart_str.c zend_cpuinfo.c zend_observer.c");
ADD_FLAG("CFLAGS_BD_ZEND", "/D ZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
if (VS_TOOLSET && VCVERS >= 1914) {