aboutsummaryrefslogtreecommitdiff
path: root/libc
diff options
context:
space:
mode:
authorRoseZhang03 <rosezhang@google.com>2024-06-26 20:06:21 +0000
committerGitHub <noreply@github.com>2024-06-26 20:06:21 +0000
commit57d3d070502f54c63c5fca588cf74b78d607e272 (patch)
treebb54e1ffa5d907c8740071b61bfb79a8031db6e7 /libc
parent133492fe18260d4b5ce2d70ff9575fa9c911d090 (diff)
downloadllvm-57d3d070502f54c63c5fca588cf74b78d607e272.zip
llvm-57d3d070502f54c63c5fca588cf74b78d607e272.tar.gz
llvm-57d3d070502f54c63c5fca588cf74b78d607e272.tar.bz2
[libc] added newhdrgen class implementation (#96710)
Added a class representation of a libc header file, allowing for easier conversion from YAML to .h file output. Classes include: - Function (representing function headers) - Include (representing various include statements found on a header file) - Macro (representing macro definitions) - Enumeration (representing enum definitions) - Type (representing include statements for NamedTypes) - Object (representing ObjectSpec defintitions)
Diffstat (limited to 'libc')
-rw-r--r--libc/newhdrgen/class_implementation/classes/enumeration.py21
-rw-r--r--libc/newhdrgen/class_implementation/classes/function.py29
-rw-r--r--libc/newhdrgen/class_implementation/classes/include.py17
-rw-r--r--libc/newhdrgen/class_implementation/classes/macro.py21
-rw-r--r--libc/newhdrgen/class_implementation/classes/object.py18
-rw-r--r--libc/newhdrgen/class_implementation/classes/type.py17
6 files changed, 123 insertions, 0 deletions
diff --git a/libc/newhdrgen/class_implementation/classes/enumeration.py b/libc/newhdrgen/class_implementation/classes/enumeration.py
new file mode 100644
index 0000000..be03dbf
--- /dev/null
+++ b/libc/newhdrgen/class_implementation/classes/enumeration.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+#
+# ====-- Enumeration class for libc function headers ----------*- python -*--==#
+#
+# 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
+#
+# ==-------------------------------------------------------------------------==#
+
+
+class Enumeration:
+ def __init__(self, name, value=None):
+ self.name = name
+ self.value = value
+
+ def __str__(self):
+ if self.value != None:
+ return f"{self.name} = {self.value}"
+ else:
+ return f"{self.name}"
diff --git a/libc/newhdrgen/class_implementation/classes/function.py b/libc/newhdrgen/class_implementation/classes/function.py
new file mode 100644
index 0000000..dc73e0e
--- /dev/null
+++ b/libc/newhdrgen/class_implementation/classes/function.py
@@ -0,0 +1,29 @@
+#!/usr/bin/env python
+#
+# ====-- Function class for libc function headers -------------*- python -*--==#
+#
+# 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
+#
+# ==-------------------------------------------------------------------------==#
+
+
+class Function:
+ def __init__(
+ self, standards, return_type, name, arguments, guard=None, attributes=[]
+ ):
+ self.standards = standards
+ self.return_type = return_type
+ self.name = name
+ self.arguments = [arg["type"] for arg in arguments]
+ self.guard = guard
+ self.attributes = attributes
+
+ def __str__(self):
+ args_str = ", ".join(self.arguments)
+ attributes_str = " ".join(self.attributes)
+ result = f"{self.return_type} {self.name}({args_str}){attributes_str};"
+ if self.guard:
+ result = f"#ifdef {self.guard}\n{result}\n#endif // {self.guard}"
+ return result
diff --git a/libc/newhdrgen/class_implementation/classes/include.py b/libc/newhdrgen/class_implementation/classes/include.py
new file mode 100644
index 0000000..2657f2e
--- /dev/null
+++ b/libc/newhdrgen/class_implementation/classes/include.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+#
+# ====-- Include class for libc function headers --------------*- python -*--==#
+#
+# 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
+#
+# ==-------------------------------------------------------------------------==#
+
+
+class Include:
+ def __init__(self, name):
+ self.name = name
+
+ def __str__(self):
+ return f'#include "{self.name}"'
diff --git a/libc/newhdrgen/class_implementation/classes/macro.py b/libc/newhdrgen/class_implementation/classes/macro.py
new file mode 100644
index 0000000..bf17ae6
--- /dev/null
+++ b/libc/newhdrgen/class_implementation/classes/macro.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+#
+# ====-- Macro class for libc function headers ----------------*- python -*--==#
+#
+# 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
+#
+# ==-------------------------------------------------------------------------==#
+
+
+class Macro:
+ def __init__(self, name, value=None):
+ self.name = name
+ self.value = value
+
+ def __str__(self):
+ if self.value != None:
+ return f"#define {self.name} {self.value}"
+ else:
+ return f"#define {self.name}"
diff --git a/libc/newhdrgen/class_implementation/classes/object.py b/libc/newhdrgen/class_implementation/classes/object.py
new file mode 100644
index 0000000..c65a82e
--- /dev/null
+++ b/libc/newhdrgen/class_implementation/classes/object.py
@@ -0,0 +1,18 @@
+#!/usr/bin/env python
+#
+# ====-- Object class for libc function headers ---------------*- python -*--==#
+#
+# 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
+#
+# ==-------------------------------------------------------------------------==#
+
+
+class Object:
+ def __init__(self, name, type):
+ self.name = name
+ self.type = type
+
+ def __str__(self):
+ return f"extern {self.type} {self.name}"
diff --git a/libc/newhdrgen/class_implementation/classes/type.py b/libc/newhdrgen/class_implementation/classes/type.py
new file mode 100644
index 0000000..8e4a8f3
--- /dev/null
+++ b/libc/newhdrgen/class_implementation/classes/type.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+#
+# ====-- Type class for libc function headers -----------------*- python -*--==#
+#
+# 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
+#
+# ==-------------------------------------------------------------------------==#
+
+
+class Type:
+ def __init__(self, type_name):
+ self.type_name = type_name
+
+ def __str__(self):
+ return f"#include <llvm-libc-types/{self.type_name}.h>"