| 1307 | |
| 1308 | |
| 1309 | string DemangleGNU3::DemangleExpression() |
| 1310 | { |
| 1311 | MyLogDebug("%s: '%s'\n", __FUNCTION__, m_reader.GetRaw().c_str()); |
| 1312 | /* |
| 1313 | <expression> ::= <unary operator-name> <expression> |
| 1314 | ::= <binary operator-name> <expression> <expression> |
| 1315 | ::= <ternary operator-name> <expression> <expression> <expression> |
| 1316 | ::= pp_ <expression> # prefix ++ |
| 1317 | ::= mm_ <expression> # prefix -- |
| 1318 | ::= cl <expression>+ E # expression (expr-list), call |
| 1319 | ::= cv <type> <expression> # type (expression), conversion with one argument |
| 1320 | ::= cv <type> _ <expression>* E # type (expr-list), conversion with other than one argument |
| 1321 | ::= tl <type> <expression>* E # type {expr-list}, conversion with braced-init-list argument |
| 1322 | ::= il <expression> E # {expr-list}, braced-init-list in any other context |
| 1323 | ::= [gs] nw <expression>* _ <type> E # new (expr-list) type |
| 1324 | ::= [gs] nw <expression>* _ <type> <initializer> # new (expr-list) type (init) |
| 1325 | ::= [gs] na <expression>* _ <type> E # new[] (expr-list) type |
| 1326 | ::= [gs] na <expression>* _ <type> <initializer> # new[] (expr-list) type (init) |
| 1327 | ::= [gs] dl <expression> # delete expression |
| 1328 | ::= [gs] da <expression> # delete[] expression |
| 1329 | ::= dc <type> <expression> # dynamic_cast<type> (expression) |
| 1330 | ::= sc <type> <expression> # static_cast<type> (expression) |
| 1331 | ::= cc <type> <expression> # const_cast<type> (expression) |
| 1332 | ::= rc <type> <expression> # reinterpret_cast<type> (expression) |
| 1333 | ::= ti <type> # typeid (type) |
| 1334 | ::= te <expression> # typeid (expression) |
| 1335 | ::= st <type> # sizeof (type) |
| 1336 | ::= sz <expression> # sizeof (expression) |
| 1337 | ::= at <type> # alignof (type) |
| 1338 | ::= az <expression> # alignof (expression) |
| 1339 | ::= nx <expression> # noexcept (expression) |
| 1340 | ::= <template-param> |
| 1341 | ::= <function-param> |
| 1342 | ::= dt <expression> <unresolved-name> # expr.name |
| 1343 | ::= pt <expression> <unresolved-name> # expr->name |
| 1344 | ::= ds <expression> <expression> # expr.*expr |
| 1345 | ::= sZ <template-param> # sizeof...(T), size of a template parameter pack |
| 1346 | ::= sZ <function-param> # sizeof...(parameter), size of a function parameter pack |
| 1347 | ::= sP <template-arg>* E # sizeof...(T), size of a captured template parameter pack from an alias template |
| 1348 | ::= sp <expression> # expression..., pack expansion |
| 1349 | ::= tw <expression> # throw expression |
| 1350 | ::= tr # throw with no operand (rethrow) |
| 1351 | ::= <unresolved-name> # f(p), N::f(p), ::f(p), |
| 1352 | # freestanding dependent name (e.g., T::x), |
| 1353 | # objectless nonstatic member reference |
| 1354 | ::= <expr-primary> |
| 1355 | */ |
| 1356 | char elm1 = '\0', elm2 = '\0'; |
| 1357 | string gs, out; |
| 1358 | elm1 = m_reader.Read(); |
| 1359 | if (elm1 == 'L') |
| 1360 | { |
| 1361 | out = DemanglePrimaryExpression(); |
| 1362 | return out; |
| 1363 | } |
| 1364 | else if (elm1 == 'T') //<template-param> |
| 1365 | { |
| 1366 | return DemangleTemplateSubstitution().GetString(); |
nothing calls this directly
no test coverage detected