From 4c16b777fe027d1798e50bf1232b69fc67f14959 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 25 Apr 2014 15:41:23 +0200 Subject: [PATCH] Uhm, do we really need to support that? --- Zend/zend_vm_def.h | 9 +++++++++ Zend/zend_vm_execute.h | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 5bcada45c3..d2db9e0d4f 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -3785,6 +3785,15 @@ ZEND_VM_HANDLER(21, ZEND_CAST, CONST|TMP|VAR|CV, ANY) switch (opline->extended_value) { case IS_NULL: + if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) { + ZVAL_DEREF(expr); + } + if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) { + if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL TSRMLS_CC) == SUCCESS) { + break; + } + } + ZVAL_NULL(result); break; case IS_BOOL: diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 83fa744418..33850c8fc5 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -2785,6 +2785,15 @@ static int ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) switch (opline->extended_value) { case IS_NULL: + if (IS_CONST == IS_VAR || IS_CONST == IS_CV) { + ZVAL_DEREF(expr); + } + if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) { + if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL TSRMLS_CC) == SUCCESS) { + break; + } + } + ZVAL_NULL(result); break; case IS_BOOL: @@ -7863,6 +7872,15 @@ static int ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) switch (opline->extended_value) { case IS_NULL: + if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) { + ZVAL_DEREF(expr); + } + if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) { + if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL TSRMLS_CC) == SUCCESS) { + break; + } + } + ZVAL_NULL(result); break; case IS_BOOL: @@ -13011,6 +13029,15 @@ static int ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) switch (opline->extended_value) { case IS_NULL: + if (IS_VAR == IS_VAR || IS_VAR == IS_CV) { + ZVAL_DEREF(expr); + } + if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) { + if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL TSRMLS_CC) == SUCCESS) { + break; + } + } + ZVAL_NULL(result); break; case IS_BOOL: @@ -29905,6 +29932,15 @@ static int ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) switch (opline->extended_value) { case IS_NULL: + if (IS_CV == IS_VAR || IS_CV == IS_CV) { + ZVAL_DEREF(expr); + } + if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->cast_object) { + if (Z_OBJ_HT_P(expr)->cast_object(expr, result, IS_NULL TSRMLS_CC) == SUCCESS) { + break; + } + } + ZVAL_NULL(result); break; case IS_BOOL: -- 2.40.0