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