summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_compile.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index a2e0f0c0db..cd393bf379 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -786,16 +786,17 @@ void do_receive_arg(int op, znode *var, znode *offset, znode *initialization, un
} else {
SET_UNUSED(opline->op2);
}
- if (pass_type==BYREF_FORCE && !CG(active_op_array)->arg_types) {
- int i;
+ if (!CG(active_op_array)->arg_types) {
+ if (pass_type==BYREF_FORCE) {
+ int i;
- CG(active_op_array)->arg_types = (unsigned char *) emalloc(sizeof(unsigned char)*(offset->u.constant.value.lval+1));
- for (i=1; i<offset->u.constant.value.lval; i++) {
- CG(active_op_array)->arg_types[i] = BYREF_NONE;
+ CG(active_op_array)->arg_types = (unsigned char *) emalloc(sizeof(unsigned char)*(offset->u.constant.value.lval+1));
+ for (i=1; i<offset->u.constant.value.lval; i++) {
+ CG(active_op_array)->arg_types[i] = BYREF_NONE;
+ }
+ CG(active_op_array)->arg_types[0]=(unsigned char) offset->u.constant.value.lval;
}
- CG(active_op_array)->arg_types[0]=(unsigned char) offset->u.constant.value.lval;
- }
- if (CG(active_op_array)->arg_types) {
+ } else {
CG(active_op_array)->arg_types = (unsigned char *) erealloc(CG(active_op_array)->arg_types, sizeof(unsigned char)*(offset->u.constant.value.lval+1));
CG(active_op_array)->arg_types[offset->u.constant.value.lval] = pass_type;
CG(active_op_array)->arg_types[0]++;