[cfe-commits] [libcxxabi] r137469 - in /libcxxabi/trunk: src/cxa_demangle.cpp test/test_demangle.cpp
Howard Hinnant
hhinnant at apple.com
Fri Aug 12 10:33:10 PDT 2011
Author: hhinnant
Date: Fri Aug 12 12:33:10 2011
New Revision: 137469
URL: http://llvm.org/viewvc/llvm-project?rev=137469&view=rev
Log:
demangler: Drop preceeding () from function types, but not from pointers and references to function types
Modified:
libcxxabi/trunk/src/cxa_demangle.cpp
libcxxabi/trunk/test/test_demangle.cpp
Modified: libcxxabi/trunk/src/cxa_demangle.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/src/cxa_demangle.cpp?rev=137469&r1=137468&r2=137469&view=diff
==============================================================================
--- libcxxabi/trunk/src/cxa_demangle.cpp (original)
+++ libcxxabi/trunk/src/cxa_demangle.cpp Fri Aug 12 12:33:10 2011
@@ -7364,6 +7364,108 @@
return n + sz1 + sz2;
}
+ virtual char* get_demangled_name(char* buf) const
+ {
+ if (__size_)
+ {
+ const char* t = buf;
+ buf = __right_->first_demangled_name(buf);
+ if (buf != t && (__left_ == NULL ||
+ !__right_->__left_->is_reference_or_pointer_to_function_or_array()))
+ *buf++ = ' ';
+ }
+ else
+ {
+ strncpy(buf, "auto ", 5);
+ buf += 5;
+ }
+ if (__left_)
+ buf = __left_->first_demangled_name(buf);
+ buf = __right_->second_demangled_name(buf);
+ if (!__size_)
+ {
+ *buf++ = '-';
+ *buf++ = '>';
+ buf = __right_->first_demangled_name(buf);
+ }
+ return buf;
+ }
+
+ virtual size_t size() const
+ {
+ if (__cached_size_ == -1)
+ {
+ size_t off = 0;
+ if (__size_)
+ {
+ off = __right_->first_size();
+ if (off > 0 && (__left_ == NULL ||
+ !__right_->__left_->is_reference_or_pointer_to_function_or_array()))
+ ++off;
+ }
+ else
+ off = 5;
+ if (__left_)
+ off += __left_->first_size();
+ off += __right_->second_size();
+ if (!__size_)
+ {
+ off += 2;
+ off += __right_->first_size();
+ }
+ const_cast<long&>(__cached_size_) = off;
+ }
+ return __cached_size_;
+ }
+
+ virtual ptrdiff_t print(char* f, char* l) const
+ {
+ const ptrdiff_t r = l - f;
+ ptrdiff_t n = 0;
+ ptrdiff_t sz1 = 0;
+ ptrdiff_t sz2 = 0;
+ if (__size_)
+ {
+ sz1 = __right_->print_first(f, l);
+ if (sz1 != 0 && (__left_ == NULL ||
+ !__right_->__left_->is_reference_or_pointer_to_function_or_array()))
+ {
+ ++n;
+ if (r >= sz1 + 1)
+ f[sz1] = ' ';
+ }
+ }
+ else
+ {
+ n = 5;
+ if (r >= 5)
+ {
+ char* t = f;
+ *t++ = 'a';
+ *t++ = 'u';
+ *t++ = 't';
+ *t++ = 'o';
+ *t++ = ' ';
+ }
+ }
+ if (__left_)
+ sz2 = __left_->print_first(f + std::min(n + sz1, r), l);
+ n += sz1 + sz2;
+ sz2 = 0;
+ sz1 = __right_->print_second(f+std::min(r, n), l);
+ if (!__size_)
+ {
+ if (r > n+sz1+1)
+ {
+ f[n+sz1] = '-';
+ f[n+sz1+1] = '>';
+ }
+ n += 2;
+ sz2 = __right_->print_first(f+std::min(r, n+sz1), l);
+ }
+ return n + sz1 + sz2;
+ }
+
virtual bool is_function() const
{
return true;
Modified: libcxxabi/trunk/test/test_demangle.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/test_demangle.cpp?rev=137469&r1=137468&r2=137469&view=diff
==============================================================================
--- libcxxabi/trunk/test/test_demangle.cpp (original)
+++ libcxxabi/trunk/test/test_demangle.cpp Fri Aug 12 12:33:10 2011
@@ -29552,7 +29552,7 @@
{"_Z2f3IJiEEvDpPKT_", "void f3<int>(int const*)"},
{"_Z2f3IJifEEvDpPKT_", "void f3<int, float>(int const*, float const*)"},
{"_Z2f4IJifdEE5tupleIJDpT_EEv", "tuple<int, float, double> f4<int, float, double>()"},
- {"_Z2f5IiJifdEE8identityIFT_DpT0_EEv", "identity<int ()(int, float, double)> f5<int, int, float, double>()"},
+ {"_Z2f5IiJifdEE8identityIFT_DpT0_EEv", "identity<int (int, float, double)> f5<int, int, float, double>()"},
{"_Z2f6IJLi1ELi2ELi3EEE9int_tupleIJXspT_EEEv", "int_tuple<1, 2, 3> f6<1, 2, 3>()"},
{"_Z2f7IJ8identity13add_referenceEE14template_tupleIJDpT_EEv", "template_tuple<identity, add_reference> f7<identity, add_reference>()"},
{"_ZNK10__cxxabiv111__libcxxabi5__sub20first_demangled_nameEPc.eh", "__cxxabiv1::__libcxxabi::__sub::first_demangled_name(char*) const (.eh)"},
More information about the cfe-commits
mailing list