# ====- 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)