From 314e117f7e2dbf5edd57da4cc067609c43c21447 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Sat, 22 Mar 2014 10:01:02 +0400 Subject: [PATCH] Fixed DSDL template to prevent name clashing with user defined types --- .../dsdl_compiler/data_type_template.tmpl | 18 +++++++++--------- .../dsdl_test/dsdl_uavcan_compilability.cpp | 1 - 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/libuavcan/dsdl_compiler/data_type_template.tmpl b/libuavcan/dsdl_compiler/data_type_template.tmpl index 1b41f8de25..9b1459bee5 100644 --- a/libuavcan/dsdl_compiler/data_type_template.tmpl +++ b/libuavcan/dsdl_compiler/data_type_template.tmpl @@ -45,13 +45,13 @@ UAVCAN_PACKED_BEGIN #endif % if t.kind != t.KIND_SERVICE: -template +template % endif struct ${t.cpp_type_name} { <%def name="generate_primary_body(type_name, max_bitlen, fields, constants)" buffered="True"> - typedef const ${type_name}& ParameterType; - typedef ${type_name}& ReferenceType; + typedef const ${type_name}<_tmpl>& ParameterType; + typedef ${type_name}<_tmpl>& ReferenceType; <%def name="expand_attr_types(group_name, attrs)"> struct ${group_name} @@ -101,7 +101,7 @@ struct ${t.cpp_type_name} enum { MaxByteLen = ::uavcan::BitLenToByteLen::Result }; ::uavcan::StaticAssert::check(); - ::uavcan::StaticAssert::check(); // Usage check + ::uavcan::StaticAssert<_tmpl == 0>::check(); // Usage check #if UAVCAN_DEBUG /* @@ -148,13 +148,13 @@ ${'::uavcan::TailArrayOptDisabled' if (idx + 1) < len(fields) else 'tao_mode'}); ${generate_codec_calls_per_field('decode', 'ReferenceType')} % if t.kind == t.KIND_SERVICE: - template + template struct Request_ { ${generate_primary_body('Request_', t.get_max_bitlen_request(), t.request_fields, t.request_constants) | indent} }; - template + template struct Response_ { ${generate_primary_body('Response_', t.get_max_bitlen_response(), t.response_fields, t.response_constants) | indent} @@ -212,9 +212,9 @@ private: <%def name="define_out_of_line_constants(scope_prefix, constants)"> % for a in constants: % if not a.cpp_use_enum: -template -const typename ::uavcan::StorageType< typename ${scope_prefix}::ConstantTypes::${a.name} >::Type - ${scope_prefix}::${a.name} = ${a.cpp_value}; // ${a.init_expression} +template +const typename ::uavcan::StorageType< typename ${scope_prefix}<_tmpl>::ConstantTypes::${a.name} >::Type + ${scope_prefix}<_tmpl>::${a.name} = ${a.cpp_value}; // ${a.init_expression} %endif % endfor diff --git a/libuavcan/test/dsdl_test/dsdl_uavcan_compilability.cpp b/libuavcan/test/dsdl_test/dsdl_uavcan_compilability.cpp index 7383a83328..ddc7524979 100644 --- a/libuavcan/test/dsdl_test/dsdl_uavcan_compilability.cpp +++ b/libuavcan/test/dsdl_test/dsdl_uavcan_compilability.cpp @@ -15,7 +15,6 @@ #include #include #include -#include #include #include #include