From 66e499376acbff61aece11ed8c0cef59c05aca3a Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 6 Mar 2014 15:07:35 -0500 Subject: Output: Make FundamentalType names match gccxml The gccxml FundamentalType names used different variants for integer type names than Clang uses. Hard-code the names for these types. Add a test case to cover these names. --- src/Output.cxx | 15 +++++++++++++- test/CMakeLists.txt | 1 + test/expect/gccxml.FundamentalTypes-xml.txt | 32 +++++++++++++++++++++++++++++ test/input/FundamentalTypes.cxx | 15 ++++++++++++++ 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 test/expect/gccxml.FundamentalTypes-xml.txt create mode 100644 test/input/FundamentalTypes.cxx diff --git a/src/Output.cxx b/src/Output.cxx index 0e4c18c..c24c451 100644 --- a/src/Output.cxx +++ b/src/Output.cxx @@ -1268,7 +1268,20 @@ void ASTVisitor::OutputBuiltinType(clang::BuiltinType const* t, { this->OS << " PrintIdAttribute(dn); - this->PrintNameAttribute(t->getName(this->CTX.getPrintingPolicy()).str()); + + // gccxml used different name variants than Clang for some types + std::string name; + switch (t->getKind()) { + case clang::BuiltinType::Short: name = "short int"; break; + case clang::BuiltinType::UShort: name = "short unsigned int"; break; + case clang::BuiltinType::Long: name = "long int"; break; + case clang::BuiltinType::ULong: name = "long unsigned int"; break; + case clang::BuiltinType::LongLong: name = "long long int"; break; + case clang::BuiltinType::ULongLong: name = "long long unsigned int"; break; + default: name = t->getName(this->CTX.getPrintingPolicy()).str(); break; + }; + this->PrintNameAttribute(name); + this->OS << "/>\n"; } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d3cb069..112d3c3 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -93,6 +93,7 @@ castxml_test_gccxml(Function-variadic) castxml_test_gccxml(FunctionType) castxml_test_gccxml(FunctionType-variadic) castxml_test_gccxml(FundamentalType) +castxml_test_gccxml(FundamentalTypes) castxml_test_gccxml(Method) castxml_test_gccxml(MethodType) castxml_test_gccxml(MethodType-cv) diff --git a/test/expect/gccxml.FundamentalTypes-xml.txt b/test/expect/gccxml.FundamentalTypes-xml.txt new file mode 100644 index 0000000..6bd2561 --- /dev/null +++ b/test/expect/gccxml.FundamentalTypes-xml.txt @@ -0,0 +1,32 @@ +^<\?xml version="1.0"\?> +]*> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +$ diff --git a/test/input/FundamentalTypes.cxx b/test/input/FundamentalTypes.cxx new file mode 100644 index 0000000..7ec7c53 --- /dev/null +++ b/test/input/FundamentalTypes.cxx @@ -0,0 +1,15 @@ +namespace start { + typedef char t_Char; + typedef signed char t_SChar; + typedef unsigned char t_UChar; + typedef short t_Short; + typedef unsigned short t_UShort; + typedef int t_Int; + typedef unsigned int t_UInt; + typedef long t_Long; + typedef unsigned long t_ULong; + typedef long long t_LongLong; + typedef unsigned long long t_ULongLong; + typedef float t_Float; + typedef double t_Double; +} -- cgit v0.12