MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / DemangleExpression

Method DemangleExpression

demangler/gnu3/demangle_gnu3.cpp:1309–1625  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1307
1308
1309string 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();

Callers

nothing calls this directly

Calls 12

MyLogDebugFunction · 0.85
GetOperatorFunction · 0.85
GetTemplateStringFunction · 0.85
c_strMethod · 0.80
UnReadMethod · 0.80
DemangleExceptionClass · 0.70
GetRawMethod · 0.45
ReadMethod · 0.45
GetStringMethod · 0.45
PeekMethod · 0.45
sizeMethod · 0.45
ConsumeMethod · 0.45

Tested by

no test coverage detected