grepc_c_mo_decl_() { grepc_c_m_decl_ "$1";
printf '%s' '(?!\()'; }
grepc_c_m_repl_() { printf '%s' '(?:(?![^\\]$).)*'"$1"'.*?(?<!\\)$'; }
+grepc_c_t_sue_decl_() { printf '%s' '(?s)^([\w[]([\w\s\(,\)[\]*]|::)*[\w\s\)*\]]\s+)?\b(?:'"$1"')\b([\w \t[\]]|::)*(?<!\w)'"$2"'(?!\w)'; }
grepc_c_e() { grepc_c_e_decl_;
grepc_c_mo() { grepc_c_mo_decl_ "$1";
grepc_c_m_repl_ '';
echo; }
-grepc_c_t_braced() { printf '%s' '(?s)^([\w[]([\w\s\(,\)[\]*]|::)*[\w\s\)*\]]\s+)?\b(struct|union|enum)\b([\w \t[\]]|::)+\b'"$1"'\b';
+grepc_c_t_braced() { grepc_c_t_sue_decl_ 'struct|union|enum' "$1";
grepc_c_body_;
echo '[^;]*;'; }
grepc_c_t_td_simple() { echo '(?s)^[ \t]*typedef\s+[^{};]+\b'"$1"';'; }
grepc_c_umo() { grepc_c_mo_decl_ '\w+'
grepc_c_m_repl_ "$1";
echo; }
-grepc_c_ut_su() { printf '%s' '(?s)^([\w[]([\w\s\(,\)[\]*]|::)*[\w\s\)*\]]\s+)?\b(struct|union)\b([\w \t[\]]|::)*';
+grepc_c_ut_su() { grepc_c_t_sue_decl_ 'struct|union' '';
grepc_c_u_body_ "$1";
echo '[^;]*;'; }
grepc_c_ut_td_simple() { echo '(?s)^[ \t]*typedef\s+[^{};]*'"$1"'[^{};]+;'; }