]> rtime.felk.cvut.cz Git - boost-statechart-viewer.git/blob - main.cpp
Updated to working resource file
[boost-statechart-viewer.git] / main.cpp
1 #include <iostream>
2
3 #include "llvm/Support/raw_ostream.h"
4 #include "llvm/System/Host.h"
5 #include "llvm/Config/config.h"
6
7 #include "clang/Frontend/DiagnosticOptions.h"
8 #include "clang/Frontend/TextDiagnosticPrinter.h"
9
10 #include "clang/Basic/LangOptions.h"
11 #include "clang/Basic/FileSystemOptions.h"
12
13 #include "clang/Basic/SourceManager.h"
14 #include "clang/Lex/HeaderSearch.h"
15 #include "clang/Basic/FileManager.h"
16
17 #include "clang/Frontend/HeaderSearchOptions.h"
18 #include "clang/Frontend/Utils.h"
19
20 #include "clang/Basic/TargetOptions.h"
21 #include "clang/Basic/TargetInfo.h"
22
23 #include "clang/Lex/Preprocessor.h"
24 #include "clang/Frontend/PreprocessorOptions.h"
25 #include "clang/Frontend/FrontendOptions.h"
26
27 #include "clang/Frontend/CompilerInvocation.h"
28
29 #include "clang/Basic/IdentifierTable.h"
30 #include "clang/Basic/Builtins.h"
31
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"
41
42 #include "clang/Parse/Parser.h"
43
44 #include "clang/Parse/ParseAST.h"
45 #include "clang/Basic/Version.h"
46
47
48 using namespace clang;
49 class FindStates : public ASTConsumer
50 {
51         
52         public:
53         virtual void HandleTopLevelDecl(DeclGroupRef DGR)
54         {
55         for (DeclGroupRef::iterator i = DGR.begin(), e = DGR.end(); i != e; ++i) 
56         {
57                 const Decl *D = *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?
63                 {
64                         ND->print(llvm::errs()) ;               
65                         std::cout << "Novy stav: " << ND->getNameAsString() << "   xx \n";
66                 }
67         }
68         /* TODO
69         Zjistit, zda je dedena?
70         Pokud ANO, tak projit strom dolu 
71         */
72         }
73 };
74
75 int main(int argc, char *argv[])
76 {
77        DiagnosticOptions diagnosticOptions;
78        TextDiagnosticPrinter *tdp = new TextDiagnosticPrinter(llvm::nulls(), diagnosticOptions);
79         llvm::IntrusiveRefCntPtr<DiagnosticIDs> dis(new DiagnosticIDs());
80        Diagnostic diag(dis,tdp);
81        LangOptions lang;
82        lang.BCPLComment=1;
83        lang.CPlusPlus=1; 
84        FileSystemOptions fileSysOpt;
85        FileManager fm (fileSysOpt);
86
87        SourceManager sm ( diag, fm);
88        HeaderSearch *headers = new HeaderSearch(fm);
89        CompilerInvocation::setLangDefaults(lang, IK_ObjCXX);
90
91        HeaderSearchOptions hsopts;
92        hsopts.ResourceDir="/usr/local/lib/clang/2.9/";
93         /*hsopts.AddPath("/usr/include/linux",
94                         clang::frontend::Angled,
95                         false,
96                         false,
97                         false); 
98         hsopts.AddPath("/usr/include/c++/4.4",
99                         clang::frontend::Angled,
100                         false,
101                         false,
102                         false);
103         hsopts.AddPath("/usr/include/c++/4.4/tr1",
104                         clang::frontend::Angled,
105                         false,
106                         false,
107                         false);
108
109         hsopts.AddPath("/home/petr/Dokumenty/BOOST/boost_1_44_0",
110                         clang::frontend::Angled,
111                         false,
112                         false,
113                         false);
114         hsopts.AddPath("/usr/include/c++/4.4/i686-linux-gnu",
115                         clang::frontend::Angled,
116                         false,
117                         false,
118                         false);*/
119        TargetOptions to;
120        to.Triple = llvm::sys::getHostTriple();
121        TargetInfo *ti = TargetInfo::CreateTargetInfo(diag, to);
122        clang::ApplyHeaderSearchOptions(
123         *headers,
124         hsopts,
125         lang,
126         ti->getTriple());
127
128
129        Preprocessor pp(diag, lang, *ti, sm, *headers);
130        FrontendOptions f;
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);
137        SelectorTable sel;
138        Builtin::Context builtins(*ti);
139        FindStates c;
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();
144
145        return 0;
146
147
148 }