ExternalSemaSource.h revision a862320972e63349524dc9aa744dec1b95f54ba1
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===--- ExternalSemaSource.h - External Sema Interface ---------*- C++ -*-===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//  This file defines the ExternalSemaSource interface.
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef LLVM_CLANG_SEMA_EXTERNAL_SEMA_SOURCE_H
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LLVM_CLANG_SEMA_EXTERNAL_SEMA_SOURCE_H
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "clang/AST/ExternalASTSource.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility>
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace clang {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ObjCMethodList;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Sema;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Scope;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LookupResult;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class VarDecl;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// \brief An abstract interface that should be implemented by
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// external AST sources that also provide information for semantic
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// analysis.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExternalSemaSource : public ExternalASTSource {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public:
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExternalSemaSource() {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExternalASTSource::SemaSource = true;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~ExternalSemaSource();
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// \brief Initialize the semantic source with the Sema instance
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// being used to perform semantic analysis on the abstract syntax
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// tree.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InitializeSema(Sema &S) {}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// \brief Inform the semantic consumer that Sema is no longer available.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ForgetSema() {}
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// \brief Load the contents of the global method pool for a given
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// selector.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// \returns a pair of Objective-C methods lists containing the
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// instance and factory methods, respectively, with this selector.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::pair<ObjCMethodList,ObjCMethodList> ReadMethodPool(Selector Sel);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// \brief Load the set of namespaces that are known to the external source,
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// which will be used during typo correction.
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ReadKnownNamespaces(
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           SmallVectorImpl<NamespaceDecl *> &Namespaces);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// \brief Do last resort, unqualified lookup on a LookupResult that
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Sema cannot find.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// \param R a LookupResult that is being recovered.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// \param S the Scope of the identifier occurrence.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// \return true to tell Sema to recover using the LookupResult.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool LookupUnqualified(LookupResult &R, Scope *S) { return false; }
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// \brief Read the set of tentative definitions know to the external Sema
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// source.
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// The external source should append its own tentative definitions to the
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// given vector of tentative definitions. Note that this routine may be
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// invoked multiple times; the external source should take care not to
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// introduce the same declarations repeatedly.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ReadTentativeDefinitions(
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  SmallVectorImpl<VarDecl *> &TentativeDefs) {}
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // isa/cast/dyn_cast support
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool classof(const ExternalASTSource *Source) {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return Source->SemaSource;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool classof(const ExternalSemaSource *) { return true; }
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // end namespace clang
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)