diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2015-04-23 12:16:37 +0300 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2015-04-23 12:16:37 +0300 |
| commit | 49cf7c5d120876b52fb187e4c13f4adc4fc4d9a6 (patch) | |
| tree | 98dd1e2611a86e363a9c8f35f91a033eb5c1d0e6 /Zend/zend_interfaces.c | |
| parent | 801768f72ceb5682b3bc6c10827f747d93753a58 (diff) | |
| download | php-git-49cf7c5d120876b52fb187e4c13f4adc4fc4d9a6.tar.gz | |
Don't propogate "fake" EX(called_scope) and EX(This) into each internal function.
They need quite seldom and it's cheaper to get them from corresponfing upper stack frame.
Diffstat (limited to 'Zend/zend_interfaces.c')
| -rw-r--r-- | Zend/zend_interfaces.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c index 5cb7024706..54f8f8c117 100644 --- a/Zend/zend_interfaces.c +++ b/Zend/zend_interfaces.c @@ -89,13 +89,16 @@ ZEND_API zval* zend_call_method(zval *object, zend_class_entry *obj_ce, zend_fun fcic.calling_scope = obj_ce; if (object) { fcic.called_scope = Z_OBJCE_P(object); - } else if (obj_ce && - !(EG(current_execute_data) && - EG(current_execute_data)->called_scope && - instanceof_function(EG(current_execute_data)->called_scope, obj_ce))) { - fcic.called_scope = obj_ce; } else { - fcic.called_scope = EG(current_execute_data) ? EG(current_execute_data)->called_scope : NULL; + zend_class_entry *called_scope = zend_get_called_scope(EG(current_execute_data)); + + if (obj_ce && + (!called_scope || + !instanceof_function(called_scope, obj_ce))) { + fcic.called_scope = obj_ce; + } else { + fcic.called_scope = called_scope; + } } fcic.object = object ? Z_OBJ_P(object) : NULL; result = zend_call_function(&fci, &fcic); |
