124#define VISIT_COND(CALL) \
200 ,
defn_(std::move(defn))
295 ,
cond_(std::move(cond))
315 ,
defn_(std::move(defn))
335 ,
err_(std::move(err))
355 ,
err_(std::move(err))
380 ,
defn_(std::move(defn))
457 if ((attr & CppIdentifierAttrib::kConst) == 0)
509 name_ = std::move(_name);
867 std::string apidecor,
959 name_ = std::move(_name);
963 auto itr =
name_.rfind(
':');
964 if (itr ==
name_.npos)
966 return name().substr(itr + 1);
1031 members_.push_back(std::move(mem));
1057 auto ret = std::move(
members_[idx]);
1097 return (
attr_ & _attr) == _attr;
1208 return ((
attr_ & _attr) == _attr);
1304 for (
auto &m: members) {
1306 if (ptr->objType_ == CppObjType::kFunction) {
1308 if(ptrFunc->name_ ==
"main") {
1377 if (
defn_ !=
nullptr)
1400 std::string ownerName = std::string())
1457 memInits.
blob = blob;
1634 ,
alias_(std::move(alias))
1654 ,
doc_(std::move(doc))
1695 :
atom(new std::string(sz, l))
1700 :
atom(new std::string(sz))
1705 :
atom(new std::string(std::move(tok)))
1832 for (
int i = 0; i < 3; i++)
1835 if (p->expr ==
nullptr)
1846 p->lambda->accept(v);
1899 std::string underlyingType = std::string())
1921template <CppObjType _ObjType>
1939 if (
cond_ !=
nullptr)
1941 if (
body_ !=
nullptr)
1959 else_.reset(_elsePart);
1965 if (
cond_ !=
nullptr)
1967 if (
body_ !=
nullptr)
1969 if (
else_ !=
nullptr)
2008 if (
stop_ !=
nullptr)
2010 if (
step_ !=
nullptr)
2012 if (
body_ !=
nullptr)
2036 if (
var_ !=
nullptr)
2038 if (
expr_ !=
nullptr)
2040 if (
body_ !=
nullptr)
2079 if (
cond_ !=
nullptr)
2081 for (
auto& c : *
body_)
2083 if (c.case_ !=
nullptr)
2085 if (c.body_ !=
nullptr)
2128 if (c->exceptionType_ !=
nullptr)
2131 if (c->catchStmt_ !=
nullptr)
2132 c->catchStmt_->accept(v);
2143struct CppTemplateArg;
2151 ,
asm_(std::move(asmBlock))
2193 ,
label_(std::move(label))
2206 : name_(std::move(
name))
2207 , assignValue_(assign)
2208 , assignType_(assignType)
2224 , compound_(compound)
2225 , typeModifier_(modifier)
2231 , compound_(compound)
2232 , typeModifier_(modifier)
2238 , compound_(enumObj)
2239 , typeModifier_(modifier)
2250 : paramType_(paramType)
2251 , paramName_(std::move(paramName))
2262 return !(expr1 == expr2);
2267 if (exprAtom1.
type != exprAtom2.
type)
2271 return (*exprAtom1.
atom) == (*exprAtom2.
atom);
2275 return (*exprAtom1.
expr) == (*exprAtom2.
expr);
2282 return !(exprAtom1 == exprAtom2);
Helps working with raw or unique_ptr of CppObj in a uniform way.
virtual bool visit(CppVarType *p)=0
The visitor pattern's visit methods for the given types.
bool operator==(const CppExpr &expr1, const CppExpr &expr2)
std::unique_ptr< CppTemplateParamList > CppTemplateParamListPtr
std::unique_ptr< CppSwitchBody > CppSwitchBodyPtr
std::unique_ptr< CppExpr > CppExprPtr
std::pair< std::string, CppExpr * > CppMemInit
Class data member initialization as part of class constructor.
std::list< CppEnumItem * > CppEnumItemList
std::unique_ptr< CppVarType > CppVarTypePtr
std::unique_ptr< CppEnumItemList > CppEnumItemListPtr
std::vector< std::unique_ptr< CppTemplateParam > > CppTemplateParamList
std::vector< CppObjPtr > CppParamVector
CppIdentifierList CppFuncThrowSpec
std::unique_ptr< CppFuncThrowSpec > CppFuncThrowSpecPtr
bool operator!=(const CppExpr &expr1, const CppExpr &expr2)
CppExprPtr AttribSpecifier
std::unique_ptr< CppObj > CppObjPtr
std::unique_ptr< CppVarList > CppVarListPtr
std::vector< std::unique_ptr< CppObj > > CppObjPtrArray
std::vector< std::string > CppIdentifierList
std::unique_ptr< AttribSpecifierArray > AttribSpecifierSequence
std::vector< CppExprPtr > CppArraySizes
std::unique_ptr< CppInheritanceList > CppInheritanceListPtr
std::vector< CppVarDeclInList > CppVarDeclList
std::vector< AttribSpecifier > AttribSpecifierArray
CppMemInits makeCppMemInitList(std::list< CppMemInit > *memInitList)
std::vector< CppCase > CppSwitchBody
std::unique_ptr< CppVar > CppVarPtr
std::unique_ptr< CppCatchBlock > CppCatchBlockPtr
std::unique_ptr< CppCompound > CppCompoundPtr
CppMemInits makeEmptyCppMemInitList()
std::list< CppInheritInfo > CppInheritanceList
std::vector< CppCatchBlockPtr > CppCatchBlocks
std::unique_ptr< CppParamVector > CppParamVectorPtr
bool isClass(CppCompoundEPtr compound)
CppAccessType accessType(CppObj *cppObj)
std::vector< CppObjPtr > CppParamVector
std::unique_ptr< CppObj > CppObjPtr
std::string & baseType(CppVarType *varType)
std::string & name(CppVar *var)
std::string & trimBlob(std::string &s)
std::string & cleanseIdentifier(std::string &id)
strips new-line char and collapses multiple white chars.
A mixin class to allow objects to have attribute specifier sequence as described at https://en....
AttribSpecifierSequence attributeSpecifiers_
void attribSpecifierSequence(AttribSpecifierArray *attribSpecifierArray)
AttribSpecifierSequence & attribSpecifierSequence()
CppAsmBlock(std::string asmBlock)
void accept(CppVisitorBase *v) override
A stream of text that represents some content in a C++ program.
CppBlob(std::string blob)
static constexpr CppObjType kObjectType
void accept(CppVisitorBase *v) override
CppCase(CppExpr *cond, CppCompound *body)
CppVarTypePtr exceptionType_
std::string exceptionName_
CppCompoundPtr catchStmt_
Some blocks have common structure like if, while, and do-while.
static constexpr CppObjType kObjectType
CppCommonBlock(CppObj *cond, CppObj *body)
void accept(CppVisitorBase *v) override
All classes, structs, unions, and namespaces can be classified as a Compound object.
CppTemplateParamList * templateParamList()
void addMemberAtFront(CppObj *mem)
CppObjPtrArray & members()
CppCompound(std::string name, CppCompoundType type)
std::vector< CppConstructor * > ctors_
static constexpr CppObjType kObjectType
void accept(CppVisitorBase *v) override
CppConstructor * copyCtor()
bool triviallyConstructable()
CppTemplateParamListPtr templSpec_
CppObjPtr deassocMemberAt(size_t idx)
std::vector< CppConstructor * > & ctors()
bool hasAttr(std::uint32_t _attr)
bool hasASingleBlobMember()
CppConstructor * copyCtor_
bool hasPublicVirtualMethod()
void assignSpecialMember(CppObj *mem)
void name(std::string _name)
CppInheritanceListPtr inheritanceList_
void inheritanceList(CppInheritanceList *_inheritanceList)
void addBaseClass(std::string baseName, CppAccessType inheritType)
CppCompound(CppAccessType accessType, CppCompoundType type=CppCompoundType::kUnknownCompound)
void addMemberAt(CppObjPtr &&mem, unsigned index)
void addAttr(std::uint32_t _attr)
void compoundType(CppCompoundType compoundType)
void addMemberAtFront(CppObjPtr &&mem)
CppConstructor * moveCtor_
void apidecor(std::string apidecor)
void templateParamList(CppTemplateParamList *_templateParamList)
CppCompoundType compoundType()
CppCompound(CppCompoundType type)
CppInheritanceListPtr & inheritanceList()
TriStateBool hasPureVirtual_
CppCompoundType compoundType_
void addMember(CppObj *mem)
void addMember(CppObjPtr &&mem)
void templateParamList(CppTemplateParamListPtr _templateParamList)
CppConstructor * moveCtor()
void inheritanceList(CppInheritanceListPtr _inheritanceList)
CppCompound(std::string name, CppAccessType accessType, CppCompoundType type)
void accept(CppVisitorBase *v) override
TriStateBool isCopyConstructor_
~CppConstructor() override
static constexpr CppObjType kObjectType
TriStateBool isMoveConstructor_
CppConstructor(CppAccessType accessType, std::string name, CppParamVector *params, CppMemInits memInitList, std::uint32_t attr)
CppDefine(DefType defType, std::string name, std::string defn=std::string())
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
std::string defn_
This will contain everything after name.
CppDestructor(CppAccessType accessType, std::string name, std::uint32_t attr)
static constexpr CppObjType kObjectType
void accept(CppVisitorBase *v) override
CppEnumItem(std::string name, CppExpr *val=nullptr)
CppEnumItem(CppObj *anyItem)
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
std::string underlyingType_
CppEnumItemListPtr itemList_
CppEnum(CppAccessType accessType, std::string name, CppEnumItemList *itemList, bool isClass=false, std::string underlyingType=std::string())
An individual expression.
CppExprAtom(CppVarType *vType)
enum CppExprAtom::@4 type
CppExprAtom(CppLambda *l)
void destroy()
It is expected to be called explicitly to destroy an CppExprAtom object.
CppVarType * varType
For type cast, and sizeof expression.
CppExprAtom(std::string tok)
CppExprAtom(char *sz, size_t l)
An expression in a C/C++ program.
CppExpr(CppExprAtom e1, short flags)
CppExpr(CppExprAtom e1, CppOperator op, CppExprAtom e2, short flags)
static constexpr CppObjType kObjectType
CppExpr(CppExprAtom e1, CppOperator op, CppExprAtom e2=CppExprAtom())
void accept(CppVisitorBase *v) override
CppExpr(CppExprAtom e1, CppExprAtom e2, CppExprAtom e3)
CppExpr(std::string name)
CppForBlock(CppObj *start, CppExpr *stop, CppExpr *step, CppObj *body)
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
CppFuncCtorBase(CppObjType type, CppAccessType accessType, std::string name, CppParamVector *params, std::uint32_t attr)
CppParamVectorPtr params_
CppParamVector * params()
CppFuncThrowSpecPtr throwSpec_
void throwSpec(CppFuncThrowSpec *_throwSpec)
CppFuncLikeBase(CppObjType type, CppAccessType accessType)
CppFuncThrowSpec * throwSpec()
void defn(CppCompound *_defn)
Base class of constructor, destructor, and functions.
bool hasAttr(std::uint32_t _attr)
void templateParamList(CppTemplateParamList *templParamList)
CppTemplateParamList * templateParamList()
void addAttr(std::uint32_t _attr)
void decor1(std::string _decor)
CppTemplateParamListPtr templSpec_
CppFunctionBase(CppObjType type, CppAccessType accessType, std::string name, std::uint32_t attr)
void decor2(std::string _decor)
Function pointer type definition using typedef, e.g.
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
CppFunctionPointer(CppAccessType accessType, std::string name, CppVarType *retType, CppParamVector *params, std::uint32_t attr, std::string ownerName=std::string())
CppFunction(CppObjType type, CppAccessType accessType, std::string name, CppVarType *retType, CppParamVector *params, std::uint32_t attr)
static unsigned findMainFunctionFromMembers(const CppObjPtrArray &members)
CppFunction(CppAccessType accessType, std::string name, CppVarType *retType, CppParamVector *params, std::uint32_t attr)
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
CppFwdClsDecl(CppAccessType accessType, std::string name, CppCompoundType cmpType=CppCompoundType::kNoCompound)
CppFwdClsDecl(CppAccessType accessType, std::string name, std::string apidecor, CppCompoundType cmpType=CppCompoundType::kNoCompound)
CppTemplateParamList * templateParamList()
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
CppTemplateParamListPtr templSpec_
void templateParamList(CppTemplateParamList *templParamList)
void addAttr(std::uint32_t _attr)
static constexpr CppObjType kObjectType
void accept(CppVisitorBase *v) override
CppHashError(std::string err)
Represents all variants of #if preprocessors.
CppHashIf(CondType condType, std::string cond=std::string())
static constexpr CppObjType kObjectType
void accept(CppVisitorBase *v) override
CppHashWarning(std::string err)
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
void elsePart(CppObj *_elsePart)
CppIfBlock(CppObj *cond, CppObj *body, CppObj *_else=nullptr)
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
void accept(CppVisitorBase *v) override
CppImport(std::string name)
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
CppInclude(std::string name)
CppInheritInfo(std::string _baseName, CppAccessType _inhType, bool virtualInheritance=false)
CppLabel(std::string label)
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
CppLambda(CppExpr *captures, CppParamVector *params, CppCompound *defn, CppVarType *retType=nullptr)
CppParamVectorPtr params_
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
CppMacroCall(std::string macroCall, CppAccessType accessType)
Entire member initialization list.
std::list< CppMemInit > * memInitList
static constexpr CppObjType kObjectType
CppNamespaceAlias(std::string name, std::string alias)
void accept(CppVisitorBase *v) override
An abstract class that is used as base class of all other classes.
CppObj(CppObjType type, CppAccessType accessType)
virtual void accept(CppVisitorBase *v)=0
void owner(CppCompound *o)
CppAccessType accessType_
All objects do not need this.
void accept(CppVisitorBase *v) override
CppPragma(std::string defn)
static constexpr CppObjType kObjectType
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
CppRangeForBlock(CppVar *var, CppExpr *expr, CppObj *body)
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
CppSwitchBlock(CppExpr *cond, CppSwitchBody *body)
Parameter types that are used to define a template class or function.
CppTemplateParam(CppVarType *paramType, std::string paramName)
std::unique_ptr< CppObj > paramType_
CppTemplateParam(std::string paramName)
void defaultArg(CppObj *defParam)
static constexpr CppObjType kObjectType
void addCatchBlock(CppCatchBlock *catchBlock)
CppTryBlock(CppCompound *tryStmt, CppCatchBlock *firstCatchBlock)
void accept(CppVisitorBase *v) override
CppCatchBlocks catchBlocks_
static constexpr CppObjType kObjectType
CppTypeConverter(CppVarType *type, std::string name)
void accept(CppVisitorBase *v) override
void accept(CppVisitorBase *v) override
CppTypedefList(CppVarList *varList)
static constexpr CppObjType kObjectType
static constexpr CppObjType kObjectType
void accept(CppVisitorBase *v) override
CppTypedefName(CppVar *var)
Any other C/C++ preprocessor for which there is no class defined.
void accept(CppVisitorBase *v) override
CppUnRecogPrePro(std::string name, std::string defn)
static constexpr CppObjType kObjectType
CppUndef(std::string name)
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
CppUsingDecl(std::string name, CppFunctionPointer *fptr)
void accept(CppVisitorBase *v) override
CppUsingDecl(std::string name, CppVarType *varType)
CppUsingDecl(std::string name, CppAccessType accessType)
CppUsingDecl(std::string name, CppCompound *compound)
static constexpr CppObjType kObjectType
CppTemplateParamList * templateParamList()
CppTemplateParamListPtr templSpec_
void templateParamList(CppTemplateParamList *templParamList)
CppUsingNamespaceDecl(std::string name)
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
CppVarDeclInList(CppTypeModifier modifier, CppVarDecl varDecl)
void addArraySize(CppExpr *arraySize)
void bitField(CppExpr *_bitField)
void name(std::string _name)
void assign(CppExpr *assignVal, AssignType assignType)
CppVarDecl(std::string name)
CppArraySizes & arraySizes()
CppArraySizes arraySizes_
List of variables declared in a line without repeating its type, e.g.
CppVarList(CppVar *firstVar, CppVarDeclInList varDecl)
CppVarDeclList & varDeclList()
CppVarDeclList varDeclList_
void accept(CppVisitorBase *v) override
static constexpr CppObjType kObjectType
void addVarDecl(CppVarDeclInList varDecl)
CppVarType(CppAccessType accessType, std::string baseType, std::uint32_t typeAttr, CppTypeModifier modifier)
CppTypeModifier typeModifier_
void typeAttr(std::uint32_t attr)
CppTypeModifier & typeModifier()
void baseType(std::string _baseType)
void accept(CppVisitorBase *v) override
CppVarType(std::string baseType, CppTypeModifier modifier=CppTypeModifier())
void addAttr(std::uint32_t attr)
static constexpr CppObjType kObjectType
Class to represent C++ variable definition.
CppArraySizes & arraySizes()
CppTemplateParamList * templateParamList()
void accept(CppVisitorBase *v) override
void apidecor(std::string _apidecor)
void varType(CppVarTypePtr _varType)
CppVar(CppAccessType accessType, CppFunctionPointer *fptr, CppTypeModifier modifier)
void bitField(CppExpr *_bitField)
static constexpr CppObjType kObjectType
void addAttr(std::uint32_t attr)
void assign(CppExpr *assignVal, AssignType assignType)
void templateParamList(CppTemplateParamList *templParamList)
CppTemplateParamListPtr templSpec_
CppVar(CppVarType *varType, CppVarDecl varDecl)
CppVar(CppVarTypePtr varType, CppVarDecl varDecl)
void addArraySize(CppExpr *arraySize)