diff options
author | RoseZhang03 <rosezhang@google.com> | 2024-06-26 20:06:21 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-26 20:06:21 +0000 |
commit | 57d3d070502f54c63c5fca588cf74b78d607e272 (patch) | |
tree | bb54e1ffa5d907c8740071b61bfb79a8031db6e7 /libc | |
parent | 133492fe18260d4b5ce2d70ff9575fa9c911d090 (diff) | |
download | llvm-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')
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>" |