summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-03-26 22:06:44 +0400
committerDmitry Stogov <dmitry@zend.com>2014-03-26 22:06:44 +0400
commitde6a76d16e40b342131fb929fba7213aeb406868 (patch)
tree17cce6399854731dfde4ed3f6894d5a285734715
parent903b6b59bfefb5dd5be1efaec0d53d3fc4d9d06e (diff)
downloadphp-git-de6a76d16e40b342131fb929fba7213aeb406868.tar.gz
fixed support for references
-rw-r--r--Zend/zend_vm_def.h3
-rw-r--r--Zend/zend_vm_execute.h9
-rw-r--r--ext/standard/type.c3
3 files changed, 15 insertions, 0 deletions
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index e97646be2e..97a32dca66 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -5119,6 +5119,9 @@ ZEND_VM_HANDLER(138, ZEND_INSTANCEOF, TMP|VAR|CV, ANY)
SAVE_OPLINE();
expr = GET_OP1_ZVAL_PTR(BP_VAR_R);
+ if (Z_ISREF_P(expr)) {
+ expr = Z_REFVAL_P(expr);
+ }
if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->get_class_entry) {
result = instanceof_function(Z_OBJCE_P(expr), Z_CE_P(EX_VAR(opline->op2.var)) TSRMLS_CC);
} else {
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 2ebff4738d..ac26665fa7 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -8395,6 +8395,9 @@ static int ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_A
SAVE_OPLINE();
expr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ if (Z_ISREF_P(expr)) {
+ expr = Z_REFVAL_P(expr);
+ }
if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->get_class_entry) {
result = instanceof_function(Z_OBJCE_P(expr), Z_CE_P(EX_VAR(opline->op2.var)) TSRMLS_CC);
} else {
@@ -13665,6 +13668,9 @@ static int ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_A
SAVE_OPLINE();
expr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ if (Z_ISREF_P(expr)) {
+ expr = Z_REFVAL_P(expr);
+ }
if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->get_class_entry) {
result = instanceof_function(Z_OBJCE_P(expr), Z_CE_P(EX_VAR(opline->op2.var)) TSRMLS_CC);
} else {
@@ -30941,6 +30947,9 @@ static int ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_AR
SAVE_OPLINE();
expr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+ if (Z_ISREF_P(expr)) {
+ expr = Z_REFVAL_P(expr);
+ }
if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->get_class_entry) {
result = instanceof_function(Z_OBJCE_P(expr), Z_CE_P(EX_VAR(opline->op2.var)) TSRMLS_CC);
} else {
diff --git a/ext/standard/type.c b/ext/standard/type.c
index 182e4b9768..e95666e439 100644
--- a/ext/standard/type.c
+++ b/ext/standard/type.c
@@ -224,6 +224,9 @@ static void php_is_type(INTERNAL_FUNCTION_PARAMETERS, int type)
RETURN_FALSE;
}
+ if (Z_ISREF_P(arg)) {
+ arg = Z_REFVAL_P(arg);
+ }
if (Z_TYPE_P(arg) == type) {
if (type == IS_OBJECT) {
zend_class_entry *ce;