Hi Chris,
The patch below is a hack which links back from the instantiated
template function back to the original uninstantiated form. It doesn't
attempt to describe the parameters of the instantiation, nor does it
cope with intermediate instantiations/specializations/etc.
Obviously this only does 1% of what's required for a general solution
- but it may help you to identify a few of the right macros and
functions to use to put a proper solution in place. Good luck!
As Brad said, you'll find cp-tree.h useful, but also take a look at cp-
tree.def.
Regards
Adrian
--
Adrian Taylor, Macrobug Ltd.
A company registered in England and Wales no 5892155, 352 Mill Road,
Cambridge CB1 3NN
VAT reg. GB 892 4122 21. http://www.macrobug.com/
Index: GCC/gcc/cp/xml.c
===================================================================
--- GCC/gcc/cp/xml.c (revision 2510)
+++ GCC/gcc/cp/xml.c (working copy)
@@ -1079,6 +1079,24 @@
}
/
*--------------------------------------------------------------------------*/
+/* Print XML attribute listing stating the original abstract version
of this
+ * instantiated templated function. */
+static void
+xml_print_template_attribute (xml_dump_info_p xdi, tree fd, int
complete)
+{
+ tree ti = DECL_TEMPLATE_INFO (fd);
+ if(ti)
+ {
+ tree td = DECL_TEMPLATE_RESULT(most_general_template(fd));
+ if (td != fd)
+ {
+ int id = xml_add_node(xdi, td, complete);
+ fprintf (xdi->file, " template_origin=\"_%d\"", id);
+ }
+ }
+}
+
+/
*--------------------------------------------------------------------------*/
/* Print XML attribute listing types that this type can throw. */
static void
xml_print_throw_attribute (xml_dump_info_p xdi, tree ft, int complete)
@@ -1660,6 +1678,7 @@
if(do_virtual) xml_print_virtual_method_attributes (xdi, fd);
if(do_static) xml_print_static_method_attribute (xdi, fd);
if(do_artificial) xml_print_artificial_attribute (xdi, fd);
+ xml_print_template_attribute (xdi, fd, dn->complete);
xml_print_throw_attribute (xdi, TREE_TYPE (fd), dn->complete);
xml_print_context_attribute (xdi, fd);
xml_print_mangled_attribute (xdi, fd);
On 16 Aug 2008, at 17:08, Chris Waldron wrote:
Brad,
I'm interested in at least taking a look at the effort required to
implement this feature. Can you point me in the right direction?
Thanks,
Chris
-----Original Message-----
From: Brad King [mailto:[EMAIL PROTECTED]
Sent: Monday, August 04, 2008 10:49 AM
To: Chris Waldron
Cc: Roman Yakovenko; gccxml
Subject: Re: [GCC-XML] Determining template parameter types
Chris Waldron wrote:
Thanks for the tip and you have what looks like cool tool. However
I've
written my own tool to scan the resultant XML because I have a
specific
requirement. I could detemine the type from parsing the template
parameters and matching the type names. However since GCC_XML
contains
the information, it should export it on the Class element. Also
having
the additional attribute will help to rapidly identify template class
definitons.
There are two reasons I've held off doing this:
1.) The real solution is to have full dumping of uninstantiated
templates. Specification of arguments used for instantiation should
be
in a form that references the template and then lists references to
the
arguments.
2.) The project that funds gccxml development doesn't need it.
If anyone wants to contribute support for templates I can help get you
started.
-Brad
-----Original Message-----
From: Roman Yakovenko [mailto:[EMAIL PROTECTED]
Sent: Saturday, August 02, 2008 10:07 AM
To: Chris Waldron
Cc: gccxml
Subject: Re: [GCC-XML] Determining template parameter types
On Sat, Aug 2, 2008 at 7:09 PM, Chris Waldron
<[EMAIL PROTECTED]>
wrote:
As a feature request, it would nice if template parameter types can
be
added
as an attribute of the Class Element. For example:
template <typename P1, typename P2> TemplateClass {
};
class TemplateClass<void, int>
{
};
<Class id="_10" name="TemplateClass<void,int*>" members="_23
_25
_26
_27 _28 _29 _30 " bases="_21 _24 " tparams="_20 _21">
<Base type="_21" access="public" virtual="0" offset="12"/>
<Base type="_24" access="public" virtual="0" offset="0"/>
</Class>
The tparams attribute indicates the template parameter types defined
on the
class. I cannot seem to find an easy way of determining the
template
parameter types from the XML output.
pygccxml does it right, in most cases:
http://www.language-binding.net/pygccxml/apidocs/pygccxml.declarations.t
emplates-module.html
_______________________________________________
gccxml mailing list
[email protected]
http://www.gccxml.org/mailman/listinfo/gccxml
_______________________________________________
gccxml mailing list
[email protected]
http://www.gccxml.org/mailman/listinfo/gccxml