2020-02-25 23:11:52 +08:00
|
|
|
//===-- lib/Common/Fortran-features.cpp -----------------------------------===//
|
2019-11-07 07:54:26 +08:00
|
|
|
//
|
2019-12-21 04:52:07 +08:00
|
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
2019-11-07 07:54:26 +08:00
|
|
|
//
|
2020-01-11 04:12:03 +08:00
|
|
|
//===----------------------------------------------------------------------===//
|
2019-11-07 07:54:26 +08:00
|
|
|
|
2020-02-25 23:11:52 +08:00
|
|
|
#include "flang/Common/Fortran-features.h"
|
|
|
|
#include "flang/Common/Fortran.h"
|
|
|
|
#include "flang/Common/idioms.h"
|
2019-11-07 07:54:26 +08:00
|
|
|
|
|
|
|
namespace Fortran::common {
|
|
|
|
|
|
|
|
std::vector<const char *> LanguageFeatureControl::GetNames(
|
|
|
|
LogicalOperator opr) const {
|
|
|
|
std::vector<const char *> result;
|
|
|
|
result.push_back(AsFortran(opr));
|
|
|
|
if (opr == LogicalOperator::Neqv && IsEnabled(LanguageFeature::XOROperator)) {
|
|
|
|
result.push_back(".xor.");
|
|
|
|
}
|
|
|
|
if (IsEnabled(LanguageFeature::LogicalAbbreviations)) {
|
|
|
|
switch (opr) {
|
|
|
|
SWITCH_COVERS_ALL_CASES
|
2020-03-29 12:00:16 +08:00
|
|
|
case LogicalOperator::And:
|
|
|
|
result.push_back(".a.");
|
|
|
|
break;
|
|
|
|
case LogicalOperator::Or:
|
|
|
|
result.push_back(".o.");
|
|
|
|
break;
|
|
|
|
case LogicalOperator::Not:
|
|
|
|
result.push_back(".n.");
|
|
|
|
break;
|
2019-11-07 07:54:26 +08:00
|
|
|
case LogicalOperator::Neqv:
|
|
|
|
if (IsEnabled(LanguageFeature::XOROperator)) {
|
|
|
|
result.push_back(".x.");
|
|
|
|
}
|
|
|
|
break;
|
2020-03-29 12:00:16 +08:00
|
|
|
case LogicalOperator::Eqv:
|
|
|
|
break;
|
2019-11-07 07:54:26 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
std::vector<const char *> LanguageFeatureControl::GetNames(
|
|
|
|
RelationalOperator opr) const {
|
|
|
|
switch (opr) {
|
|
|
|
SWITCH_COVERS_ALL_CASES
|
2020-03-29 12:00:16 +08:00
|
|
|
case RelationalOperator::LT:
|
|
|
|
return {".lt.", "<"};
|
|
|
|
case RelationalOperator::LE:
|
|
|
|
return {".le.", "<="};
|
|
|
|
case RelationalOperator::EQ:
|
|
|
|
return {".eq.", "=="};
|
|
|
|
case RelationalOperator::GE:
|
|
|
|
return {".ge.", ">="};
|
|
|
|
case RelationalOperator::GT:
|
|
|
|
return {".gt.", ">"};
|
2019-11-07 07:54:26 +08:00
|
|
|
case RelationalOperator::NE:
|
|
|
|
if (IsEnabled(LanguageFeature::AlternativeNE)) {
|
|
|
|
return {".ne.", "/=", "<>"};
|
|
|
|
} else {
|
|
|
|
return {".ne.", "/="};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-29 12:00:16 +08:00
|
|
|
} // namespace Fortran::common
|