216class FoldingContext {
221 std::set<std::string> &tempNames)
222 : defaults_{d}, intrinsics_{t}, targetCharacteristics_{c},
223 languageFeatures_{lfc}, tempNames_{tempNames} {}
227 std::set<std::string> &tempNames)
228 : messages_{m}, defaults_{d}, intrinsics_{t}, targetCharacteristics_{c},
229 languageFeatures_{lfc}, tempNames_{tempNames} {}
230 FoldingContext(
const FoldingContext &that)
231 : messages_{that.messages_}, defaults_{that.defaults_},
232 intrinsics_{that.intrinsics_},
233 targetCharacteristics_{that.targetCharacteristics_},
234 pdtInstance_{that.pdtInstance_},
235 analyzingPDTComponentKindSelector_{
236 that.analyzingPDTComponentKindSelector_},
237 impliedDos_{that.impliedDos_},
238 languageFeatures_{that.languageFeatures_}, tempNames_{that.tempNames_} {
242 : messages_{m}, defaults_{that.defaults_}, intrinsics_{that.intrinsics_},
243 targetCharacteristics_{that.targetCharacteristics_},
244 pdtInstance_{that.pdtInstance_},
245 analyzingPDTComponentKindSelector_{
246 that.analyzingPDTComponentKindSelector_},
247 impliedDos_{that.impliedDos_},
248 languageFeatures_{that.languageFeatures_}, tempNames_{that.tempNames_} {
257 bool analyzingPDTComponentKindSelector()
const {
258 return analyzingPDTComponentKindSelector_;
260 const IntrinsicProcTable &intrinsics()
const {
return intrinsics_; }
262 return targetCharacteristics_;
265 return languageFeatures_;
267 template <
typename... A>
269 return messages_.Warn(
270 IsInModuleFile(), languageFeatures_, feature, std::forward<A>(args)...);
272 template <
typename... A>
274 return messages_.Warn(
275 IsInModuleFile(), languageFeatures_, warning, std::forward<A>(args)...);
277 std::optional<parser::CharBlock> moduleFileName()
const {
278 return moduleFileName_;
280 FoldingContext &set_moduleFileName(std::optional<parser::CharBlock> n) {
284 bool IsInModuleFile()
const {
return moduleFileName_.has_value(); }
290 std::map<parser::CharBlock, ConstantSubscript> &impliedDos() {
296 return common::ScopedSet(pdtInstance_, &spec);
299 return common::ScopedSet(pdtInstance_,
nullptr);
303 return common::ScopedSet(analyzingPDTComponentKindSelector_,
true);
307 return {*tempNames_.emplace(std::move(name)).first};
313 const IntrinsicProcTable &intrinsics_;
316 bool analyzingPDTComponentKindSelector_{
false};
317 std::optional<parser::CharBlock> moduleFileName_;
318 std::map<parser::CharBlock, ConstantSubscript> impliedDos_;
320 std::set<std::string> &tempNames_;