70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
//===-- lib/Common/Fortran-features.cpp -----------------------------------===//
 | 
						|
//
 | 
						|
// 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
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#include "flang/Common/Fortran-features.h"
 | 
						|
#include "flang/Common/Fortran.h"
 | 
						|
#include "flang/Common/idioms.h"
 | 
						|
 | 
						|
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
 | 
						|
    case LogicalOperator::And:
 | 
						|
      result.push_back(".a.");
 | 
						|
      break;
 | 
						|
    case LogicalOperator::Or:
 | 
						|
      result.push_back(".o.");
 | 
						|
      break;
 | 
						|
    case LogicalOperator::Not:
 | 
						|
      result.push_back(".n.");
 | 
						|
      break;
 | 
						|
    case LogicalOperator::Neqv:
 | 
						|
      if (IsEnabled(LanguageFeature::XOROperator)) {
 | 
						|
        result.push_back(".x.");
 | 
						|
      }
 | 
						|
      break;
 | 
						|
    case LogicalOperator::Eqv:
 | 
						|
      break;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return result;
 | 
						|
}
 | 
						|
 | 
						|
std::vector<const char *> LanguageFeatureControl::GetNames(
 | 
						|
    RelationalOperator opr) const {
 | 
						|
  switch (opr) {
 | 
						|
    SWITCH_COVERS_ALL_CASES
 | 
						|
  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.", ">"};
 | 
						|
  case RelationalOperator::NE:
 | 
						|
    if (IsEnabled(LanguageFeature::AlternativeNE)) {
 | 
						|
      return {".ne.", "/=", "<>"};
 | 
						|
    } else {
 | 
						|
      return {".ne.", "/="};
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
} // namespace Fortran::common
 |