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

Method DemangleTemplateArgs

demangler/gnu3/demangle_gnu3.cpp:1628–1674  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1626
1627
1628void DemangleGNU3::DemangleTemplateArgs(vector<FunctionParameter>& args)
1629{
1630 indent();
1631 MyLogDebug("%s:: '%s'\n", __FUNCTION__, m_reader.GetRaw().c_str());
1632 TypeBuilder tmp;
1633 bool tmpValid = false;
1634 string expr;
1635 bool topLevel;
1636 const string lastName = m_lastName;
1637 while (m_reader.Peek() != 'E')
1638 {
1639 switch (m_reader.Read())
1640 {
1641 case 'L':
1642 expr = DemanglePrimaryExpression();
1643 args.push_back({expr, nullptr, true, Variable()});
1644 tmp = CreateUnknownType(expr);
1645 tmpValid = true;
1646 break;
1647 case 'X':
1648 args.push_back({DemangleExpression(), nullptr, true, Variable()});
1649 if (m_reader.Read() != 'E')
1650 throw DemangleException();
1651 break;
1652 case 'J':
1653 DemangleTemplateArgs(args);
1654 break;
1655 default:
1656 m_reader.UnRead();
1657 topLevel = m_topLevel;
1658 m_topLevel = false;
1659 tmp = DemangleType();
1660 m_topLevel = topLevel;
1661 args.push_back({tmp.GetString(), nullptr, true, Variable()});
1662 tmpValid = true;
1663 }
1664 if (m_topLevel && tmpValid)
1665 {
1666 MyLogDebug("Adding template ref: %s\n", tmp.GetString().c_str());
1667 PushTemplateType(tmp);
1668 }
1669 }
1670 m_reader.Consume();
1671 m_lastName = lastName;
1672 dedent();
1673 return;
1674}
1675
1676
1677TypeBuilder DemangleGNU3::DemangleNestedName()

Callers

nothing calls this directly

Calls 12

MyLogDebugFunction · 0.85
CreateUnknownTypeFunction · 0.85
c_strMethod · 0.80
push_backMethod · 0.80
UnReadMethod · 0.80
DemangleExceptionClass · 0.70
VariableClass · 0.50
GetRawMethod · 0.45
PeekMethod · 0.45
ReadMethod · 0.45
GetStringMethod · 0.45
ConsumeMethod · 0.45

Tested by

no test coverage detected