add support for typed enums and deleted functions

This commit is contained in:
Günter Obiltschnig
2020-07-29 09:02:41 +02:00
parent 64101df736
commit 328d6a1a46
4 changed files with 58 additions and 2 deletions

View File

@@ -35,6 +35,14 @@ Enum::Enum(const std::string& name, NameSpace* pNameSpace, int flags):
}
Enum::Enum(const std::string& name, NameSpace* pNameSpace, const std::string& baseType, int flags):
Symbol(processName(name), pNameSpace),
_baseType(baseType),
_flags(flags)
{
}
Enum::~Enum()
{
}
@@ -81,7 +89,11 @@ Symbol::Kind Enum::kind() const
std::string Enum::toString() const
{
std::ostringstream ostr;
ostr << "enum " << name() << "\n{\n";
ostr << "enum ";
if (_flags & ENUM_IS_CLASS) ostr << "class ";
ostr << name();
if (!_baseType.empty()) ostr << ": " << _baseType;
ostr << "\n{\n";
for (Iterator it = begin(); it != end(); ++it)
{
ostr << "\t" << (*it)->toString() << "\n";

View File

@@ -804,6 +804,7 @@ const Token* Parser::parseEnum(const Token* pNext)
{
poco_assert (isKeyword(pNext, IdentifierToken::KW_ENUM));
std::string baseType;
int flags = 0;
_pCurrentSymbol = 0;
int line = _istr.getCurrentLineNumber();
@@ -821,8 +822,15 @@ const Token* Parser::parseEnum(const Token* pNext)
name = pNext->tokenString();
pNext = next();
}
if (isOperator(pNext, OperatorToken::OP_COLON))
{
pNext = next();
pNext = parseIdentifier(pNext, baseType);
}
expectOperator(pNext, OperatorToken::OP_OPENBRACE, "{");
Enum* pEnum = new Enum(name, currentNameSpace(), flags);
Enum* pEnum = new Enum(name, currentNameSpace(), baseType, flags);
addSymbol(pEnum, line);
pNext = next();
while (pNext->is(Token::IDENTIFIER_TOKEN))