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

Commit 008f11fb authored by Christopher Ferris's avatar Christopher Ferris Committed by android-build-merger
Browse files

Merge "Add support for boolean literals."

am: 63a0008d

Change-Id: I050cc47929c0152f05832bbe54a12aa45f93766a
parents d166904f 63a0008d
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);