X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fengine.h;h=83f64f14b6507b0519a473c1183354cc98b30629;hb=6eb5f114bb934c85515da1f38547728d80008961;hp=9a2ddcf5296dbe8df365785371b0b0bb744e4dd7;hpb=b4a3c33fc143fd57288fcfe0878e7a22eeaf61bf;p=m6w6%2Fext-psi diff --git a/src/engine.h b/src/engine.h index 9a2ddcf..83f64f1 100644 --- a/src/engine.h +++ b/src/engine.h @@ -3,9 +3,27 @@ size_t psi_t_alignment(token_t t); size_t psi_t_size(token_t t); -size_t psi_t_align(token_t t, size_t s); -size_t psi_offset_padding(size_t diff, size_t alignment); +static inline size_t psi_align(size_t s, size_t a) { + return ((s - 1) | (a - 1)) + 1; +} + +static inline size_t psi_offset_padding(size_t diff, size_t alignment) { + if (diff && diff <= psi_align(diff, alignment)) { + diff = 0; + } + + return diff; +} + +static inline void psi_do_set(zval *return_value, set_value *set) +{ + decl_arg *set_arg = set->vars->vars[0]->arg; + + zval_dtor(return_value); + set->func->handler(return_value, set, set_arg->let ? set_arg->let->ptr : set_arg->ptr); +} + int psi_internal_type(impl_type *type); zend_internal_arg_info *psi_internal_arginfo(impl *impl); size_t psi_num_min_args(impl *impl);