Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 63a0008d authored by Christopher Ferris's avatar Christopher Ferris Committed by Gerrit Code Review
Browse files

Merge "Add support for boolean literals."

parents 0c24d6cc 05232758
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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;

+28 −0
Original line number Diff line number Diff line
@@ -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);
}
+1 −0
Original line number Diff line number Diff line
@@ -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);