summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndi Gutmans <andi@php.net>2002-01-06 19:52:22 +0000
committerAndi Gutmans <andi@php.net>2002-01-06 19:52:22 +0000
commit0f398e4d4ae4fbe62aa9d95d8e9a84e4987ea280 (patch)
treefa0d29c9364588fcc543d3b73c1865bb68ede7fc
parent62dc854bb0d787b672da21ec8391f094286e1c55 (diff)
downloadphp-git-0f398e4d4ae4fbe62aa9d95d8e9a84e4987ea280.tar.gz
- Make sure $this is passed on to methods
-rw-r--r--Zend/zend_execute.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 1de726f38a..f304028c24 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -1741,11 +1741,12 @@ binary_assign_op_addr: {
EX(calling_namespace) = EG(namespace);
- EX(object).ptr = NULL;
-
do {
if (EG(namespace)) {
if (zend_hash_find(&EG(namespace)->function_table, function_name_strval, function_name_strlen+1, (void **) &function) == SUCCESS) {
+ if (EX(object).ptr = EG(this)) {
+ EX(object).ptr->refcount++;
+ }
break;
}
}
@@ -1753,6 +1754,7 @@ binary_assign_op_addr: {
zend_error(E_ERROR, "Call to undefined function: %s()", function_name_strval);
}
EX(calling_namespace) = NULL;
+ EX(object).ptr = NULL;
} while (0);
if (!is_const) {
@@ -1768,20 +1770,26 @@ binary_assign_op_addr: {
case ZEND_DO_FCALL: {
zval *fname = get_zval_ptr(&EX(opline)->op1, EX(Ts), &EG(free_op1), BP_VAR_R);
+ zend_ptr_stack_push(&EG(arg_types_stack), EX(object).ptr);
+
do {
if (EG(namespace)) {
if (zend_hash_find(&EG(namespace)->function_table, fname->value.str.val, fname->value.str.len+1, (void **) &EX(function_state).function) == SUCCESS) {
+ if (EX(object).ptr = EG(this)) {
+ EX(object).ptr->refcount++;
+ }
break;
}
}
if (zend_hash_find(EG(function_table), fname->value.str.val, fname->value.str.len+1, (void **) &EX(function_state).function)==FAILURE) {
zend_error(E_ERROR, "Unknown function: %s()\n", fname->value.str.val);
}
+ EX(object).ptr = NULL;
} while (0);
+
EX(calling_namespace) = EG(namespace);
FREE_OP(EX(Ts), &EX(opline)->op1, EG(free_op1));
- zend_ptr_stack_push(&EG(arg_types_stack), EX(object).ptr);
- EX(object).ptr = NULL;
+
goto do_fcall_common;
}
do_fcall_common: