//===- CodeExpander.h - Expand variables in a string ----------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
/// \file Expand the variables in a string.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_UTILS_TABLEGEN_CODEEXPANDER_H
#define LLVM_UTILS_TABLEGEN_CODEEXPANDER_H

#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/SMLoc.h"

namespace llvm {
class CodeExpansions;
class raw_ostream;

/// Emit the given code with all '${foo}' placeholders expanded to their
/// replacements.
///
/// It's an error to use an undefined expansion and expansion-like output that
/// needs to be emitted verbatim can be escaped as '\${foo}'
///
/// The emitted code can be given a custom indent to enable both indentation by
/// an arbitrary amount of whitespace and emission of the code as a comment.
class CodeExpander {
  StringRef Code;
  const CodeExpansions &Expansions;
  const ArrayRef<SMLoc> &Loc;
  bool ShowExpansions;
  StringRef Indent;

public:
  CodeExpander(StringRef Code, const CodeExpansions &Expansions,
               const ArrayRef<SMLoc> &Loc, bool ShowExpansions,
               StringRef Indent = "    ")
      : Code(Code), Expansions(Expansions), Loc(Loc),
        ShowExpansions(ShowExpansions), Indent(Indent) {}

  void emit(raw_ostream &OS) const;
};

inline raw_ostream &operator<<(raw_ostream &OS, const CodeExpander &Expander) {
  Expander.emit(OS);
  return OS;
}
} // end namespace llvm

#endif // ifndef LLVM_UTILS_TABLEGEN_CODEEXPANDER_H
