9#ifndef FORTRAN_SEMANTICS_RESOLVE_NAMES_UTILS_H_
10#define FORTRAN_SEMANTICS_RESOLVE_NAMES_UTILS_H_
14#include "flang/Evaluate/fold.h"
15#include "flang/Parser/message.h"
16#include "flang/Parser/tools.h"
17#include "flang/Semantics/expression.h"
18#include "flang/Semantics/scope.h"
19#include "flang/Semantics/semantics.h"
20#include "flang/Semantics/symbol.h"
21#include "flang/Semantics/type.h"
22#include "llvm/Support/raw_ostream.h"
37namespace Fortran::semantics {
39using SourceName = parser::CharBlock;
47parser::MessageFixedText WithSeverity(
48 const parser::MessageFixedText &msg, parser::Severity);
55 if (MaybeExpr maybeExpr{
56 Fold(context.foldingContext(), AnalyzeExpr(context, expr))}) {
57 if (
auto *intExpr{evaluate::UnwrapExpr<SomeIntExpr>(*maybeExpr)}) {
58 return std::move(*intExpr);
65std::optional<std::int64_t> EvaluateInt64(
67 return evaluate::ToInt64(EvaluateIntExpr(context, expr));
71class GenericSpecInfo {
73 explicit GenericSpecInfo(
const parser::DefinedOpName &x) { Analyze(x); }
77 const SourceName &symbolName()
const {
return symbolName_.value(); }
80 void Resolve(
Symbol *)
const;
81 friend llvm::raw_ostream &operator<<(
82 llvm::raw_ostream &,
const GenericSpecInfo &);
85 void Analyze(
const parser::DefinedOpName &);
90 std::optional<SourceName> symbolName_;
103class EquivalenceSets {
106 std::vector<EquivalenceSet> &sets() {
return sets_; };
114 bool CheckCanEquivalence(
125 bool IsDefaultNumericSequenceType(
const DeclTypeSpec *);
126 static bool IsAnyNumericSequenceType(
const DeclTypeSpec *);
127 static bool IsSequenceType(
131 std::vector<EquivalenceSet> sets_;
133 std::map<EquivalenceObject, std::size_t> objectToSet_;
134 EquivalenceSet currSet_;
137 std::vector<ConstantSubscript> subscripts;
138 std::optional<ConstantSubscript> substringStart;
145void MapSubprogramToNewSymbols(
const Symbol &oldSymbol,
Symbol &newSymbol,
149 const parser::DefinedOperator::IntrinsicOperator &op,
Definition char-block.h:26
Definition semantics.h:67
Definition check-expression.h:19
Definition parse-tree.h:1371
Definition parse-tree.h:977
Definition parse-tree.h:988
Definition parse-tree.h:1848
Definition parse-tree.h:1887
Definition parse-tree.h:1735
Definition parse-tree.h:3074
Definition parse-tree.h:591
Definition resolve-names-utils.cpp:743