188a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor//===- ExternalPreprocessorSource.h - Abstract Macro Interface --*- C++ -*-===// 288a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor// 388a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor// The LLVM Compiler Infrastructure 488a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor// 588a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor// This file is distributed under the University of Illinois Open Source 688a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor// License. See LICENSE.TXT for details. 788a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor// 888a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor//===----------------------------------------------------------------------===// 988a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor// 1088a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor// This file defines the ExternalPreprocessorSource interface, which enables 1188a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor// construction of macro definitions from some external source. 1288a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor// 1388a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor//===----------------------------------------------------------------------===// 14176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#ifndef LLVM_CLANG_LEX_EXTERNALPREPROCESSORSOURCE_H 15176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#define LLVM_CLANG_LEX_EXTERNALPREPROCESSORSOURCE_H 1688a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor 1788a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregornamespace clang { 189946fc735d7285f2195f89635370f534afd9877eDmitri Gribenko 199946fc735d7285f2195f89635370f534afd9877eDmitri Gribenkoclass IdentifierInfo; 209946fc735d7285f2195f89635370f534afd9877eDmitri Gribenko 2188a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor/// \brief Abstract interface for external sources of preprocessor 2288a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor/// information. 2388a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor/// 24c43b54cbc10654ed59de797898042e1a05265246Sebastian Redl/// This abstract class allows an external sources (such as the \c ASTReader) 2588a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor/// to provide additional macro definitions. 2688a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregorclass ExternalPreprocessorSource { 2788a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregorpublic: 2888a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor virtual ~ExternalPreprocessorSource(); 2988a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor 3088a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor /// \brief Read the set of macros defined by this external macro source. 3188a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor virtual void ReadDefinedMacros() = 0; 32295a2a617ac335f590e430ab7fcd98f8ce109251Douglas Gregor 33eee242ff426bf79149f221798966e58688383c1eDouglas Gregor /// \brief Update an out-of-date identifier. 34eee242ff426bf79149f221798966e58688383c1eDouglas Gregor virtual void updateOutOfDateIdentifier(IdentifierInfo &II) = 0; 3588a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor}; 3688a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor 3788a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor} 3888a35862fbe473f2a4f0c19f24dbe536937e1dc6Douglas Gregor 39176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#endif 40