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 inConstantContext_{that.inConstantContext_},
245 impliedDos_{that.impliedDos_},
246 languageFeatures_{that.languageFeatures_}, tempNames_{that.tempNames_},
247 fpMaxminBehavior_{that.fpMaxminBehavior_} {}
250 : messages_{m}, defaults_{that.defaults_}, intrinsics_{that.intrinsics_},
251 targetCharacteristics_{that.targetCharacteristics_},
252 pdtInstance_{that.pdtInstance_},
253 analyzingPDTComponentKindSelector_{
254 that.analyzingPDTComponentKindSelector_},
255 inConstantContext_{that.inConstantContext_},
256 impliedDos_{that.impliedDos_},
257 languageFeatures_{that.languageFeatures_}, tempNames_{that.tempNames_},
258 fpMaxminBehavior_{that.fpMaxminBehavior_} {}
266 bool analyzingPDTComponentKindSelector()
const {
267 return analyzingPDTComponentKindSelector_;
269 const IntrinsicProcTable &intrinsics()
const {
return intrinsics_; }
271 return targetCharacteristics_;
274 return languageFeatures_;
277 return fpMaxminBehavior_;
279 template <
typename... A>
281 return messages_.Warn(
282 IsInModuleFile(), languageFeatures_, feature, std::forward<A>(args)...);
284 template <
typename... A>
286 return messages_.Warn(
287 IsInModuleFile(), languageFeatures_, warning, std::forward<A>(args)...);
289 std::optional<parser::CharBlock> moduleFileName()
const {
290 return moduleFileName_;
292 FoldingContext &set_moduleFileName(std::optional<parser::CharBlock> n) {
296 bool IsInModuleFile()
const {
return moduleFileName_.has_value(); }
302 std::map<parser::CharBlock, ConstantSubscript> &impliedDos() {
308 return common::ScopedSet(pdtInstance_, &spec);
311 return common::ScopedSet(pdtInstance_,
nullptr);
315 return common::ScopedSet(analyzingPDTComponentKindSelector_,
true);
318 bool inConstantContext()
const {
return inConstantContext_; }
320 return common::ScopedSet(inConstantContext_,
true);
324 return common::ScopedSet(realFlagWarningContext_, str);
328 return {*tempNames_.emplace(std::move(name)).first};
331 void RealFlagWarnings(
const RealFlags &,
const char *op);
336 const IntrinsicProcTable &intrinsics_;
339 bool analyzingPDTComponentKindSelector_{
false};
343 bool inConstantContext_{
false};
344 std::optional<parser::CharBlock> moduleFileName_;
345 std::map<parser::CharBlock, ConstantSubscript> impliedDos_;
347 std::set<std::string> &tempNames_;
348 std::string realFlagWarningContext_;