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