3 #include "llvm/Support/raw_ostream.h"
4 #include "llvm/System/Host.h"
5 #include "llvm/Config/config.h"
7 #include "clang/Frontend/DiagnosticOptions.h"
8 #include "clang/Frontend/TextDiagnosticPrinter.h"
10 #include "clang/Basic/LangOptions.h"
11 #include "clang/Basic/FileSystemOptions.h"
13 #include "clang/Basic/SourceManager.h"
14 #include "clang/Lex/HeaderSearch.h"
15 #include "clang/Basic/FileManager.h"
17 #include "clang/Frontend/HeaderSearchOptions.h"
18 #include "clang/Frontend/Utils.h"
20 #include "clang/Basic/TargetOptions.h"
21 #include "clang/Basic/TargetInfo.h"
23 #include "clang/Lex/Preprocessor.h"
24 #include "clang/Frontend/PreprocessorOptions.h"
25 #include "clang/Frontend/FrontendOptions.h"
27 #include "clang/Frontend/CompilerInvocation.h"
29 #include "clang/Basic/IdentifierTable.h"
30 #include "clang/Basic/Builtins.h"
32 #include "clang/AST/ASTContext.h"
33 #include "clang/AST/ASTConsumer.h"
34 #include "clang/Sema/Sema.h"
35 #include "clang/AST/DeclBase.h"
36 #include "clang/AST/Type.h"
37 #include "clang/AST/Decl.h"
38 #include "clang/Sema/Lookup.h"
39 #include "clang/Sema/Ownership.h"
40 #include "clang/AST/DeclGroup.h"
42 #include "clang/Parse/Parser.h"
44 #include "clang/Parse/ParseAST.h"
45 #include "clang/Basic/Version.h"
48 using namespace clang;
49 class FindStates : public ASTConsumer
53 virtual void HandleTopLevelDecl(DeclGroupRef DGR)
55 for (DeclGroupRef::iterator i = DGR.begin(), e = DGR.end(); i != e; ++i)
58 Stmt *x = D->getBody();
59 const NamedDecl *ND = dyn_cast<NamedDecl>(D);
60 //SourceLocation sl = D->getLocation();
61 if (const TagDecl *TD = dyn_cast<TagDecl>(D))
62 if(TD->isStruct() && D->hasAttrs()) //je to struktura?
64 ND->print(llvm::errs()) ;
65 std::cout << "Novy stav: " << ND->getNameAsString() << " xx \n";
69 Zjistit, zda je dedena?
70 Pokud ANO, tak projit strom dolu
75 int main(int argc, char *argv[])
77 DiagnosticOptions diagnosticOptions;
78 TextDiagnosticPrinter *tdp = new TextDiagnosticPrinter(llvm::nulls(), diagnosticOptions);
79 llvm::IntrusiveRefCntPtr<DiagnosticIDs> dis(new DiagnosticIDs());
80 Diagnostic diag(dis,tdp);
84 FileSystemOptions fileSysOpt;
85 FileManager fm (fileSysOpt);
87 SourceManager sm ( diag, fm);
88 HeaderSearch *headers = new HeaderSearch(fm);
89 CompilerInvocation::setLangDefaults(lang, IK_ObjCXX);
91 HeaderSearchOptions hsopts;
92 hsopts.ResourceDir="/usr/local/lib/clang/2.9/";
93 /*hsopts.AddPath("/usr/include/linux",
94 clang::frontend::Angled,
98 hsopts.AddPath("/usr/include/c++/4.4",
99 clang::frontend::Angled,
103 hsopts.AddPath("/usr/include/c++/4.4/tr1",
104 clang::frontend::Angled,
109 hsopts.AddPath("/home/petr/Dokumenty/BOOST/boost_1_44_0",
110 clang::frontend::Angled,
114 hsopts.AddPath("/usr/include/c++/4.4/i686-linux-gnu",
115 clang::frontend::Angled,
120 to.Triple = llvm::sys::getHostTriple();
121 TargetInfo *ti = TargetInfo::CreateTargetInfo(diag, to);
122 clang::ApplyHeaderSearchOptions(
129 Preprocessor pp(diag, lang, *ti, sm, *headers);
131 PreprocessorOptions ppio;
132 InitializePreprocessor(pp, ppio,hsopts,f);
133 const FileEntry *file = fm.getFile("test.cpp");
134 sm.createMainFileID(file);
135 //pp.EnterMainSourceFile();
136 IdentifierTable tab(lang);
138 Builtin::Context builtins(*ti);
140 ASTContext ctx(lang, sm, *ti, tab, sel, builtins,0);
141 tdp->BeginSourceFile(lang, &pp);
142 ParseAST(pp, &c, ctx, false, false);
143 tdp->EndSourceFile();