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"
23#include <forward_list>
29struct ComponentArraySpec;
38namespace Fortran::semantics {
40using SourceName = parser::CharBlock;
41class SemanticsContext;
44Symbol &Resolve(
const parser::Name &, Symbol &);
45Symbol *Resolve(
const parser::Name &, Symbol *);
48parser::MessageFixedText WithSeverity(
49 const parser::MessageFixedText &msg, parser::Severity);
51bool IsIntrinsicOperator(
const SemanticsContext &,
const SourceName &);
52bool IsLogicalConstant(
const SemanticsContext &,
const SourceName &);
55MaybeIntExpr EvaluateIntExpr(SemanticsContext &context,
const T &expr) {
56 if (MaybeExpr maybeExpr{
57 Fold(context.foldingContext(), AnalyzeExpr(context, expr))}) {
58 if (
auto *intExpr{evaluate::UnwrapExpr<SomeIntExpr>(*maybeExpr)}) {
59 return std::move(*intExpr);
66std::optional<std::int64_t> EvaluateInt64(
67 SemanticsContext &context,
const T &expr) {
68 return evaluate::ToInt64(EvaluateIntExpr(context, expr));
74 explicit GenericSpecInfo(
const parser::DefinedOpName &x) { Analyze(x); }
78 const SourceName &symbolName()
const {
return symbolName_.value(); }
81 void Resolve(
Symbol *)
const;
82 friend llvm::raw_ostream &operator<<(
86 void Analyze(
const parser::DefinedOpName &);
91 std::optional<SourceName> symbolName_;
107 std::vector<EquivalenceSet> &sets() {
return sets_; };
115 bool CheckCanEquivalence(
126 bool IsDefaultNumericSequenceType(
const DeclTypeSpec *);
127 static bool IsAnyNumericSequenceType(
const DeclTypeSpec *);
128 static bool IsSequenceType(
132 std::vector<EquivalenceSet> sets_;
134 std::map<EquivalenceObject, std::size_t> objectToSet_;
135 EquivalenceSet currSet_;
138 std::vector<ConstantSubscript> subscripts;
139 std::optional<ConstantSubscript> substringStart;
146void MapSubprogramToNewSymbols(
const Symbol &oldSymbol,
Symbol &newSymbol,
Definition: char-block.h:28
Definition: resolve-names-utils.h:104
Definition: resolve-names-utils.h:72
Definition: semantics.h:67
Definition: check-expression.h:19
Definition: parse-tree.h:1358
Definition: parse-tree.h:984
Definition: parse-tree.h:995
Definition: parse-tree.h:1818
Definition: parse-tree.h:1857
Definition: parse-tree.h:1700
Definition: parse-tree.h:3040
Definition: parse-tree.h:580
Definition: resolve-names-utils.cpp:669