summaryrefslogtreecommitdiff
path: root/Zend/zend_compile.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_compile.c')
-rw-r--r--Zend/zend_compile.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index f661beb308..f29c33f024 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -702,7 +702,6 @@ void do_begin_function_call(znode *function_name CLS_DC)
}
break;
}
-
opline->opcode = ZEND_INIT_FCALL;
SET_UNUSED(opline->op1);
SET_UNUSED(opline->op2);
@@ -741,7 +740,7 @@ void do_begin_class_member_function_call(znode *class_name, znode *function_name
}
-void do_end_function_call(znode *function_name, znode *result, int is_method CLS_DC)
+void do_end_function_call(znode *function_name, znode *result, znode *argument_list, int is_method CLS_DC)
{
zend_op *opline = get_next_op(CG(active_op_array) CLS_CC);
ELS_FETCH();
@@ -754,6 +753,7 @@ void do_end_function_call(znode *function_name, znode *result, int is_method CLS
SET_UNUSED(opline->op2);
opline->op2.u.constant.value.lval = is_method;
zend_stack_del_top(&CG(function_call_stack));
+ opline->extended_value = argument_list->u.constant.value.lval;
}
@@ -777,8 +777,8 @@ void do_pass_param(znode *param, int op, int offset CLS_DC)
break;
}
}
- if (arg_types && offset<arg_types[0]
- && arg_types[1+offset]==BYREF_FORCE) {
+ if (arg_types && offset<=arg_types[0]
+ && arg_types[offset]==BYREF_FORCE) {
/* change to passing by reference */
switch (param->op_type) {
case IS_VAR:
@@ -1223,14 +1223,14 @@ void do_begin_new_object(znode *result, znode *variable, znode *new_token, znode
}
-void do_end_new_object(znode *class_name, znode *new_token CLS_DC)
+void do_end_new_object(znode *class_name, znode *new_token, znode *argument_list CLS_DC)
{
znode ctor_result;
if (class_name->op_type == IS_CONST) {
zval_copy_ctor(&class_name->u.constant);
}
- do_end_function_call(class_name, &ctor_result, 1 CLS_CC);
+ do_end_function_call(class_name, &ctor_result, argument_list, 1 CLS_CC);
do_free(&ctor_result CLS_CC);
CG(active_op_array)->opcodes[new_token->u.opline_num].op2.u.opline_num = get_next_op_number(CG(active_op_array));
@@ -1438,7 +1438,7 @@ void do_list_end(znode *result, znode *expr CLS_DC)
le = CG(list_llist).head;
while (le) {
do_assign(result, &((list_llist_element *) le->data)->var, &((list_llist_element *) le->data)->value CLS_CC);
- EG(active_op_array)->opcodes[EG(active_op_array)->last-1].result.u.EA.type |= EXT_TYPE_UNUSED;
+ CG(active_op_array)->opcodes[CG(active_op_array)->last-1].result.u.EA.type |= EXT_TYPE_UNUSED;
le = le->next;
}
zend_llist_destroy(&CG(dimension_llist));