IdentifiersPtr Parser::parseIdentifierList_r()
{
    if (match(TokenType::Comma)) {
        return parseIdentifierList();
    }

    return IdentifiersPtr();
}
IdentifiersPtr Parser::parseIdentifierList()
{
    IdentifierPtr curIdentifier = parseIdentifier();
    if (m_errorCode > ErrorCodes::NoError) {
        panic(identifierListFollow, identifierListFollowSize);
        return IdentifiersPtr();
    }

    IdentifiersPtr identifiers(new Identifiers);
    identifiers->list.push_back(curIdentifier);

    IdentifiersPtr rest = parseIdentifierList_r();
    if (rest) {
        identifiers->list.insert(identifiers->list.end(), rest->list.begin(), rest->list.end());
    }

    return identifiers;
}
IdentifiersPtr NullFactory::createIdentifiers() const {
    return IdentifiersPtr(new Identifiers());
}