1e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor//===--- SemaConsumer.h - Abstract interface for AST semantics --*- C++ -*-===// 2e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor// 3e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor// The LLVM Compiler Infrastructure 4e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor// 5e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor// This file is distributed under the University of Illinois Open Source 6e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor// License. See LICENSE.TXT for details. 7e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor// 8e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor//===----------------------------------------------------------------------===// 9e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor// 10e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor// This file defines the SemaConsumer class, a subclass of 11e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor// ASTConsumer that is used by AST clients that also require 12e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor// additional semantic analysis. 13e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor// 14e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor//===----------------------------------------------------------------------===// 15e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor#ifndef LLVM_CLANG_SEMA_SEMACONSUMER_H 16e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor#define LLVM_CLANG_SEMA_SEMACONSUMER_H 17e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor 18e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor#include "clang/AST/ASTConsumer.h" 19e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor 20e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregornamespace clang { 21e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor class Sema; 22e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor 23e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor /// \brief An abstract interface that should be implemented by 24e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor /// clients that read ASTs and then require further semantic 25e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor /// analysis of the entities in those ASTs. 26e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor class SemaConsumer : public ASTConsumer { 2799ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie virtual void anchor(); 28e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor public: 29668c1a4fdcc56bdd050256b1688e116fe84b72dbDouglas Gregor SemaConsumer() { 30e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor ASTConsumer::SemaConsumer = true; 31e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor } 32e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor 33e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor /// \brief Initialize the semantic consumer with the Sema instance 34e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor /// being used to perform semantic analysis on the abstract syntax 35e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor /// tree. 36e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor virtual void InitializeSema(Sema &S) {} 37e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor 38ec2a4ed278a1112ebf84fdcb80ed66f53d8ec8baDaniel Dunbar /// \brief Inform the semantic consumer that Sema is no longer available. 39ec2a4ed278a1112ebf84fdcb80ed66f53d8ec8baDaniel Dunbar virtual void ForgetSema() {} 40ec2a4ed278a1112ebf84fdcb80ed66f53d8ec8baDaniel Dunbar 41e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor // isa/cast/dyn_cast support 421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump static bool classof(const ASTConsumer *Consumer) { 431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump return Consumer->SemaConsumer; 44e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor } 45e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor static bool classof(const SemaConsumer *) { return true; } 46e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor }; 47e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor} 48e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor 49e7785040107266d01ebdcc066365f70b7ace371fDouglas Gregor#endif 50