Random idea: how about taking a difference approach and doing this
in LY_DEFINE instead? You can do something along the lines
of
scm_set_object_property_x (the_resulting_scm_procedure,
ly_symbol2scm ("c++-location"),
scm_cons (ly_string2scm (__FILE__), to_scm
(__LINE__)));
and then implement 'make tags' via 'out/bin/lilypond -ddump-tags',
where -ddump-tags is an option that iterates over the lily module
and outputs the tags file by reading the object property (somewhat
similar to the autogeneration of the Internals in
scm/document-functions.scm). That means this doesn't need to maintain
a duplicated version of the name mangling logic. Is the etags
format simple enough to write?