13#ifndef FORTRAN_FRONTEND_FRONTENDOPTIONS_H
14#define FORTRAN_FRONTEND_FRONTENDOPTIONS_H
16#include "flang/Common/Fortran-features.h"
17#include "flang/Lower/EnvironmentDefault.h"
18#include "flang/Parser/characters.h"
19#include "flang/Parser/unparse.h"
20#include "llvm/ADT/StringRef.h"
21#include "llvm/Support/MemoryBuffer.h"
25namespace Fortran::frontend {
32 PrintPreprocessedInput,
64 DebugUnparseWithSymbols,
68 DebugUnparseWithModules,
83 DebugDumpParseTreeNoSema,
93 DebugMeasureParseTree,
113bool isFixedFormSuffix(llvm::StringRef suffix);
117bool isFreeFormSuffix(llvm::StringRef suffix);
121bool isToBePreprocessed(llvm::StringRef suffix);
125bool isCUDAFortranSuffix(llvm::StringRef suffix);
127enum class Language : uint8_t {
144enum class FortranForm {
162 enum Format { Source, ModuleMap, Precompiled };
164 constexpr InputKind(Language l = Language::Unknown) : lang(l) {}
166 Language getLanguage()
const {
return static_cast<Language
>(lang); }
169 bool isUnknown()
const {
return lang == Language::Unknown; }
180 const llvm::MemoryBuffer *buffer =
nullptr;
188 bool isFixedForm =
false;
194 unsigned mustBePreprocessed : 1;
197 bool isCUDAFortran{
false};
202 : file(file.str()), kind(inKind) {
206 auto pathDotIndex{file.rfind(
".")};
207 std::string pathSuffix{file.substr(pathDotIndex + 1)};
208 isFixedForm = isFixedFormSuffix(pathSuffix);
209 mustBePreprocessed = isToBePreprocessed(pathSuffix);
210 isCUDAFortran = isCUDAFortranSuffix(pathSuffix);
214 : buffer(memBuf), kind(inKind) {}
216 InputKind getKind()
const {
return kind; }
218 bool isEmpty()
const {
return file.empty() && buffer ==
nullptr; }
219 bool isFile()
const {
return (buffer ==
nullptr); }
220 bool getIsFixedForm()
const {
return isFixedForm; }
221 bool getMustBePreprocessed()
const {
return mustBePreprocessed; }
222 bool getIsCUDAFortran()
const {
return isCUDAFortran; }
224 llvm::StringRef getFile()
const {
229 const llvm::MemoryBuffer *getBuffer()
const {
230 assert(buffer &&
"Requested buffer, but it is empty!");
265 unsigned startColumn;
280 FortranForm fortranForm = FortranForm::Unknown;
283 std::vector<Fortran::lower::EnvironmentDefault> envDefaults;
287 int fixedFormColumns = 72;
297 Fortran::parser::Encoding encoding{Fortran::parser::Encoding::UTF_8};
Definition: Fortran-features.h:84
Definition: bit-population-count.h:20
Input values from -fget-definition
Definition: FrontendOptions.h:263
FrontendOptions - Options for controlling the behavior of the frontend.
Definition: FrontendOptions.h:236
unsigned needProvenanceRangeToCharBlockMappings
Definition: FrontendOptions.h:260
InputKind dashX
Definition: FrontendOptions.h:291
unsigned showHelp
Show the -help text.
Definition: FrontendOptions.h:243
unsigned instrumentedParse
Instrument the parse to get a more verbose log.
Definition: FrontendOptions.h:249
std::vector< std::string > mlirArgs
Definition: FrontendOptions.h:311
std::vector< std::string > llvmArgs
Definition: FrontendOptions.h:307
unsigned showColors
Enable color diagnostics.
Definition: FrontendOptions.h:252
std::string outputFile
The output file, if any.
Definition: FrontendOptions.h:274
std::vector< std::string > plugins
The list of plugins to load.
Definition: FrontendOptions.h:300
std::string actionName
The name of the action to run when using a plugin action.
Definition: FrontendOptions.h:303
std::vector< FrontendInputFile > inputs
The input files and their types.
Definition: FrontendOptions.h:271
unsigned printSupportedCPUs
Print the supported cpus for the current target.
Definition: FrontendOptions.h:255
frontend::ActionKind programAction
The frontend action to perform.
Definition: FrontendOptions.h:277
unsigned showVersion
Show the -version text.
Definition: FrontendOptions.h:246
static InputKind getInputKindForExtension(llvm::StringRef extension)
Definition: FrontendOptions.cpp:44