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