[flang-commits] [flang] [flang] Minor cleanup (move function into /tools.cpp) (PR #111587)
via flang-commits
flang-commits at lists.llvm.org
Tue Oct 8 14:04:51 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-semantics
Author: Peter Klausler (klausler)
<details>
<summary>Changes</summary>
The semantics utility GetAllNames has declarations in two header files and a definition that really should be in the common utilities source file. Remove the redudant declaration from resolve-names-utils.h and move code from resolve-names-utils.cpp into Semantics/tools.cpp.
---
Full diff: https://github.com/llvm/llvm-project/pull/111587.diff
3 Files Affected:
- (modified) flang/lib/Semantics/resolve-names-utils.cpp (-33)
- (modified) flang/lib/Semantics/resolve-names-utils.h (-5)
- (modified) flang/lib/Semantics/tools.cpp (+31)
``````````diff
diff --git a/flang/lib/Semantics/resolve-names-utils.cpp b/flang/lib/Semantics/resolve-names-utils.cpp
index b8ce8d14a33faa..a838d49c06104d 100644
--- a/flang/lib/Semantics/resolve-names-utils.cpp
+++ b/flang/lib/Semantics/resolve-names-utils.cpp
@@ -31,8 +31,6 @@ using common::NumericOperator;
using common::RelationalOperator;
using IntrinsicOperator = parser::DefinedOperator::IntrinsicOperator;
-static constexpr const char *operatorPrefix{"operator("};
-
static GenericKind MapIntrinsicOperator(IntrinsicOperator);
Symbol *Resolve(const parser::Name &name, Symbol *symbol) {
@@ -69,37 +67,6 @@ bool IsIntrinsicOperator(
return false;
}
-template <typename E>
-std::forward_list<std::string> GetOperatorNames(
- const SemanticsContext &context, E opr) {
- std::forward_list<std::string> result;
- for (const char *name : context.languageFeatures().GetNames(opr)) {
- result.emplace_front(std::string{operatorPrefix} + name + ')');
- }
- return result;
-}
-
-std::forward_list<std::string> GetAllNames(
- const SemanticsContext &context, const SourceName &name) {
- std::string str{name.ToString()};
- if (!name.empty() && name.end()[-1] == ')' &&
- name.ToString().rfind(std::string{operatorPrefix}, 0) == 0) {
- for (int i{0}; i != common::LogicalOperator_enumSize; ++i) {
- auto names{GetOperatorNames(context, LogicalOperator{i})};
- if (llvm::is_contained(names, str)) {
- return names;
- }
- }
- for (int i{0}; i != common::RelationalOperator_enumSize; ++i) {
- auto names{GetOperatorNames(context, RelationalOperator{i})};
- if (llvm::is_contained(names, str)) {
- return names;
- }
- }
- }
- return {str};
-}
-
bool IsLogicalConstant(
const SemanticsContext &context, const SourceName &name) {
std::string str{name.ToString()};
diff --git a/flang/lib/Semantics/resolve-names-utils.h b/flang/lib/Semantics/resolve-names-utils.h
index 5b537d80e5f880..64784722ff4f84 100644
--- a/flang/lib/Semantics/resolve-names-utils.h
+++ b/flang/lib/Semantics/resolve-names-utils.h
@@ -51,11 +51,6 @@ parser::MessageFixedText WithSeverity(
bool IsIntrinsicOperator(const SemanticsContext &, const SourceName &);
bool IsLogicalConstant(const SemanticsContext &, const SourceName &);
-// Some intrinsic operators have more than one name (e.g. `operator(.eq.)` and
-// `operator(==)`). GetAllNames() returns them all, including symbolName.
-std::forward_list<std::string> GetAllNames(
- const SemanticsContext &, const SourceName &);
-
template <typename T>
MaybeIntExpr EvaluateIntExpr(SemanticsContext &context, const T &expr) {
if (MaybeExpr maybeExpr{
diff --git a/flang/lib/Semantics/tools.cpp b/flang/lib/Semantics/tools.cpp
index 4d2a0a607abe89..379d5d0eb3eef0 100644
--- a/flang/lib/Semantics/tools.cpp
+++ b/flang/lib/Semantics/tools.cpp
@@ -1654,6 +1654,37 @@ bool HasDefinedIo(common::DefinedIo which, const DerivedTypeSpec &derived,
return parentType && HasDefinedIo(which, *parentType, scope);
}
+template <typename E>
+std::forward_list<std::string> GetOperatorNames(
+ const SemanticsContext &context, E opr) {
+ std::forward_list<std::string> result;
+ for (const char *name : context.languageFeatures().GetNames(opr)) {
+ result.emplace_front("operator("s + name + ')');
+ }
+ return result;
+}
+
+std::forward_list<std::string> GetAllNames(
+ const SemanticsContext &context, const SourceName &name) {
+ std::string str{name.ToString()};
+ if (!name.empty() && name.end()[-1] == ')' &&
+ name.ToString().rfind("operator(", 0) == 0) {
+ for (int i{0}; i != common::LogicalOperator_enumSize; ++i) {
+ auto names{GetOperatorNames(context, common::LogicalOperator{i})};
+ if (llvm::is_contained(names, str)) {
+ return names;
+ }
+ }
+ for (int i{0}; i != common::RelationalOperator_enumSize; ++i) {
+ auto names{GetOperatorNames(context, common::RelationalOperator{i})};
+ if (llvm::is_contained(names, str)) {
+ return names;
+ }
+ }
+ }
+ return {str};
+}
+
void WarnOnDeferredLengthCharacterScalar(SemanticsContext &context,
const SomeExpr *expr, parser::CharBlock at, const char *what) {
if (context.languageFeatures().ShouldWarn(
``````````
</details>
https://github.com/llvm/llvm-project/pull/111587
More information about the flang-commits
mailing list