X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=m4%2Fpsi%2Fpsi_macro.m4;fp=m4%2Fpsi%2Fpsi_macro.m4;h=d26a888774a5a7a2c094ecfeb58a92521620a6d4;hp=b3ee9882ebb7d8fda758b79a2b1cee9e69d98ccc;hb=2f08002ac0b6de75b0ecb6fe57cbbc70cb2424ae;hpb=fb1661f43586388050fd42b9702c7beefaae08f3 diff --git a/m4/psi/psi_macro.m4 b/m4/psi/psi_macro.m4 index b3ee988..d26a888 100644 --- a/m4/psi/psi_macro.m4 +++ b/m4/psi/psi_macro.m4 @@ -9,25 +9,28 @@ EOF dnl PSI_MACRO(macro, decl args, action-if-true) AC_DEFUN(PSI_MACRO, [ AC_CHECK_DECL(PSI_VAR_NAME($1)$2, [ - $3 macro_type="PSI_VAR_TYPE($1)" macro_name="PSI_VAR_NAME($1)" m4_case([$2], [(void)], [ macro_decl="(void)" macro_call="()" + macro_action=call ], [()], [ macro_decl="()" macro_call="()" + macro_action=call ], [], [ macro_decl="()" macro_call="" + macro_action=get ], [ macro_decl="$2" macro_call="(m4_map_args_sep([PSI_VAR_NAME(], [)], [, ], m4_bregexp($2, [(\(.*\))], [\1])))" + macro_action=call ] ) ifelse(PSI_VAR_TYPE($1), [void], [ @@ -35,10 +38,25 @@ AC_DEFUN(PSI_MACRO, [ ], [ macro_body="return $macro_name$macro_call;" ]) - psi_add_macro "$macro_type _psi_redir_$macro_name$macro_decl { $macro_body }" - PSI_REDIR($macro_name, _psi_redir_$macro_name) + $3 + psi_add_macro "$macro_type _psi_${macro_action}_$macro_name$macro_decl { $macro_body }" + PSI_REDIR($macro_name, _psi_${macro_action}_$macro_name) ], [], PSI_INCLUDES) ]) dnl PSI_EXTVAR(type var) -AC_DEFUN(PSI_EXTVAR, [PSI_MACRO($1)]) +AC_DEFUN(PSI_EXTVAR, [ + dnl just a getter + PSI_MACRO($1, [], [ + PSI_DECL_ARGS($1) + psi_add_decl "$psi_decl_args" + dnl explicit getter & setter + PSI_REDIR([${macro_name}_get], [_psi_get_$macro_name]) + PSI_DECL_ARGS($1_get) + psi_add_decl "$psi_decl_args" + psi_add_macro "void _psi_set_${macro_name}($macro_type value) { memcpy(&$macro_name, &value, sizeof(value)); }" + PSI_REDIR([${macro_name}_set], [_psi_set_${macro_name}]) + PSI_DECL_ARGS([void PSI_VAR_NAME($1)_set], [(PSI_VAR_TYPE($1) _v)]) + psi_add_decl "$psi_decl_args" + ]) +])