summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-07-04 12:40:16 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-07-04 12:40:16 (GMT)
commit21d310503e29c61411491eef6be2fb83bb5ed61c (patch)
treececfa7ae53efb3a5585e8ca7d7f7a828d29f6b5f
parentade3ee4fd3b78e96deb08210838643969f2f6699 (diff)
Kept information about arguments for templated routines.
-rw-r--r--plugins/itanium/component.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/plugins/itanium/component.c b/plugins/itanium/component.c
index d890a1b..b8aa9c5 100644
--- a/plugins/itanium/component.c
+++ b/plugins/itanium/component.c
@@ -1755,12 +1755,15 @@ GBinRoutine *itd_translate_component_to_routine(const itanium_component *comp)
switch (name->type)
{
- case ICT_NAME:
- g_binary_routine_set_name(result, itd_translate_component(name, NULL));
- break;
+ /**
+ * Seules les productions de itd_name() sont valides ici.
+ * On écarte volontairement les noms qualifiés ICT_QUALIFIED_TYPE.
+ */
case ICT_NESTED_NAME:
case ICT_TEMPLATE_NAME_ARGS:
+ case ICT_STD_UNSCOPED_NAME:
+ case ICT_NAME:
type = itd_translate_component_to_type(name);
if (type == NULL) goto unsupported_encoding;
@@ -1769,11 +1772,18 @@ GBinRoutine *itd_translate_component_to_routine(const itanium_component *comp)
g_data_type_set_namespace(type, NULL, NULL);
- desc = g_data_type_to_string(type, true);
+ if (G_IS_TEMPLATE_TYPE(type))
+ g_binary_routine_set_name_from_type(result, type);
- g_object_unref(G_OBJECT(type));
+ else
+ {
+ desc = g_data_type_to_string(type, true);
+
+ g_object_unref(G_OBJECT(type));
- g_binary_routine_set_name(result, desc);
+ g_binary_routine_set_name(result, desc);
+
+ }
g_binary_routine_set_namespace(result, ns, "::");