source: branches/1.2/utils.h @ 378

Last change on this file since 378 was 378, checked in by moo, 7 years ago

merged[344] [345] [346] from trunk->1.2: fixed #59: pass by reference for internal function was broken

File size: 2.3 KB
Line 
1#include "php.h"
2
3typedef struct {
4    int alloc;
5    zend_op_array *op_array;
6    HashTable *function_table;
7    HashTable *class_table;
8} xc_compile_result_t;
9
10xc_compile_result_t *xc_compile_result_init(xc_compile_result_t *cr,
11        zend_op_array *op_array,
12        HashTable *function_table,
13        HashTable *class_table);
14void xc_compile_result_free(xc_compile_result_t *cr);
15xc_compile_result_t *xc_compile_result_init_cur(xc_compile_result_t *cr, zend_op_array *op_array TSRMLS_DC);
16/* apply func */
17int xc_apply_function(zend_function *zf, apply_func_t applyer TSRMLS_DC);
18int xc_apply_class(zend_class_entry *ce, apply_func_t applyer TSRMLS_DC);
19int xc_apply_op_array(xc_compile_result_t *cr, apply_func_t applyer TSRMLS_DC);
20
21int xc_undo_pass_two(zend_op_array *op_array TSRMLS_DC);
22int xc_redo_pass_two(zend_op_array *op_array TSRMLS_DC);
23int xc_fix_opcode(zend_op_array *op_array TSRMLS_DC);
24int xc_undo_fix_opcode(zend_op_array *op_array TSRMLS_DC);
25zend_uchar xc_get_fixed_opcode(zend_uchar opcode, int line);
26
27int xc_foreach_early_binding_class(zend_op_array *op_array, void (*callback)(zend_op *opline, int oplineno, void *data TSRMLS_DC), void *data TSRMLS_DC);
28
29/* installer */
30#ifdef HAVE_XCACHE_CONSTANT
31void xc_install_constant(char *filename, zend_constant *constant, zend_uchar type, zstr key, uint len TSRMLS_DC);
32#endif
33void xc_install_function(char *filename, zend_function *func, zend_uchar type, zstr key, uint len TSRMLS_DC);
34ZESW(xc_cest_t *, void) xc_install_class(char *filename, xc_cest_t *cest, int oplineno, zend_uchar type, zstr key, uint len TSRMLS_DC);
35
36/* sandbox */
37typedef struct {
38    int alloc;
39    int orig_user_error_handler_error_reporting;
40    char *filename;
41
42    HashTable orig_included_files;
43    HashTable *tmp_included_files;
44
45#ifdef HAVE_XCACHE_CONSTANT
46    HashTable *orig_zend_constants;
47    HashTable tmp_zend_constants;
48#endif
49    HashTable *orig_function_table;
50    HashTable *orig_class_table;
51    HashTable *orig_auto_globals;
52    HashTable tmp_function_table;
53    HashTable tmp_class_table;
54    HashTable tmp_auto_globals;
55    Bucket    *tmp_internal_function_tail;
56    Bucket    *tmp_internal_class_tail;
57} xc_sandbox_t;
58
59void xc_zend_class_add_ref(zend_class_entry ZESW(*ce, **ce));
60xc_sandbox_t *xc_sandbox_init(xc_sandbox_t *sandbox, char *filename TSRMLS_DC);
61void xc_sandbox_free(xc_sandbox_t *sandbox, int install TSRMLS_DC);
Note: See TracBrowser for help on using the repository browser.