On Mon, Jan 6, 2014 at 3:05 PM, Howard Hinnant <hhinn...@apple.com> wrote:
> Author: hhinnant > Date: Mon Jan 6 17:05:04 2014 > New Revision: 198643 > > URL: http://llvm.org/viewvc/llvm-project?rev=198643&view=rev > Log: > Implement demangling for user-defined operators. > > 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=198643&r1=198642&r2=198643&view=diff > > ============================================================================== > --- libcxxabi/trunk/src/cxa_demangle.cpp (original) > +++ libcxxabi/trunk/src/cxa_demangle.cpp Mon Jan 6 17:05:04 2014 > @@ -2277,6 +2277,7 @@ parse_type(const char* first, const char > // ::= gt # > > // ::= ix # [] > // ::= le # <= > +// ::= li <source-name> # operator "" > // ::= ls # << > // ::= lS # <<= > // ::= lt # < > @@ -2438,6 +2439,18 @@ parse_operator_name(const char* first, c > 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\"\" "); > It would be more correct to use "operator\"\"" here (without the trailing space). This will generate an incorrect unmangled name for operator""if, which can only be written without the space. > + first = t; > + } > + } > + break; > case 's': > db.names.push_back("operator<<"); > first += 2; > > Modified: libcxxabi/trunk/test/test_demangle.cpp > URL: > http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/test/test_demangle.cpp?rev=198643&r1=198642&r2=198643&view=diff > > ============================================================================== > --- libcxxabi/trunk/test/test_demangle.cpp (original) > +++ libcxxabi/trunk/test/test_demangle.cpp Mon Jan 6 17:05:04 2014 > @@ -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]); > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits