\expandafter\let\expandafter\@tempa\csname cat!#2\endcsname%
\expandafter\let\expandafter\@tempb\csname modcat/#1\endcsname%
\ifx\@tempa\relax\@tempb{#2}\else\@tempa\@tempb\fi}
-\def\@maybe@modlabel#1#2{\if!#1!\else#1/\fi#2}
+\def\@mod@dispatch#1#2{\csname #1/#2\endcsname}
\def\@desc@dispatch#1#2{%
\csname #1/%
\expandafter\ifx\csname catsw!#2\endcsname\relax plain%
\def\nlret{\\\hspace{4em}\returns}
\@namedef{modcat/}#1{#1}
+\@namedef{modlabel/}#1{#1}
+\@namedef{modindex/}#1{#1@\noexpand\code{#1}}
\@namedef{modcat/setf}#1{\code{setf}-#1}
+\@namedef{modlabel/setf}#1{setf/#1}
+\@namedef{modindex/setf}#1{#1@\noexpand\code{#1}}
\@namedef{descargs/plain}#1{#1{}}
-\@namedef{desclabel/plain}#1#2#3{#1:\@maybe@modlabel{#2}{#3}}
+\@namedef{desclabel/plain}#1#2#3{#1:\@mod@dispatch{modlabel}{#2}{#3}}
\@namedef{descindex/plain}#1#2#3{%
- #3@\noexpand\code{#3}!%
+ \@mod@dispatch{modindex}{#2}{#3}!%
\protect\describecategoryname[#2]{#1}%
}
\@namedef{descargs/method}#1#2{#1{{#2}}}
-\@namedef{desclabel/method}#1#2#3#4{#1:\@maybe@modlabel{#2}{#3}(#4)}
+\@namedef{desclabel/method}#1#2#3#4%
+ {#1:\@mod@dispatch{modlabel}{#2}{#3}(#4)}
\@namedef{descindex/method}#1#2#3#4{%
- #3@\noexpand\code{#3}!%
+ \@mod@dispatch{modindex}{#2}{#3}!%
\protect\describecategoryname[#2]{#1}%
\protect\fmtspecs{ specialized at }{#4}%
}