Export of internal Abseil changes

--
aabb5093ff380fc60d9a75ace279b620fdc4bff9 by Abseil Team <absl-team@google.com>:

Demangle Clang-specific "<expression> ::= cp <simple-id> <expression>* E"
Cf. https://clang.llvm.org/doxygen/ItaniumMangle_8cpp_source.html#l04338

PiperOrigin-RevId: 391358031

--
34dc7baa38f74a8c78b91ac94486707347a85e35 by Derek Mauro <dmauro@google.com>:

Internal change

PiperOrigin-RevId: 391282565
GitOrigin-RevId: aabb5093ff380fc60d9a75ace279b620fdc4bff9
Change-Id: I6d3e235a9c0a1b67a43071de205fed0fefe12912
pull/1008/head
Abseil Team 4 years ago committed by Andy Getz
parent f9d3bc9e00
commit c1aa431c07
  1. 12
      absl/debugging/internal/demangle.cc

@ -1617,6 +1617,7 @@ static bool ParseUnresolvedName(State *state) {
// ::= <2-ary operator-name> <expression> <expression>
// ::= <3-ary operator-name> <expression> <expression> <expression>
// ::= cl <expression>+ E
// ::= cp <simple-id> <expression>* E # Clang-specific.
// ::= cv <type> <expression> # type (expression)
// ::= cv <type> _ <expression>* E # type (expr-list)
// ::= st <type>
@ -1639,14 +1640,23 @@ static bool ParseExpression(State *state) {
return true;
}
// Object/function call expression.
ParseState copy = state->parse_state;
// Object/function call expression.
if (ParseTwoCharToken(state, "cl") && OneOrMore(ParseExpression, state) &&
ParseOneCharToken(state, 'E')) {
return true;
}
state->parse_state = copy;
// Clang-specific "cp <simple-id> <expression>* E"
// https://clang.llvm.org/doxygen/ItaniumMangle_8cpp_source.html#l04338
if (ParseTwoCharToken(state, "cp") && ParseSimpleId(state) &&
ZeroOrMore(ParseExpression, state) && ParseOneCharToken(state, 'E')) {
return true;
}
state->parse_state = copy;
// Function-param expression (level 0).
if (ParseTwoCharToken(state, "fp") && Optional(ParseCVQualifiers(state)) &&
Optional(ParseNumber(state, nullptr)) && ParseOneCharToken(state, '_')) {

Loading…
Cancel
Save