xref: /PHP-8.2/Zend/zend_closures.h (revision bf1cfc07)
1 /*
2    +----------------------------------------------------------------------+
3    | Zend Engine                                                          |
4    +----------------------------------------------------------------------+
5    | Copyright (c) Zend Technologies Ltd. (http://www.zend.com)           |
6    +----------------------------------------------------------------------+
7    | This source file is subject to version 2.00 of the Zend license,     |
8    | that is bundled with this package in the file LICENSE, and is        |
9    | available through the world-wide-web at the following url:           |
10    | http://www.zend.com/license/2_00.txt.                                |
11    | If you did not receive a copy of the Zend license and are unable to  |
12    | obtain it through the world-wide-web, please send a note to          |
13    | license@zend.com so we can mail you a copy immediately.              |
14    +----------------------------------------------------------------------+
15    | Authors: Christian Seiler <chris_se@gmx.net>                         |
16    |          Dmitry Stogov <dmitry@php.net>                              |
17    +----------------------------------------------------------------------+
18 */
19 
20 #ifndef ZEND_CLOSURES_H
21 #define ZEND_CLOSURES_H
22 
23 BEGIN_EXTERN_C()
24 
25 /* This macro depends on zend_closure structure layout */
26 #define ZEND_CLOSURE_OBJECT(op_array) \
27 	((zend_object*)((char*)(op_array) - sizeof(zend_object)))
28 
29 void zend_register_closure_ce(void);
30 void zend_closure_bind_var(zval *closure_zv, zend_string *var_name, zval *var);
31 void zend_closure_bind_var_ex(zval *closure_zv, uint32_t offset, zval *val);
32 void zend_closure_from_frame(zval *closure_zv, zend_execute_data *frame);
33 
34 extern ZEND_API zend_class_entry *zend_ce_closure;
35 
36 ZEND_API void zend_create_closure(zval *res, zend_function *op_array, zend_class_entry *scope, zend_class_entry *called_scope, zval *this_ptr);
37 ZEND_API void zend_create_fake_closure(zval *res, zend_function *op_array, zend_class_entry *scope, zend_class_entry *called_scope, zval *this_ptr);
38 ZEND_API zend_function *zend_get_closure_invoke_method(zend_object *obj);
39 ZEND_API const zend_function *zend_get_closure_method_def(zend_object *obj);
40 ZEND_API zval* zend_get_closure_this_ptr(zval *obj);
41 
42 END_EXTERN_C()
43 
44 #endif
45