217class FoldingContext {
222 std::set<std::string> &tempNames,
224 common::FPMaxminBehavior::Legacy)
225 : defaults_{d}, intrinsics_{t}, targetCharacteristics_{c},
226 languageFeatures_{lfc}, tempNames_{tempNames},
227 fpMaxminBehavior_{fpMaxminBehavior} {}
231 std::set<std::string> &tempNames,
233 common::FPMaxminBehavior::Legacy)
234 : messages_{m}, defaults_{d}, intrinsics_{t}, targetCharacteristics_{c},
235 languageFeatures_{lfc}, tempNames_{tempNames},
236 fpMaxminBehavior_{fpMaxminBehavior} {}
237 FoldingContext(
const FoldingContext &that)
238 : messages_{that.messages_}, defaults_{that.defaults_},
239 intrinsics_{that.intrinsics_},
240 targetCharacteristics_{that.targetCharacteristics_},
241 pdtInstance_{that.pdtInstance_},
242 analyzingPDTComponentKindSelector_{
243 that.analyzingPDTComponentKindSelector_},
244 impliedDos_{that.impliedDos_},
245 languageFeatures_{that.languageFeatures_}, tempNames_{that.tempNames_},
246 fpMaxminBehavior_{that.fpMaxminBehavior_} {}
249 : messages_{m}, defaults_{that.defaults_}, intrinsics_{that.intrinsics_},
250 targetCharacteristics_{that.targetCharacteristics_},
251 pdtInstance_{that.pdtInstance_},
252 analyzingPDTComponentKindSelector_{
253 that.analyzingPDTComponentKindSelector_},
254 impliedDos_{that.impliedDos_},
255 languageFeatures_{that.languageFeatures_}, tempNames_{that.tempNames_},
256 fpMaxminBehavior_{that.fpMaxminBehavior_} {}
264 bool analyzingPDTComponentKindSelector()
const {
265 return analyzingPDTComponentKindSelector_;
267 const IntrinsicProcTable &intrinsics()
const {
return intrinsics_; }
269 return targetCharacteristics_;
272 return languageFeatures_;
275 return fpMaxminBehavior_;
277 template <
typename... A>
279 return messages_.Warn(
280 IsInModuleFile(), languageFeatures_, feature, std::forward<A>(args)...);
282 template <
typename... A>
284 return messages_.Warn(
285 IsInModuleFile(), languageFeatures_, warning, std::forward<A>(args)...);
287 std::optional<parser::CharBlock> moduleFileName()
const {
288 return moduleFileName_;
290 FoldingContext &set_moduleFileName(std::optional<parser::CharBlock> n) {
294 bool IsInModuleFile()
const {
return moduleFileName_.has_value(); }
300 std::map<parser::CharBlock, ConstantSubscript> &impliedDos() {
306 return common::ScopedSet(pdtInstance_, &spec);
309 return common::ScopedSet(pdtInstance_,
nullptr);
313 return common::ScopedSet(analyzingPDTComponentKindSelector_,
true);
317 return common::ScopedSet(realFlagWarningContext_, str);
321 return {*tempNames_.emplace(std::move(name)).first};
324 void RealFlagWarnings(
const RealFlags &,
const char *op);
329 const IntrinsicProcTable &intrinsics_;
332 bool analyzingPDTComponentKindSelector_{
false};
333 std::optional<parser::CharBlock> moduleFileName_;
334 std::map<parser::CharBlock, ConstantSubscript> impliedDos_;
336 std::set<std::string> &tempNames_;
337 std::string realFlagWarningContext_;