e8d86ff6c898c9620d3eee0256a5e80a15ec00c7
[m6w6/ext-psi] / src / engine.h
1 #ifndef _PSI_ENGINE_H
2 #define _PSI_ENGINE_H
3
4 static inline size_t psi_align(size_t s, size_t a) {
5 return ((s - 1) | (a - 1)) + 1;
6 }
7
8 static inline size_t psi_offset_padding(size_t diff, size_t alignment) {
9 if (diff && diff <= psi_align(diff, alignment)) {
10 diff = 0;
11 }
12
13 return diff;
14 }
15
16 static inline void psi_do_set(zval *return_value, set_value *set)
17 {
18 decl_arg *set_arg = set->vars->vars[0]->arg;
19
20 zval_dtor(return_value);
21 set->func->handler(return_value, set, set_arg->let);
22 }
23
24 int psi_internal_type(impl_type *type);
25 zend_internal_arg_info *psi_internal_arginfo(impl *impl);
26 size_t psi_num_min_args(impl *impl);
27
28 ZEND_RESULT_CODE psi_call(zend_execute_data *execute_data, zval *return_value, impl *impl);
29 ZEND_RESULT_CODE psi_callback(let_callback *cb, void *retval, unsigned argc, void **argv);
30
31 #endif