summary refs log tree commit diff
path: root/goatc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'goatc.cc')
-rw-r--r--goatc.cc40
1 files changed, 24 insertions, 16 deletions
diff --git a/goatc.cc b/goatc.cc
index 354d377..607d056 100644
--- a/goatc.cc
+++ b/goatc.cc
@@ -19,35 +19,43 @@
 #include "goatc.hh"
 
 #include <clang/AST/AST.h>
-#include <clang/AST/RecursiveASTVisitor.h>
 #include <clang/Frontend/CompilerInstance.h>
 #include <clang/Sema/Sema.h>
 #include <llvm/Support/raw_ostream.h>
 
 bool
-GoatCConsumer::HandleTopLevelDecl (clang::DeclGroupRef dg)
+goatc::Visitor::VisitDecl (clang::Decl* decl)
 {
-  if (this->noop)
-    return true;
-
-  for (auto const& d : dg)
-    if (auto const& nd = llvm::dyn_cast <clang::NamedDecl> (d))
-      llvm::errs() << "top-level-decl: \"" << nd->getNameAsString() << "\"\n";
+  if (auto* named_decl = llvm::dyn_cast <clang::NamedDecl> (decl))
+    {
+      clang::FullSourceLoc loc = this->ctx->getFullLoc (decl->getBeginLoc ());
+      if (loc.isValid ())
+        llvm::outs ()
+          << "Found " << named_decl->getQualifiedNameAsString ()
+          << " at " << loc.getSpellingLineNumber ()
+          << ':' << loc.getSpellingColumnNumber () << '\n';
+    }
   return true;
 }
 
+void
+goatc::Consumer::HandleTranslationUnit (clang::ASTContext& ctx)
+{
+  this->visitor.TraverseDecl (ctx.getTranslationUnitDecl ());
+}
+
 clang::PluginASTAction::ActionType
-GoatCAction::getActionType ()
+goatc::Action::getActionType ()
 {
   return AddBeforeMainAction;
 }
 
 std::unique_ptr <clang::ASTConsumer>
-GoatCAction::CreateASTConsumer (clang::CompilerInstance& ci,
-                                llvm::StringRef in_file)
+goatc::Action::CreateASTConsumer (clang::CompilerInstance& ci,
+                                  llvm::StringRef in_file)
 {
-  llvm::errs () << in_file << '\n';
-  return std::make_unique <GoatCConsumer> (ci, in_file != this->source_file);
+  return std::make_unique <goatc::Consumer> (&ci.getASTContext (),
+                                             in_file != this->source_file);
 }
 
 void
@@ -59,14 +67,14 @@ printHelp (llvm::raw_ostream& ros)
 }
 
 bool
-GoatCAction::ParseArgs (const clang::CompilerInstance& ci,
-                        const std::vector <std::string> &args)
+goatc::Action::ParseArgs (const clang::CompilerInstance& ci,
+                          const std::vector <std::string> &args)
 {
   auto& d = ci.getDiagnostics ();
   for (unsigned i = 0, e = args.size(); i < e; ++i)
     if (args[i] == "-h" || args[i] == "--help")
       {
-        printHelp (llvm::errs ());
+        printHelp (llvm::outs ());
         // FIXME: exit with status 0
         return false;
       }