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)