Merge "Add support for boolean literals." am: 63a0008df7
am: 008f11fb5e
am: b626ce6686
am: b32d591ef2
Change-Id: I143699133a65731087fad595a26bfcc9bbd2c1f6
This commit is contained in:
commit
dd3b4f794f
|
@ -428,6 +428,14 @@ TEST(DemangleTest, StringTooLong) {
|
|||
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) {
|
||||
std::string str;
|
||||
|
||||
|
|
|
@ -660,6 +660,29 @@ const char* Demangler::ParseArguments(const char* name) {
|
|||
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) {
|
||||
if (*name == 'E') {
|
||||
if (parse_funcs_.empty()) {
|
||||
|
@ -670,6 +693,11 @@ const char* Demangler::ParseTemplateArgumentsComplex(const char* name) {
|
|||
FinalizeTemplate();
|
||||
Save(cur_state_.str, false);
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -92,6 +92,7 @@ class Demangler {
|
|||
const char* ParseArguments(const char* name);
|
||||
const char* ParseTemplateArguments(const char* name);
|
||||
const char* ParseTemplateArgumentsComplex(const char* name);
|
||||
const char* ParseTemplateLiteral(const char* name);
|
||||
const char* ParseFunctionArgument(const char* name);
|
||||
const char* ParseFunctionName(const char* name);
|
||||
const char* FindFunctionName(const char* name);
|
||||
|
|
Loading…
Reference in New Issue