blob: 41fc6b76f044def926f481dad55d19580e0bf2db [file] [log] [blame]
//===- PreprocessorOptions.h ------------------------------------*- C++ -*-===//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
/// \file
/// This file contains the declaration of the PreprocessorOptions class, which
/// is the class for all preprocessor options.
#include "llvm/ADT/StringRef.h"
namespace Fortran::frontend {
/// Communicates whether to include/exclude predefined and command
/// line preprocessor macros
enum class PPMacrosFlag : uint8_t {
/// Use the file extension to decide
/// This class is used for passing the various options used
/// in preprocessor initialization to the parser options.
struct PreprocessorOptions {
PreprocessorOptions() {}
std::vector<std::pair<std::string, /*isUndef*/ bool>> macros;
// Search directories specified by the user with -I
// TODO: When adding support for more options related to search paths,
// consider collecting them in a separate aggregate. For now we keep it here
// as there is no point creating a class for just one field.
std::vector<std::string> searchDirectoriesFromDashI;
// Search directories specified by the user with -fintrinsic-modules-path
std::vector<std::string> searchDirectoriesFromIntrModPath;
PPMacrosFlag macrosFlag = PPMacrosFlag::Unknown;
// -P: Suppress #line directives in -E output
bool noLineDirectives{false};
// -fno-reformat: Emit cooked character stream as -E output
bool noReformat{false};
void addMacroDef(llvm::StringRef name) {
macros.emplace_back(std::string(name), false);
void addMacroUndef(llvm::StringRef name) {
macros.emplace_back(std::string(name), true);
} // namespace Fortran::frontend