1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 03:28:20 +02:00
Beef/IDEHelper/Clang/CDepChecker.h
2024-05-01 06:26:14 -04:00

116 lines
2.3 KiB
C++

#pragma once
#include "../Compiler/BfSystem.h"
#include "../Compiler/BfParser.h"
#include "../Compiler/BfReducer.h"
#include <map>
NS_BF_BEGIN
class CppParser;
class ClangHelper;
class CDepFileData
{
public:
char* mData;
int mLength;
public:
CDepFileData()
{
mData = NULL;
mLength = 0;
}
};
class CDepFile
{
public:
CppParser* mParser;
CDepFileData mFileData;
String mFilePath;
std::vector<CDepFile*> mDepList;
std::set<String> mFilesReferenced;
int64 mFileTime;
bool mProcessing;
// The set of files that tried to include us as we were being processed
std::set<CDepFile*> mDeferredDepSet;
public:
~CDepFile();
};
class CppParser;
class CDepChecker;
class CDepEvaluateState
{
public:
std::vector<BfAstNode*> mParams;
CDepEvaluateState* mPrevEvalState;
};
class CppParser : public BfParser
{
public:
CDepChecker* mCDepChecker;
CDepFile* mCDepFile;
bool mFileAlreadyVisited;
bool mAborted;
public:
virtual void HandlePragma(const StringImpl& pragma, BfBlock* block) override;
virtual void HandleDefine(const StringImpl& name, BfAstNode* paramNode) override;
virtual void HandleUndefine(const StringImpl& name) override;
virtual MaybeBool HandleIfDef(const StringImpl& name) override;
virtual MaybeBool HandleProcessorCondition(BfBlock* paramNode) override;
virtual void HandleInclude(BfAstNode* paramNode) override;
virtual void HandleIncludeNext(BfAstNode* paramNode) override;
bool IncludeHelper(BfAstNode* paramNode, bool includeNext, bool scanOnly);
CppParser() : BfParser(NULL, NULL)
{
mScanOnly = true;
mCompatMode = true;
mCDepChecker = NULL;
mCDepFile = NULL;
mFileAlreadyVisited = false;
mAborted = false;
}
};
typedef std::map<String, CDepFile*> CDepFileMap;
class CDepChecker
{
public:
std::vector<String> mIncludeDirs;
CDepFileMap mDepFileMap;
std::vector<CDepFileData> mDepFileData;
std::vector<CDepFile*> mIncludeStack;
std::set<String> mFilesVisited;
bool mAbort;
std::map<String, bool> mFileExistsCache;
int mCPPCount;
String mFindHeaderFileName;
int mFindHeaderIdx;
BfAstAllocManager mAstAllocManager;
public:
CDepChecker();
CDepFile* LoadFile(const StringImpl& fileName, CDepFile* fileFrom, bool* isFromCache, const char* contentOverride = NULL);
void ClearCache();
void SetCArgs(const char* cArgs);
bool CachedFileExists(const StringImpl& filePath);
};
NS_BF_END