diff options
| author | Howard Hinnant <hhinnant@apple.com> | 2014-01-06 23:05:04 +0000 |
|---|---|---|
| committer | Howard Hinnant <hhinnant@apple.com> | 2014-01-06 23:05:04 +0000 |
| commit | 5a7b4ca21e364193591bacd04cce59afb086d79e (patch) | |
| tree | 340abb2ffe8ea3fffeb55c36727f6b78e492734a | |
| parent | 903b14432d69d27b22c77dea5df5b4363a26426f (diff) | |
| download | bcm5719-llvm-5a7b4ca21e364193591bacd04cce59afb086d79e.tar.gz bcm5719-llvm-5a7b4ca21e364193591bacd04cce59afb086d79e.zip | |
Implement demangling for user-defined operators.
llvm-svn: 198643
| -rw-r--r-- | libcxxabi/src/cxa_demangle.cpp | 13 | ||||
| -rw-r--r-- | libcxxabi/test/test_demangle.cpp | 1 |
2 files changed, 14 insertions, 0 deletions
diff --git a/libcxxabi/src/cxa_demangle.cpp b/libcxxabi/src/cxa_demangle.cpp index ca4155d4fec..839aebec1c4 100644 --- a/libcxxabi/src/cxa_demangle.cpp +++ b/libcxxabi/src/cxa_demangle.cpp @@ -2277,6 +2277,7 @@ parse_type(const char* first, const char* last, C& db) // ::= gt # > // ::= ix # [] // ::= le # <= +// ::= li <source-name> # operator "" // ::= ls # << // ::= lS # <<= // ::= lt # < @@ -2438,6 +2439,18 @@ parse_operator_name(const char* first, const char* last, C& db) db.names.push_back("operator<="); first += 2; break; + case 'i': + { + const char* t = parse_source_name(first+2, last, db); + if (t != first+2) + { + if (db.names.empty()) + return first; + db.names.back().first.insert(0, "operator\"\" "); + first = t; + } + } + break; case 's': db.names.push_back("operator<<"); first += 2; diff --git a/libcxxabi/test/test_demangle.cpp b/libcxxabi/test/test_demangle.cpp index 9bff745964b..2d9dd55abd4 100644 --- a/libcxxabi/test/test_demangle.cpp +++ b/libcxxabi/test/test_demangle.cpp @@ -29584,6 +29584,7 @@ const char* cases[][2] = {"_Z1fPKU11objcproto1A7NSArray", "f(NSArray<A> const*)"}, {"_ZNK1AIJ1Z1Y1XEEcv1BIJDpPT_EEIJS2_S1_S0_EEEv", "A<Z, Y, X>::operator B<X*, Y*, Z*><X, Y, Z>() const"}, {"_ZNK3Ncr6Silver7Utility6detail12CallOnThreadIZ53-[DeploymentSetupController handleManualServerEntry:]E3$_5EclIJEEEDTclclL_ZNS2_4getTIS4_EERT_vEEspclsr3stdE7forwardIT_Efp_EEEDpOSA_", "decltype(-[DeploymentSetupController handleManualServerEntry:]::$_5& Ncr::Silver::Utility::detail::getT<-[DeploymentSetupController handleManualServerEntry:]::$_5>()()(std::forward<-[DeploymentSetupController handleManualServerEntry:]::$_5>(fp))) Ncr::Silver::Utility::detail::CallOnThread<-[DeploymentSetupController handleManualServerEntry:]::$_5>::operator()<>(-[DeploymentSetupController handleManualServerEntry:]::$_5&&) const"}, + {"_Zli2_xy", "operator\"\" _x(unsigned long long)"}, }; const unsigned N = sizeof(cases) / sizeof(cases[0]); |

