]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/clang/include/clang/Sema/ExternalSemaSource.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / clang / include / clang / Sema / ExternalSemaSource.h
1 //===--- ExternalSemaSource.h - External Sema Interface ---------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 //  This file defines the ExternalSemaSource interface.
11 //
12 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_CLANG_SEMA_EXTERNAL_SEMA_SOURCE_H
14 #define LLVM_CLANG_SEMA_EXTERNAL_SEMA_SOURCE_H
15
16 #include "clang/AST/ExternalASTSource.h"
17 #include "clang/Sema/Weak.h"
18 #include "llvm/ADT/MapVector.h"
19 #include <utility>
20
21 namespace clang {
22
23 class CXXConstructorDecl;
24 class CXXRecordDecl;
25 class DeclaratorDecl;
26 class LookupResult;
27 struct ObjCMethodList;
28 class Scope;
29 class Sema;
30 class TypedefNameDecl;
31 class ValueDecl;
32 class VarDecl;
33   
34 /// \brief A simple structure that captures a vtable use for the purposes of
35 /// the \c ExternalSemaSource.
36 struct ExternalVTableUse {
37   CXXRecordDecl *Record;
38   SourceLocation Location;
39   bool DefinitionRequired;
40 };
41   
42 /// \brief An abstract interface that should be implemented by
43 /// external AST sources that also provide information for semantic
44 /// analysis.
45 class ExternalSemaSource : public ExternalASTSource {
46 public:
47   ExternalSemaSource() {
48     ExternalASTSource::SemaSource = true;
49   }
50
51   ~ExternalSemaSource();
52
53   /// \brief Initialize the semantic source with the Sema instance
54   /// being used to perform semantic analysis on the abstract syntax
55   /// tree.
56   virtual void InitializeSema(Sema &S) {}
57
58   /// \brief Inform the semantic consumer that Sema is no longer available.
59   virtual void ForgetSema() {}
60
61   /// \brief Load the contents of the global method pool for a given
62   /// selector.
63   virtual void ReadMethodPool(Selector Sel);
64
65   /// \brief Load the set of namespaces that are known to the external source,
66   /// which will be used during typo correction.
67   virtual void ReadKnownNamespaces(
68                            SmallVectorImpl<NamespaceDecl *> &Namespaces);
69
70   /// \brief Load the set of used but not defined functions or variables with
71   /// internal linkage, or used but not defined internal functions.
72   virtual void ReadUndefinedButUsed(
73                          llvm::DenseMap<NamedDecl*, SourceLocation> &Undefined);
74
75   /// \brief Do last resort, unqualified lookup on a LookupResult that
76   /// Sema cannot find.
77   ///
78   /// \param R a LookupResult that is being recovered.
79   ///
80   /// \param S the Scope of the identifier occurrence.
81   ///
82   /// \return true to tell Sema to recover using the LookupResult.
83   virtual bool LookupUnqualified(LookupResult &R, Scope *S) { return false; }
84
85   /// \brief Read the set of tentative definitions known to the external Sema
86   /// source.
87   ///
88   /// The external source should append its own tentative definitions to the
89   /// given vector of tentative definitions. Note that this routine may be
90   /// invoked multiple times; the external source should take care not to
91   /// introduce the same declarations repeatedly.
92   virtual void ReadTentativeDefinitions(
93                                   SmallVectorImpl<VarDecl *> &TentativeDefs) {}
94   
95   /// \brief Read the set of unused file-scope declarations known to the
96   /// external Sema source.
97   ///
98   /// The external source should append its own unused, filed-scope to the
99   /// given vector of declarations. Note that this routine may be
100   /// invoked multiple times; the external source should take care not to
101   /// introduce the same declarations repeatedly.
102   virtual void ReadUnusedFileScopedDecls(
103                  SmallVectorImpl<const DeclaratorDecl *> &Decls) {}
104   
105   /// \brief Read the set of delegating constructors known to the
106   /// external Sema source.
107   ///
108   /// The external source should append its own delegating constructors to the
109   /// given vector of declarations. Note that this routine may be
110   /// invoked multiple times; the external source should take care not to
111   /// introduce the same declarations repeatedly.
112   virtual void ReadDelegatingConstructors(
113                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {}
114
115   /// \brief Read the set of ext_vector type declarations known to the
116   /// external Sema source.
117   ///
118   /// The external source should append its own ext_vector type declarations to
119   /// the given vector of declarations. Note that this routine may be
120   /// invoked multiple times; the external source should take care not to
121   /// introduce the same declarations repeatedly.
122   virtual void ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {}
123
124   /// \brief Read the set of dynamic classes known to the external Sema source.
125   ///
126   /// The external source should append its own dynamic classes to
127   /// the given vector of declarations. Note that this routine may be
128   /// invoked multiple times; the external source should take care not to
129   /// introduce the same declarations repeatedly.
130   virtual void ReadDynamicClasses(SmallVectorImpl<CXXRecordDecl *> &Decls) {}
131
132   /// \brief Read the set of locally-scoped external declarations known to the
133   /// external Sema source.
134   ///
135   /// The external source should append its own locally-scoped external
136   /// declarations to the given vector of declarations. Note that this routine 
137   /// may be invoked multiple times; the external source should take care not 
138   /// to introduce the same declarations repeatedly.
139   virtual void ReadLocallyScopedExternCDecls(
140                  SmallVectorImpl<NamedDecl *> &Decls) {}
141
142   /// \brief Read the set of referenced selectors known to the
143   /// external Sema source.
144   ///
145   /// The external source should append its own referenced selectors to the 
146   /// given vector of selectors. Note that this routine 
147   /// may be invoked multiple times; the external source should take care not 
148   /// to introduce the same selectors repeatedly.
149   virtual void ReadReferencedSelectors(
150                  SmallVectorImpl<std::pair<Selector, SourceLocation> > &Sels) {}
151
152   /// \brief Read the set of weak, undeclared identifiers known to the
153   /// external Sema source.
154   ///
155   /// The external source should append its own weak, undeclared identifiers to
156   /// the given vector. Note that this routine may be invoked multiple times; 
157   /// the external source should take care not to introduce the same identifiers
158   /// repeatedly.
159   virtual void ReadWeakUndeclaredIdentifiers(
160                  SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo> > &WI) {}
161
162   /// \brief Read the set of used vtables known to the external Sema source.
163   ///
164   /// The external source should append its own used vtables to the given
165   /// vector. Note that this routine may be invoked multiple times; the external
166   /// source should take care not to introduce the same vtables repeatedly.
167   virtual void ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {}
168
169   /// \brief Read the set of pending instantiations known to the external
170   /// Sema source.
171   ///
172   /// The external source should append its own pending instantiations to the
173   /// given vector. Note that this routine may be invoked multiple times; the
174   /// external source should take care not to introduce the same instantiations
175   /// repeatedly.
176   virtual void ReadPendingInstantiations(
177                  SmallVectorImpl<std::pair<ValueDecl *, 
178                                            SourceLocation> > &Pending) {}
179
180   // isa/cast/dyn_cast support
181   static bool classof(const ExternalASTSource *Source) {
182     return Source->SemaSource;
183   }
184 }; 
185
186 } // end namespace clang
187
188 #endif