citrus/include/func/action.hpp
Robert Sebastian Herlim e27ed026dd Initial commit of CITRUS
2021-10-04 10:56:53 +09:00

69 lines
2.1 KiB
C++

#ifndef CXXFOOZZ__FUNC_ANALYSIS_ACTION_HPP_
#define CXXFOOZZ__FUNC_ANALYSIS_ACTION_HPP_
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/Mangle.h"
#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/Basic/FileManager.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/TargetOptions.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Frontend/CompilerInstance.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Parse/ParseAST.h"
#include "clang/Rewrite/Core/Rewriter.h"
#include "clang/Rewrite/Frontend/Rewriters.h"
#include "llvm/Support/Host.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/ADT/IntrusiveRefCntPtr.h"
#include "clang/Lex/HeaderSearch.h"
#include "clang/Frontend/Utils.h"
#include "clang/Frontend/FrontendAction.h"
#include "clang/Tooling/CommonOptionsParser.h"
#include "clang/Tooling/Tooling.h"
#include "llvm/Support/CommandLine.h"
#include "clang/Sema/Sema.h"
#include <fstream>
#include <vector>
#include <map>
#include "func/api.hpp"
extern int kClassCount;
extern int kStructCount;
class FuncAnalysisASTVisitor : public clang::RecursiveASTVisitor<FuncAnalysisASTVisitor> {
public:
explicit FuncAnalysisASTVisitor(clang::ASTContext &context);
virtual ~FuncAnalysisASTVisitor();
bool VisitFunctionDecl(clang::FunctionDecl *d);
bool VisitCXXRecordDecl(clang::CXXRecordDecl *d);
clang::MangleContext *GetMangleContext() const;
private:
clang::ASTContext &ast_context_;
clang::MangleContext *mangle_context_;
};
class FuncAnalysisASTConsumer : public clang::ASTConsumer {
public:
explicit FuncAnalysisASTConsumer(clang::ASTContext &context);
void HandleTranslationUnit(clang::ASTContext &context) override;
private:
FuncAnalysisASTVisitor class_visitor_;
};
class FuncAnalysisAction : public clang::ASTFrontendAction {
public:
protected:
void ExecuteAction() override;
std::unique_ptr<clang::ASTConsumer> CreateASTConsumer(clang::CompilerInstance &CI, llvm::StringRef InFile) override;
private:
static std::set<std::string> processed_files_;
};
#endif