X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=m4%2Fpsi%2Fpsi_macro.m4;h=35af8a4251e2f19d4a1e464c6264d9dd906cbc3e;hp=d26a888774a5a7a2c094ecfeb58a92521620a6d4;hb=3ef8c66ab1300801bcdb15b43f9f28e77b6487b6;hpb=991b10eeadb51b0b3309f140391ecf0b4c1e1859 diff --git a/m4/psi/psi_macro.m4 b/m4/psi/psi_macro.m4 index d26a888..35af8a4 100644 --- a/m4/psi/psi_macro.m4 +++ b/m4/psi/psi_macro.m4 @@ -11,6 +11,14 @@ AC_DEFUN(PSI_MACRO, [ AC_CHECK_DECL(PSI_VAR_NAME($1)$2, [ macro_type="PSI_VAR_TYPE($1)" macro_name="PSI_VAR_NAME($1)" + PSI_TYPE_INDIRECTION([$1],, macro_pointer_level, macro_array_size) + if test "$macro_array_size" -gt 0; then + macro_array="@<:@$macro_array_size@:>@" + macro_return="$macro_type*" + else + macro_array="" + macro_return="$macro_type" + fi m4_case([$2], [(void)], [ macro_decl="(void)" @@ -39,24 +47,25 @@ AC_DEFUN(PSI_MACRO, [ macro_body="return $macro_name$macro_call;" ]) $3 - psi_add_macro "$macro_type _psi_${macro_action}_$macro_name$macro_decl { $macro_body }" + psi_add_macro "$macro_return _psi_${macro_action}_$macro_name$macro_decl { $macro_body }" PSI_REDIR($macro_name, _psi_${macro_action}_$macro_name) - ], [], PSI_INCLUDES) + ], [], [PSI_INCLUDES]) ]) dnl PSI_EXTVAR(type var) AC_DEFUN(PSI_EXTVAR, [ - dnl just a getter PSI_MACRO($1, [], [ + dnl just a getter PSI_DECL_ARGS($1) psi_add_decl "$psi_decl_args" - dnl explicit getter & setter + dnl explicit getter PSI_REDIR([${macro_name}_get], [_psi_get_$macro_name]) - PSI_DECL_ARGS($1_get) + PSI_DECL_ARGS([PSI_VAR_TYPE_RETURN($1) PSI_VAR_NAME($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)); }" + dnl setter + psi_add_macro "void _psi_set_${macro_name}($macro_type value$macro_array) { memcpy(&$macro_name, &value, sizeof($macro_type$macro_array)); }" PSI_REDIR([${macro_name}_set], [_psi_set_${macro_name}]) - PSI_DECL_ARGS([void PSI_VAR_NAME($1)_set], [(PSI_VAR_TYPE($1) _v)]) + PSI_DECL_ARGS([void PSI_VAR_NAME($1)_set], [($1)]) psi_add_decl "$psi_decl_args" ]) ])