/// whenever we might have added new redeclarations for existing decls.
uint32_t CurrentGeneration = 0;
- /// Whether this AST source also provides information for
- /// semantic analysis.
- bool SemaSource = false;
+ /// LLVM-style RTTI.
+ static char ID;
public:
ExternalASTSource() = default;
virtual void getMemoryBufferSizes(MemoryBufferSizes &sizes) const;
+ /// LLVM-style RTTI.
+ /// \{
+ virtual bool isA(const void *ClassID) const { return ClassID == &ID; }
+ static bool classof(const ExternalASTSource *S) { return S->isA(&ID); }
+ /// \}
+
protected:
static DeclContextLookupResult
SetExternalVisibleDeclsForName(const DeclContext *DC,
/// external AST sources that also provide information for semantic
/// analysis.
class ExternalSemaSource : public ExternalASTSource {
+ /// LLVM-style RTTI.
+ static char ID;
+
public:
- ExternalSemaSource() {
- ExternalASTSource::SemaSource = true;
- }
+ ExternalSemaSource() = default;
~ExternalSemaSource() override;
return false;
}
- // isa/cast/dyn_cast support
- static bool classof(const ExternalASTSource *Source) {
- return Source->SemaSource;
+ /// LLVM-style RTTI.
+ /// \{
+ bool isA(const void *ClassID) const override {
+ return ClassID == &ID || ExternalASTSource::isA(ClassID);
}
+ static bool classof(const ExternalASTSource *S) { return S->isA(&ID); }
+ /// \}
};
} // end namespace clang
/// external AST sources that also provide information for semantic
/// analysis.
class MultiplexExternalSemaSource : public ExternalSemaSource {
+ /// LLVM-style RTTI.
+ static char ID;
private:
SmallVector<ExternalSemaSource *, 2> Sources; // doesn't own them.
bool MaybeDiagnoseMissingCompleteType(SourceLocation Loc,
QualType T) override;
- // isa/cast/dyn_cast support
- static bool classof(const MultiplexExternalSemaSource*) { return true; }
- //static bool classof(const ExternalSemaSource*) { return true; }
+ /// LLVM-style RTTI.
+ /// \{
+ bool isA(const void *ClassID) const override {
+ return ClassID == &ID || ExternalSemaSource::isA(ClassID);
+ }
+ static bool classof(const ExternalASTSource *S) { return S->isA(&ID); }
+ /// \}
};
} // end namespace clang
using namespace clang;
+char ExternalASTSource::ID;
+
ExternalASTSource::~ExternalASTSource() = default;
llvm::Optional<ExternalASTSource::ASTSourceDescriptor>
using namespace clang;
+char MultiplexExternalSemaSource::ID;
+
///Constructs a new multiplexing external sema source and appends the
/// given element to it.
///
// Pin this vtable to this file.
ExternalSemaSource::~ExternalSemaSource() {}
+char ExternalSemaSource::ID;
void ExternalSemaSource::ReadMethodPool(Selector Sel) { }
void ExternalSemaSource::updateOutOfDateSelector(Selector Sel) { }