} u;
} znode;
+typedef struct _zend_execute_data zend_execute_data;
+
+#define ZEND_OPCODE_HANDLER_ARGS zend_execute_data *execute_data, zend_op_array *op_array TSRMLS_DC
+#define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU execute_data, op_array TSRMLS_CC
+
+typedef int (*opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS);
+
+extern opcode_handler_t zend_opcode_handlers[512];
typedef struct _zend_op {
zend_uchar opcode;
znode op2;
ulong extended_value;
uint lineno;
+ opcode_handler_t handler;
} zend_op;
EG(current_execute_data) = EX(prev_execute_data); \
return 1; /* CHECK_ME */
-#define ZEND_OPCODE_HANDLER_ARGS zend_execute_data *execute_data, zend_op_array *op_array TSRMLS_DC
-#define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU execute_data, op_array TSRMLS_CC
-
-typedef int (*opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS);
-
opcode_handler_t zend_opcode_handlers[512];
ZEND_API void execute(zend_op_array *op_array TSRMLS_DC)
#endif
zend_clean_garbage(TSRMLS_C);
- if (zend_opcode_handlers[EX(opline)->opcode](&execute_data, op_array TSRMLS_CC)) {
+ if (EX(opline)->handler(&execute_data, op_array TSRMLS_CC)) {
return;
}
}
int result = 0;
if (container) {
-
if ((*container)->type == IS_ARRAY) {
HashTable *ht;
int isset = 0;
opline->op2.u.constant.is_ref = 1;
opline->op2.u.constant.refcount = 2;
}
+ opline->handler = zend_opcode_handlers[opline->opcode];
opline++;
}
op_array->opcodes = (zend_op *) erealloc(op_array->opcodes, sizeof(zend_op)*op_array->last);