feat(CppParser): C++11 attributes support

This commit is contained in:
Günter Obiltschnig
2024-02-05 21:05:12 +01:00
parent ad07839db9
commit 568b0fca8e
12 changed files with 94 additions and 30 deletions

View File

@@ -32,8 +32,8 @@ class CppParser_API Attributes
/// name and values are strings.
{
public:
typedef std::map<std::string, std::string> AttrMap;
typedef AttrMap::const_iterator Iterator;
using AttrMap = std::map<std::string, std::string>;
using Iterator = AttrMap::const_iterator;
Attributes();
/// Creates the Attributes object.

View File

@@ -46,6 +46,8 @@ public:
{
OP_OPENBRACKET = 1, // [
OP_CLOSBRACKET, // ]
OP_DBL_OPENBRACKET, // [[
OP_DBL_CLOSBRACKET, // ]]
OP_OPENPARENT, // (
OP_CLOSPARENT, // )
OP_OPENBRACE, // {
@@ -101,7 +103,7 @@ public:
int asInteger() const;
private:
typedef std::map<std::string, int> OpMap;
using OpMap = std::map<std::string, int>;
OpMap _opMap;
};
@@ -112,7 +114,7 @@ class CppParser_API IdentifierToken: public CppToken
public:
enum Keywords
{
KW_ALIGNAS = 1,
KW_ALIGNAS = 100, // Note: start with 100 to avoid overlapping definitions with operators
KW_ALIGNOF,
KW_AND,
KW_AND_EQ,
@@ -206,7 +208,7 @@ public:
int asInteger() const;
private:
typedef std::map<std::string, int> KWMap;
using KWMap = std::map<std::string, int>;
KWMap _kwMap;
};

View File

@@ -28,7 +28,7 @@ namespace CppParser {
class CppParser_API Decl: public Symbol
/// This class represents a simple declaration in a C++ source file.
/// It is a base class for Function, TypeDef or Variable.
/// It is a base class for Function, TypeDef, Using or Variable.
{
public:
Decl(const std::string& decl, NameSpace* pNameSpace);

View File

@@ -37,8 +37,8 @@ class CppParser_API Enum: public Symbol
/// a collection of EnumValues.
{
public:
typedef std::vector<EnumValue*> Values;
typedef Values::const_iterator Iterator;
using Values = std::vector<EnumValue*>;
using Iterator = Values::const_iterator;
enum Flags
{

View File

@@ -49,8 +49,8 @@ public:
FN_DELETE = 1024 /// The function has been deleted.
};
typedef std::vector<Parameter*> Parameters;
typedef Parameters::const_iterator Iterator;
using Parameters = std::vector<Parameter*>;
using Iterator = Parameters::const_iterator;
Function(const std::string& decl, NameSpace* pNameSpace);
/// Creates the Function.

View File

@@ -33,10 +33,10 @@ class CppParser_API NameSpace: public Symbol
/// This class represents a namespace.
{
public:
typedef std::multimap<std::string, Symbol*> SymbolTable;
typedef SymbolTable::const_iterator Iterator;
typedef std::map<std::string, std::string> AliasMap;
typedef std::vector<std::string> NameSpaceVec;
using SymbolTable = std::multimap<std::string, Symbol*>;
using Iterator = SymbolTable::const_iterator;
using AliasMap = std::map<std::string, std::string>;
using NameSpaceVec = std::vector<std::string>;
NameSpace();
/// Creates the NameSpace.

View File

@@ -73,7 +73,7 @@ protected:
const Poco::Token* parseExtern(const Poco::Token* pNext);
const Poco::Token* parseTypeDef(const Poco::Token* pNext);
const Poco::Token* parseUsing(const Poco::Token* pNext);
const Poco::Token* parseFunc(const Poco::Token* pNext, std::string& decl);
const Poco::Token* parseFunc(const Poco::Token* pNext, const std::string& attrs, std::string& decl);
const Poco::Token* parseParameters(const Poco::Token* pNext, Function* pFunc);
const Poco::Token* parseBlock(const Poco::Token* pNext);
const Poco::Token* parseEnum(const Poco::Token* pNext);
@@ -82,6 +82,7 @@ protected:
const Poco::Token* parseClassMembers(const Poco::Token* pNext, Struct* pClass);
const Poco::Token* parseAccess(const Poco::Token* pNext);
const Poco::Token* parseIdentifier(const Poco::Token* pNext, std::string& id);
const Poco::Token* parseAttributes(const Poco::Token* pNext, std::string& attrs);
void addSymbol(Symbol* pSymbol, int lineNumber, bool addGST = true);
void pushNameSpace(NameSpace* pNameSpace, int lineNumber, bool addGST = true);
@@ -102,7 +103,7 @@ protected:
const Poco::Token* nextToken();
private:
typedef std::vector<NameSpace*> NSStack;
using NSStack = std::vector<NameSpace*>;
NameSpace::SymbolTable& _gst;
Poco::CountingInputStream _istr;

View File

@@ -51,13 +51,13 @@ public:
Struct* pClass;
};
typedef std::vector<Base> BaseClasses;
typedef BaseClasses::const_iterator BaseIterator;
typedef std::vector<Struct*> StructVec;
typedef StructVec::const_iterator DerivedIterator;
typedef std::vector<Function*> Functions;
typedef std::set<Function*> FunctionSet;
typedef std::set<Struct*> StructSet;
using BaseClasses = std::vector<Base>;
using BaseIterator = BaseClasses::const_iterator;
using StructVec = std::vector<Struct*>;
using DerivedIterator = StructVec::const_iterator;
using Functions = std::vector<Function*>;
using FunctionSet = std::set<Function*>;
using StructSet = std::set<Struct*>;
Struct(const std::string& decl, bool isClass, NameSpace* pNameSpace);
/// Creates the Struct.

View File

@@ -85,6 +85,13 @@ public:
Access getAccess() const;
/// Returns the symbol's access.
void setAttributeList(const std::string& attrs);
/// Sets the C++11 attribute list, e.g. "[[noreturn]]".
const std::string& getAttributeList() const;
/// Returns the C++11 attribute list, or an empty string
/// if the symbol does not have one.
void setDocumentation(const std::string& text);
/// Sets the symbol's documentation.
@@ -169,6 +176,7 @@ private:
std::string _package;
std::string _library;
Attributes _attrs;
std::string _attributeList;
static int _nextId;
};
@@ -189,6 +197,12 @@ inline const std::string& Symbol::name() const
}
inline const std::string& Symbol::getAttributeList() const
{
return _attributeList;
}
inline const std::string& Symbol::getDocumentation() const
{
return _documentation;