[clang] [Clang] Add BuiltinTemplates.td to generate code for builtin templates (PR #123736)
Nikolas Klauser via cfe-commits
cfe-commits at lists.llvm.org
Sat Jan 25 03:08:04 PST 2025
================
@@ -0,0 +1,184 @@
+//=- ClangBuiltinsEmitter.cpp - Generate Clang builtin templates-*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+//
+// This tablegen backend emits Clang's builtin templates.
+//
+//===----------------------------------------------------------------------===//
+
+#include "TableGenBackends.h"
+#include "llvm/TableGen/Error.h"
+#include "llvm/TableGen/TableGenBackend.h"
+
+using namespace llvm;
+
+std::string TemplateNameList;
+std::string CreateBuiltinTemplateParameterList;
+
+namespace {
+struct ParserState {
+ size_t UniqueCounter = 0;
+ size_t CurrentDepth = 0;
+ bool EmittedSizeTInfo = false;
+};
+
+std::pair<std::string, std::string>
+ParseTemplateParameterList(ParserState &PS, StringRef &TemplateParmList) {
+ auto Alphabetic = [](char c) { return std::isalpha(c); };
----------------
philnik777 wrote:
@erichkeane Do you have any better idea how to represent this? I could represent as something like
```
def __make_integer_seq : BuiltinTemplate<Template<[Class<"T">, NTTP<"T", "Ints", /*variadic*/true>], "IntSeq">, Class<"T">, NTTP<"T", "N">>;
```
But that's really hard to read IMO.
@Sirraide With an attribute we'd still have to verify that the parsed template actually represents the template, since users would be able to declare templates with an attribute, so we'd be back at square one AFAICT. It would also mean introducing code into every single translation unit, which would probably increase the startup time of clang.
https://github.com/llvm/llvm-project/pull/123736
More information about the cfe-commits
mailing list