summaryrefslogtreecommitdiff
path: root/Zend/zend_API.h
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2019-05-31 12:09:06 +0300
committerDmitry Stogov <dmitry@zend.com>2019-05-31 12:20:21 +0300
commit1df9f238fed314255b858e3996c35be8cdff917f (patch)
treeab3dbad2f11e44688926b6a98fb50b7c0c68d1b2 /Zend/zend_API.h
parent84333cad674890174c47f3c21b1b1cf85a4276ac (diff)
downloadphp-git-1df9f238fed314255b858e3996c35be8cdff917f.tar.gz
Better hot/cold code splitting
Diffstat (limited to 'Zend/zend_API.h')
-rw-r--r--Zend/zend_API.h16
1 files changed, 14 insertions, 2 deletions
diff --git a/Zend/zend_API.h b/Zend/zend_API.h
index bdf3b1ce2b..e8fa6e1e62 100644
--- a/Zend/zend_API.h
+++ b/Zend/zend_API.h
@@ -530,12 +530,24 @@ ZEND_API void zend_attach_symbol_table(zend_execute_data *execute_data);
ZEND_API void zend_detach_symbol_table(zend_execute_data *execute_data);
ZEND_API int zend_set_local_var(zend_string *name, zval *value, int force);
ZEND_API int zend_set_local_var_str(const char *name, size_t len, zval *value, int force);
-ZEND_API int zend_forbid_dynamic_call(const char *func_name);
+
+static zend_always_inline int zend_forbid_dynamic_call(const char *func_name)
+{
+ zend_execute_data *ex = EG(current_execute_data);
+ ZEND_ASSERT(ex != NULL && ex->func != NULL);
+
+ if (ZEND_CALL_INFO(ex) & ZEND_CALL_DYNAMIC) {
+ zend_error(E_WARNING, "Cannot call %s dynamically", func_name);
+ return FAILURE;
+ }
+
+ return SUCCESS;
+}
ZEND_API zend_string *zend_find_alias_name(zend_class_entry *ce, zend_string *name);
ZEND_API zend_string *zend_resolve_method_name(zend_class_entry *ce, zend_function *f);
-ZEND_API const char *zend_get_object_type(const zend_class_entry *ce);
+ZEND_API ZEND_COLD const char *zend_get_object_type(const zend_class_entry *ce);
ZEND_API zend_bool zend_is_iterable(zval *iterable);