brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 01c524b Raw
123 lines · cpp
1//===--- LangStandards.cpp - Language Standard Definitions ----------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "clang/Basic/LangStandard.h"10#include "clang/Config/config.h"11#include "llvm/ADT/StringSwitch.h"12#include "llvm/Support/ErrorHandling.h"13#include "llvm/TargetParser/Triple.h"14using namespace clang;15 16StringRef clang::languageToString(Language L) {17  switch (L) {18  case Language::Unknown:19    return "Unknown";20  case Language::Asm:21    return "Asm";22  case Language::LLVM_IR:23    return "LLVM IR";24  case Language::CIR:25    return "ClangIR";26  case Language::C:27    return "C";28  case Language::CXX:29    return "C++";30  case Language::ObjC:31    return "Objective-C";32  case Language::ObjCXX:33    return "Objective-C++";34  case Language::OpenCL:35    return "OpenCL";36  case Language::OpenCLCXX:37    return "OpenCLC++";38  case Language::CUDA:39    return "CUDA";40  case Language::HIP:41    return "HIP";42  case Language::HLSL:43    return "HLSL";44  }45 46  llvm_unreachable("unhandled language kind");47}48 49#define LANGSTANDARD(id, name, lang, desc, features, version)                  \50  static const LangStandard Lang_##id = {name, desc, features, Language::lang, \51                                         version};52#include "clang/Basic/LangStandards.def"53 54const LangStandard &LangStandard::getLangStandardForKind(Kind K) {55  switch (K) {56  case lang_unspecified:57    llvm::report_fatal_error("getLangStandardForKind() on unspecified kind");58#define LANGSTANDARD(id, name, lang, desc, features, version)                  \59  case lang_##id:                                                              \60    return Lang_##id;61#include "clang/Basic/LangStandards.def"62  }63  llvm_unreachable("Invalid language kind!");64}65 66LangStandard::Kind LangStandard::getLangKind(StringRef Name) {67  return llvm::StringSwitch<Kind>(Name)68#define LANGSTANDARD(id, name, lang, desc, features, version)                  \69  .Case(name, lang_##id)70#define LANGSTANDARD_ALIAS(id, alias) .Case(alias, lang_##id)71#include "clang/Basic/LangStandards.def"72      .Default(lang_unspecified);73}74 75LangStandard::Kind LangStandard::getHLSLLangKind(StringRef Name) {76  return llvm::StringSwitch<LangStandard::Kind>(Name)77      .Case("2016", LangStandard::lang_hlsl2016)78      .Case("2017", LangStandard::lang_hlsl2017)79      .Case("2018", LangStandard::lang_hlsl2018)80      .Case("2021", LangStandard::lang_hlsl2021)81      .Case("202x", LangStandard::lang_hlsl202x)82      .Case("202y", LangStandard::lang_hlsl202y)83      .Default(LangStandard::lang_unspecified);84}85 86const LangStandard *LangStandard::getLangStandardForName(StringRef Name) {87  Kind K = getLangKind(Name);88  if (K == lang_unspecified)89    return nullptr;90 91  return &getLangStandardForKind(K);92}93 94LangStandard::Kind clang::getDefaultLanguageStandard(clang::Language Lang,95                                                     const llvm::Triple &T) {96  switch (Lang) {97  case Language::Unknown:98  case Language::LLVM_IR:99  case Language::CIR:100    llvm_unreachable("Invalid input kind!");101  case Language::OpenCL:102    return LangStandard::lang_opencl12;103  case Language::OpenCLCXX:104    return LangStandard::lang_openclcpp10;105  case Language::Asm:106  case Language::C:107    // The PS4 uses C99 as the default C standard.108    if (T.isPS4())109      return LangStandard::lang_gnu99;110    return LangStandard::lang_gnu17;111  case Language::ObjC:112    return LangStandard::lang_gnu11;113  case Language::CXX:114  case Language::ObjCXX:115  case Language::CUDA:116  case Language::HIP:117    return LangStandard::lang_gnucxx17;118  case Language::HLSL:119    return LangStandard::lang_hlsl202x;120  }121  llvm_unreachable("unhandled Language kind!");122}123