Loading demangle/DemangleTest.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -509,6 +509,29 @@ TEST(DemangleTest, non_virtual_thunk) { ASSERT_EQ("_ZTH_N3oneE", demangler.Parse("_ZTH_N3oneE")); } TEST(DemangleTest, r_value_reference) { Demangler demangler; ASSERT_EQ( "android::SurfaceComposerClient::Transaction::merge(android::SurfaceComposerClient::" "Transaction&&)", demangler.Parse("_ZN7android21SurfaceComposerClient11Transaction5mergeEOS1_")); } TEST(DemangleTest, initial_St) { Demangler demangler; EXPECT_EQ("std::state", demangler.Parse("_ZSt5state")); EXPECT_EQ("std::_In::ward", demangler.Parse("_ZNSt3_In4wardE")); EXPECT_EQ("std::__terminate(void (*)())", demangler.Parse("_ZSt11__terminatePFvvE")); } TEST(DemangleTest, cfi) { Demangler demangler; EXPECT_EQ("nfa_sys_ptim_timer_update(tPTIM_CB*)", demangler.Parse("_Z25nfa_sys_ptim_timer_updateP8tPTIM_CB")); EXPECT_EQ("nfa_sys_ptim_timer_update(tPTIM_CB*) [clone .cfi]", demangler.Parse("_Z25nfa_sys_ptim_timer_updateP8tPTIM_CB.cfi")); } TEST(DemangleTest, demangle) { std::string str; Loading demangle/Demangler.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -580,6 +580,10 @@ const char* Demangler::ParseArguments(const char* name) { } return name + 1; case 'O': cur_state_.suffixes.push_back("&&"); return name + 1; case 'K': case 'V': { const char* suffix; Loading Loading @@ -701,6 +705,9 @@ const char* Demangler::ParseArguments(const char* name) { cur_state_.str.clear(); } return name; } else if (strcmp(name, ".cfi") == 0) { function_suffix_ += " [clone .cfi]"; return name + 4; } } return nullptr; Loading Loading @@ -816,6 +823,16 @@ const char* Demangler::FindFunctionName(const char* name) { return name + 1; } if (*name == 'S') { name++; if (*name == 't') { function_name_ = "std::"; name++; } else { return nullptr; } } if (std::isdigit(*name)) { name = GetStringFromLength(name, &function_name_); } else if (*name == 'L' && std::isdigit(name[1])) { Loading Loading
demangle/DemangleTest.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -509,6 +509,29 @@ TEST(DemangleTest, non_virtual_thunk) { ASSERT_EQ("_ZTH_N3oneE", demangler.Parse("_ZTH_N3oneE")); } TEST(DemangleTest, r_value_reference) { Demangler demangler; ASSERT_EQ( "android::SurfaceComposerClient::Transaction::merge(android::SurfaceComposerClient::" "Transaction&&)", demangler.Parse("_ZN7android21SurfaceComposerClient11Transaction5mergeEOS1_")); } TEST(DemangleTest, initial_St) { Demangler demangler; EXPECT_EQ("std::state", demangler.Parse("_ZSt5state")); EXPECT_EQ("std::_In::ward", demangler.Parse("_ZNSt3_In4wardE")); EXPECT_EQ("std::__terminate(void (*)())", demangler.Parse("_ZSt11__terminatePFvvE")); } TEST(DemangleTest, cfi) { Demangler demangler; EXPECT_EQ("nfa_sys_ptim_timer_update(tPTIM_CB*)", demangler.Parse("_Z25nfa_sys_ptim_timer_updateP8tPTIM_CB")); EXPECT_EQ("nfa_sys_ptim_timer_update(tPTIM_CB*) [clone .cfi]", demangler.Parse("_Z25nfa_sys_ptim_timer_updateP8tPTIM_CB.cfi")); } TEST(DemangleTest, demangle) { std::string str; Loading
demangle/Demangler.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -580,6 +580,10 @@ const char* Demangler::ParseArguments(const char* name) { } return name + 1; case 'O': cur_state_.suffixes.push_back("&&"); return name + 1; case 'K': case 'V': { const char* suffix; Loading Loading @@ -701,6 +705,9 @@ const char* Demangler::ParseArguments(const char* name) { cur_state_.str.clear(); } return name; } else if (strcmp(name, ".cfi") == 0) { function_suffix_ += " [clone .cfi]"; return name + 4; } } return nullptr; Loading Loading @@ -816,6 +823,16 @@ const char* Demangler::FindFunctionName(const char* name) { return name + 1; } if (*name == 'S') { name++; if (*name == 't') { function_name_ = "std::"; name++; } else { return nullptr; } } if (std::isdigit(*name)) { name = GetStringFromLength(name, &function_name_); } else if (*name == 'L' && std::isdigit(name[1])) { Loading