9#ifndef FORTRAN_SEMANTICS_MOD_FILE_H_
10#define FORTRAN_SEMANTICS_MOD_FILE_H_
12#include "flang/Semantics/attr.h"
13#include "flang/Semantics/symbol.h"
14#include "llvm/Support/raw_ostream.h"
20class MessageFixedText;
27namespace Fortran::semantics {
29using SourceName = parser::CharBlock;
32class SemanticsContext;
38 void WriteClosure(llvm::raw_ostream &,
const Symbol &,
39 UnorderedSymbolSet &nonIntrinsicModulesWritten);
40 ModFileWriter &set_hermeticModuleFileOutput(
bool yes =
true) {
41 hermeticModuleFileOutput_ = yes;
48 std::string needsBuf_;
50 std::string useExtraAttrsBuf_;
51 std::string declsBuf_;
52 std::string containsBuf_;
54 UnorderedSymbolSet emittedDECStructures_, emittedDECFields_;
55 UnorderedSymbolSet usedNonIntrinsicModules_;
57 llvm::raw_string_ostream needs_{needsBuf_};
58 llvm::raw_string_ostream uses_{usesBuf_};
59 llvm::raw_string_ostream useExtraAttrs_{
61 llvm::raw_string_ostream decls_{declsBuf_};
62 llvm::raw_string_ostream contains_{containsBuf_};
63 bool isSubmodule_{
false};
64 bool hermeticModuleFileOutput_{
false};
66 void WriteAll(
const Scope &);
67 void WriteOne(
const Scope &);
68 void Write(
const Symbol &);
69 std::string GetAsString(
const Symbol &);
70 void PrepareRenamings(
const Scope &);
71 void PutSymbols(
const Scope &, UnorderedSymbolSet *hermetic);
73 bool PutComponents(
const Symbol &);
74 void PutSymbol(llvm::raw_ostream &,
const Symbol &);
75 void PutEntity(llvm::raw_ostream &,
const Symbol &);
77 llvm::raw_ostream &,
const Symbol &, std::function<
void()>, Attrs);
78 void PutObjectEntity(llvm::raw_ostream &,
const Symbol &);
79 void PutProcEntity(llvm::raw_ostream &,
const Symbol &);
80 void PutDerivedType(
const Symbol &,
const Scope * =
nullptr);
81 void PutDECStructure(
const Symbol &,
const Scope * =
nullptr);
82 void PutTypeParam(llvm::raw_ostream &,
const Symbol &);
83 void PutSubprogram(
const Symbol &);
84 void PutGeneric(
const Symbol &);
85 void PutUse(
const Symbol &);
86 void PutUseExtraAttr(Attr,
const Symbol &,
const Symbol &);
87 llvm::raw_ostream &PutAttrs(llvm::raw_ostream &, Attrs,
88 const std::string * =
nullptr,
bool =
false, std::string before =
","s,
89 std::string after =
""s)
const;
90 void PutDirective(llvm::raw_ostream &,
const Symbol &);
Definition: char-block.h:28
Definition: message.h:188
Definition: mod-file.h:93
Definition: mod-file.h:34
Definition: semantics.h:67
Definition: check-expression.h:19