diff options
Diffstat (limited to 'Zend/zend_execute.c')
| -rw-r--r-- | Zend/zend_execute.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index efa0d08c9d..5af6971af1 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -2087,6 +2087,18 @@ send_by_ref: EX(Ts)[EX(opline)->result.u.var].var.ptr->is_ref=1; } NEXT_OPCODE(); + case ZEND_CLONE: + { + zval *obj = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R); + + EX(Ts)[EX(opline)->result.u.var].var.ptr_ptr = &EX(Ts)[EX(opline)->result.u.var].var.ptr; + ALLOC_ZVAL(EX(Ts)[EX(opline)->result.u.var].var.ptr); + EX(Ts)[EX(opline)->result.u.var].var.ptr->value.obj = obj->value.obj.handlers->clone_obj(obj->value.obj.handle); + EX(Ts)[EX(opline)->result.u.var].var.ptr->type = IS_OBJECT; + EX(Ts)[EX(opline)->result.u.var].var.ptr->refcount=1; + EX(Ts)[EX(opline)->result.u.var].var.ptr->is_ref=1; + NEXT_OPCODE(); + } case ZEND_FETCH_CONSTANT: { zend_class_entry *ce; |
