Commit 1343b6d0 by Chris Mihelich Committed by Copybara-Service

Recognize C++ vendor extended expressions (e.g., u9__is_same...E).

PiperOrigin-RevId: 636911360
Change-Id: I525e25b90b91712b95ab7499425de85610ff9115
parent 8bb0b503
......@@ -1851,6 +1851,7 @@ static bool ParseBracedExpression(State *state) {
// ::= sp <expression> # argument pack expansion
// ::= sr <type> <unqualified-name> <template-args>
// ::= sr <type> <unqualified-name>
// ::= u <source-name> <template-arg>* E # vendor extension
static bool ParseExpression(State *state) {
ComplexityGuard guard(state);
if (guard.IsTooComplex()) return false;
......@@ -1974,6 +1975,13 @@ static bool ParseExpression(State *state) {
}
state->parse_state = copy;
// Vendor extended expressions
if (ParseOneCharToken(state, 'u') && ParseSourceName(state) &&
ZeroOrMore(ParseTemplateArg, state) && ParseOneCharToken(state, 'E')) {
return true;
}
state->parse_state = copy;
return ParseUnresolvedName(state);
}
......
......@@ -387,6 +387,18 @@ TEST(Demangle, Spaceship) {
EXPECT_STREQ("g<>()", tmp);
}
TEST(Demangle, VendorExtendedExpressions) {
char tmp[80];
// void f<__e()>()
EXPECT_TRUE(Demangle("_Z1fIXu3__eEEEvv", tmp, sizeof(tmp)));
EXPECT_STREQ("f<>()", tmp);
// void f<__e(int, long)>()
EXPECT_TRUE(Demangle("_Z1fIXu3__eilEEEvv", tmp, sizeof(tmp)));
EXPECT_STREQ("f<>()", tmp);
}
TEST(Demangle, DirectListInitialization) {
char tmp[80];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment