static zend_op *zend_emit_op(znode *result, zend_uchar opcode, znode *op1, znode *op2);
static zend_bool zend_try_ct_eval_array(zval *result, zend_ast *ast);
+static void init_op(zend_op *op)
+{
+ MAKE_NOP(op);
+ op->extended_value = 0;
+ op->lineno = CG(zend_lineno);
+}
+
+static zend_op *get_next_op(zend_op_array *op_array)
+{
+ uint32_t next_op_num = op_array->last++;
+ zend_op *next_op;
+
+ if (UNEXPECTED(next_op_num >= CG(context).opcodes_size)) {
+ CG(context).opcodes_size *= 4;
+ op_array->opcodes = erealloc(op_array->opcodes, CG(context).opcodes_size * sizeof(zend_op));
+ }
+
+ next_op = &(op_array->opcodes[next_op_num]);
+
+ init_op(next_op);
+
+ return next_op;
+}
+
+static zend_brk_cont_element *get_next_brk_cont_element(void)
+{
+ CG(context).last_brk_cont++;
+ CG(context).brk_cont_array = erealloc(CG(context).brk_cont_array, sizeof(zend_brk_cont_element) * CG(context).last_brk_cont);
+ return &CG(context).brk_cont_array[CG(context).last_brk_cont-1];
+}
+
static void zend_destroy_property_info_internal(zval *zv) /* {{{ */
{
zend_property_info *property_info = Z_PTR_P(zv);
#define ZEND_FUNCTION_DTOR zend_function_dtor
#define ZEND_CLASS_DTOR destroy_zend_class
-zend_op *get_next_op(zend_op_array *op_array);
-void init_op(zend_op *op);
ZEND_API int pass_two(zend_op_array *op_array);
-zend_brk_cont_element *get_next_brk_cont_element(void);
ZEND_API zend_bool zend_is_compiling(void);
ZEND_API char *zend_make_compiled_string_description(const char *name);
ZEND_API void zend_initialize_class_data(zend_class_entry *ce, zend_bool nullify_handlers);
}
}
-static void op_array_alloc_ops(zend_op_array *op_array, uint32_t size)
-{
- op_array->opcodes = erealloc(op_array->opcodes, size * sizeof(zend_op));
-}
-
void init_op_array(zend_op_array *op_array, zend_uchar type, int initial_ops_size)
{
op_array->type = type;
op_array->refcount = (uint32_t *) emalloc(sizeof(uint32_t));
*op_array->refcount = 1;
op_array->last = 0;
- op_array->opcodes = NULL;
- op_array_alloc_ops(op_array, initial_ops_size);
+ op_array->opcodes = emalloc(initial_ops_size * sizeof(zend_op));;
op_array->last_var = 0;
op_array->vars = NULL;
}
}
-void init_op(zend_op *op)
-{
- memset(op, 0, sizeof(zend_op));
- op->lineno = CG(zend_lineno);
-}
-
-zend_op *get_next_op(zend_op_array *op_array)
-{
- uint32_t next_op_num = op_array->last++;
- zend_op *next_op;
-
- if (next_op_num >= CG(context).opcodes_size) {
- CG(context).opcodes_size *= 4;
- op_array_alloc_ops(op_array, CG(context).opcodes_size);
- }
-
- next_op = &(op_array->opcodes[next_op_num]);
-
- init_op(next_op);
-
- return next_op;
-}
-
-zend_brk_cont_element *get_next_brk_cont_element(void)
-{
- CG(context).last_brk_cont++;
- CG(context).brk_cont_array = erealloc(CG(context).brk_cont_array, sizeof(zend_brk_cont_element) * CG(context).last_brk_cont);
- return &CG(context).brk_cont_array[CG(context).last_brk_cont-1];
-}
-
static void zend_update_extended_info(zend_op_array *op_array)
{
zend_op *opline = op_array->opcodes, *end=opline+op_array->last;