From 0ac8c3aa841212a193bcf027025521f7adf71255 Mon Sep 17 00:00:00 2001 From: Nguyễn Gia Phong Date: Mon, 26 Aug 2024 16:37:27 +0900 Subject: Draft base clang plugin --- goatc.hh | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 goatc.hh (limited to 'goatc.hh') diff --git a/goatc.hh b/goatc.hh new file mode 100644 index 0000000..76e1525 --- /dev/null +++ b/goatc.hh @@ -0,0 +1,55 @@ +// Clang plugin declaration +// Copyright (C) 2024 Nguyễn Gia Phong +// +// This file is part of GoatC. +// +// GoatC is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published +// by the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// GoatC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with GoatC. If not, see . + +#include +#include + +class GoatCVisitor : public clang::RecursiveASTVisitor { + clang::ASTContext* ctx; + +public: + GoatCVisitor(clang::ASTContext* ctx) : ctx {ctx} + { } +}; + +class GoatCConsumer : public clang::ASTConsumer { + clang::CompilerInstance& ci; + /// Consuming source file that is not patched + bool noop; + + bool HandleTopLevelDecl (clang::DeclGroupRef) override; + +public: + GoatCConsumer (clang::CompilerInstance& ci, bool noop) : ci {ci}, noop {noop} + { } +}; + +class GoatCAction : public clang::PluginASTAction { + std::string source_file; + + std::unique_ptr CreateASTConsumer + (clang::CompilerInstance&, llvm::StringRef) override; + + bool ParseArgs (const clang::CompilerInstance&, + const std::vector &) override; + + clang::PluginASTAction::ActionType getActionType () override; +}; + +static clang::FrontendPluginRegistry::Add +X {"goatc", "chimera breeder"}; -- cgit 1.4.1