[clang] [clang] Language to String function (PR #69487)
Yusra Syeda via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 18 10:23:46 PDT 2023
https://github.com/ysyeda created https://github.com/llvm/llvm-project/pull/69487
This PR adds a function which converts the language to string.
>From 7214e2ad580724c6b747ce5da126f4e8dbdc825c Mon Sep 17 00:00:00 2001
From: Yusra Syeda <yusra.syeda at ibm.com>
Date: Wed, 18 Oct 2023 13:20:58 -0400
Subject: [PATCH] add language to string function
---
clang/include/clang/Basic/LangStandard.h | 1 +
clang/lib/Basic/LangStandards.cpp | 40 ++++++++++++++++++++++++
2 files changed, 41 insertions(+)
diff --git a/clang/include/clang/Basic/LangStandard.h b/clang/include/clang/Basic/LangStandard.h
index 6356f16acc811e0..66b2ca0a8397136 100644
--- a/clang/include/clang/Basic/LangStandard.h
+++ b/clang/include/clang/Basic/LangStandard.h
@@ -43,6 +43,7 @@ enum class Language : uint8_t {
HLSL,
///@}
};
+const char *languageToString(Language L);
enum LangFeatures {
LineComment = (1 << 0),
diff --git a/clang/lib/Basic/LangStandards.cpp b/clang/lib/Basic/LangStandards.cpp
index af9cf4f273920ee..2c894fdafa1cacb 100644
--- a/clang/lib/Basic/LangStandards.cpp
+++ b/clang/lib/Basic/LangStandards.cpp
@@ -10,9 +10,49 @@
#include "clang/Config/config.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/FormatVariadic.h"
#include "llvm/TargetParser/Triple.h"
using namespace clang;
+const char *clang::languageToString(Language L) {
+ // I would like to make this function and the definition of Language
+ // in the .h file simply expand the contents of a .def file.
+ // However, in the .h the members of the enum have doxygen annotations
+ // and/or comments which would be lost.
+ switch (L) {
+ case Language::Unknown:
+ return "Unknown";
+ case Language::Asm:
+ return "Asm";
+ case Language::LLVM_IR:
+ return "LLVM_IR";
+ case Language::C:
+ return "C";
+ case Language::CXX:
+ return "CXX";
+ case Language::ObjC:
+ return "ObjC";
+ case Language::ObjCXX:
+ return "ObjCXX";
+ case Language::OpenCL:
+ return "OpenCL";
+ case Language::OpenCLCXX:
+ return "OpenCLCXX";
+ case Language::CUDA:
+ return "CUDA";
+ case Language::RenderScript:
+ return "RenderScript";
+ case Language::HIP:
+ return "HIP";
+ case Language::HLSL:
+ return "HLSL";
+ }
+
+ std::string msg = llvm::formatv(
+ "Unknown value ({0}) passed to languageToString", (unsigned int)L);
+ llvm_unreachable(msg.c_str());
+}
+
#define LANGSTANDARD(id, name, lang, desc, features) \
static const LangStandard Lang_##id = {name, desc, features, Language::lang};
#include "clang/Basic/LangStandards.def"
More information about the cfe-commits
mailing list