From f950a3724cb6dc390c56405e2e64dd7757b0c523 Mon Sep 17 00:00:00 2001 From: Andi Gutmans Date: Thu, 9 Nov 2000 23:54:18 +0000 Subject: [PATCH] - Maybe it's OK now? :) --- Zend/zend_compile.c | 11 ++++++++++- Zend/zend_compile.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 33616a0d5a..9246ee3e78 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -303,7 +303,15 @@ void zend_do_echo(znode *arg CLS_DC) void zend_do_assign(znode *result, znode *variable, znode *value CLS_DC) { - zend_op *opline = get_next_op(CG(active_op_array) CLS_CC); + zend_op *opline; + + if (value->op_type == IS_VAR && value->u.EA.type & EXT_TYPE_NEW_OP) { + value->u.EA.type &= ~EXT_TYPE_NEW_OP; + zend_do_assign_ref(result, variable, value CLS_CC); + return; + } + + opline = get_next_op(CG(active_op_array) CLS_CC); opline->opcode = ZEND_ASSIGN; opline->result.op_type = IS_VAR; @@ -1649,6 +1657,7 @@ void zend_do_begin_new_object(znode *new_token, znode *class_name CLS_DC) opline->opcode = ZEND_NEW; opline->result.op_type = IS_VAR; opline->result.u.var = get_temporary_variable(CG(active_op_array)); + opline->result.u.EA.type |= EXT_TYPE_NEW_OP; opline->op1 = *class_name; SET_UNUSED(opline->op2); diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index bc771935e6..445d9cb0b3 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -204,6 +204,7 @@ typedef struct _zend_file_handle { #define EXT_TYPE_UNUSED (1<<0) +#define EXT_TYPE_NEW_OP (1<<1) #include "zend_globals.h" -- 2.40.0