[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