diff options
author | NAKAMURA Takumi <geek4civic@gmail.com> | 2025-01-09 17:50:40 +0900 |
---|---|---|
committer | NAKAMURA Takumi <geek4civic@gmail.com> | 2025-01-09 17:50:40 +0900 |
commit | fea7da1b00cc97d742faede2df96c7d327950f49 (patch) | |
tree | 4de1d6b4ddc69f4f32daabb11ad5c71ab0cf895e /libc/utils/hdrgen/header.py | |
parent | 9b99dde0d47102625d93c5d1cbbc04951025a6c9 (diff) | |
parent | 0aa930a41f2d1ebf1fa90ec42da8f96d15a4dcbb (diff) | |
download | llvm-users/chapuni/cov/single/nextcount.zip llvm-users/chapuni/cov/single/nextcount.tar.gz llvm-users/chapuni/cov/single/nextcount.tar.bz2 |
Merge branch 'users/chapuni/cov/single/nextcount-base' into users/chapuni/cov/single/nextcountusers/chapuni/cov/single/nextcount
Diffstat (limited to 'libc/utils/hdrgen/header.py')
-rw-r--r-- | libc/utils/hdrgen/header.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/libc/utils/hdrgen/header.py b/libc/utils/hdrgen/header.py new file mode 100644 index 0000000..9339acc --- /dev/null +++ b/libc/utils/hdrgen/header.py @@ -0,0 +1,86 @@ +# ====- HeaderFile 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 HeaderFile: + def __init__(self, name): + self.template_file = None + self.name = name + self.macros = [] + self.types = [] + self.enumerations = [] + self.objects = [] + self.functions = [] + + def add_macro(self, macro): + self.macros.append(macro) + + def add_type(self, type_): + self.types.append(type_) + + def add_enumeration(self, enumeration): + self.enumerations.append(enumeration) + + def add_object(self, object): + self.objects.append(object) + + def add_function(self, function): + self.functions.append(function) + + def public_api(self): + content = [""] + + for macro in self.macros: + content.append(f"{macro}\n") + + for type_ in self.types: + content.append(f"{type_}") + + if self.enumerations: + combined_enum_content = ",\n ".join( + str(enum) for enum in self.enumerations + ) + content.append(f"\nenum {{\n {combined_enum_content},\n}};") + + content.append("\n__BEGIN_C_DECLS\n") + + current_guard = None + for function in self.functions: + if function.guard == None: + content.append(str(function) + " __NOEXCEPT;") + content.append("") + else: + if current_guard == None: + current_guard = function.guard + content.append(f"#ifdef {current_guard}") + content.append(str(function) + " __NOEXCEPT;") + content.append("") + elif current_guard == function.guard: + content.append(str(function) + " __NOEXCEPT;") + content.append("") + else: + content.pop() + content.append(f"#endif // {current_guard}") + content.append("") + current_guard = function.guard + content.append(f"#ifdef {current_guard}") + content.append(str(function) + " __NOEXCEPT;") + content.append("") + if current_guard != None: + content.pop() + content.append(f"#endif // {current_guard}") + content.append("") + + for object in self.objects: + content.append(str(object)) + if self.objects: + content.append("\n__END_C_DECLS") + else: + content.append("__END_C_DECLS") + + return "\n".join(content) |