Merge "Add support for boolean literals."
am: 63a0008df7
Change-Id: I050cc47929c0152f05832bbe54a12aa45f93766a
This commit is contained in:
commit
008f11fb5e
3 changed files with 37 additions and 0 deletions
|
|
@ -428,6 +428,14 @@ TEST(DemangleTest, StringTooLong) {
|
||||||
ASSERT_EQ("_ZN3one3twoEDa", demangler.Parse("_ZN3one3twoEDa", 12));
|
ASSERT_EQ("_ZN3one3twoEDa", demangler.Parse("_ZN3one3twoEDa", 12));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(DemangleTest, BooleanLiterals) {
|
||||||
|
Demangler demangler;
|
||||||
|
|
||||||
|
ASSERT_EQ("one<true>", demangler.Parse("_ZN3oneILb1EEE"));
|
||||||
|
ASSERT_EQ("one<false>", demangler.Parse("_ZN3oneILb0EEE"));
|
||||||
|
ASSERT_EQ("one<false, true>", demangler.Parse("_ZN3oneILb0ELb1EEE"));
|
||||||
|
}
|
||||||
|
|
||||||
TEST(DemangleTest, demangle) {
|
TEST(DemangleTest, demangle) {
|
||||||
std::string str;
|
std::string str;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -660,6 +660,29 @@ const char* Demangler::ParseArguments(const char* name) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* Demangler::ParseTemplateLiteral(const char* name) {
|
||||||
|
if (*name == 'E') {
|
||||||
|
parse_func_ = parse_funcs_.back();
|
||||||
|
parse_funcs_.pop_back();
|
||||||
|
return name + 1;
|
||||||
|
}
|
||||||
|
// Only understand boolean values with 0 or 1.
|
||||||
|
if (*name == 'b') {
|
||||||
|
name++;
|
||||||
|
if (*name == '0') {
|
||||||
|
AppendArgument("false");
|
||||||
|
cur_state_.str.clear();
|
||||||
|
} else if (*name == '1') {
|
||||||
|
AppendArgument("true");
|
||||||
|
cur_state_.str.clear();
|
||||||
|
} else {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
return name + 1;
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
const char* Demangler::ParseTemplateArgumentsComplex(const char* name) {
|
const char* Demangler::ParseTemplateArgumentsComplex(const char* name) {
|
||||||
if (*name == 'E') {
|
if (*name == 'E') {
|
||||||
if (parse_funcs_.empty()) {
|
if (parse_funcs_.empty()) {
|
||||||
|
|
@ -670,6 +693,11 @@ const char* Demangler::ParseTemplateArgumentsComplex(const char* name) {
|
||||||
FinalizeTemplate();
|
FinalizeTemplate();
|
||||||
Save(cur_state_.str, false);
|
Save(cur_state_.str, false);
|
||||||
return name + 1;
|
return name + 1;
|
||||||
|
} else if (*name == 'L') {
|
||||||
|
// Literal value for a template.
|
||||||
|
parse_funcs_.push_back(parse_func_);
|
||||||
|
parse_func_ = &Demangler::ParseTemplateLiteral;
|
||||||
|
return name + 1;
|
||||||
}
|
}
|
||||||
return ParseArguments(name);
|
return ParseArguments(name);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,7 @@ class Demangler {
|
||||||
const char* ParseArguments(const char* name);
|
const char* ParseArguments(const char* name);
|
||||||
const char* ParseTemplateArguments(const char* name);
|
const char* ParseTemplateArguments(const char* name);
|
||||||
const char* ParseTemplateArgumentsComplex(const char* name);
|
const char* ParseTemplateArgumentsComplex(const char* name);
|
||||||
|
const char* ParseTemplateLiteral(const char* name);
|
||||||
const char* ParseFunctionArgument(const char* name);
|
const char* ParseFunctionArgument(const char* name);
|
||||||
const char* ParseFunctionName(const char* name);
|
const char* ParseFunctionName(const char* name);
|
||||||
const char* FindFunctionName(const char* name);
|
const char* FindFunctionName(const char* name);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue