[libcxx-commits] [libcxx] [libc++] Adds a new feature-test macro generator class. (PR #90889)
Louis Dionne via libcxx-commits
libcxx-commits at lists.llvm.org
Thu May 23 09:14:59 PDT 2024
================
@@ -1857,6 +1858,215 @@ def produce_docs():
f.write(doc_str)
+def get_std_dialects(data):
+ """Impementation for feature_test_macros.get_std_dialects()."""
+ dialects = set()
+ for feature in data:
+ keys = feature["values"].keys()
+ assert len(keys) > 0, "'values' is empty"
+ dialects |= keys
+
+ return sorted(dialects)
+
+
+def get_dialect_versions(data, std_dialects, use_implemented_status):
+ """Impementation for feature_test_macros.get_(std_|)dialect_versions()."""
+ result = dict()
+ for feature in data:
+ last = None
+ entry = dict()
+ implemented = True
+ for std in std_dialects:
+ if std not in feature["values"].keys():
+ if last == None:
+ continue
+ else:
+ entry[std] = last
+ else:
+ if implemented:
+ values = feature["values"][std]
+ assert len(values) > 0, f"{feature['name']}[{std}] has no entries"
+ for value in values:
+ papers = list(values[value])
+ assert (
+ len(papers) > 0
+ ), f"{feature['name']}[{std}][{value}] has no entries"
+ for paper in papers:
+ if use_implemented_status and not paper["implemented"]:
+ implemented = False
+ break
+ if implemented:
+ last = f"{value}L"
+ else:
+ break
+
+ entry[std] = last
+ result[feature["name"]] = entry
+
+ return result
+
+
+class feature_test_macros:
+ """Provides all feature-test macro (FMT) output components.
----------------
ldionne wrote:
```suggestion
"""Provides all feature-test macro (FTM) output components.
```
https://github.com/llvm/llvm-project/pull/90889
More information about the libcxx-commits
mailing list