1,615 changes: 815 additions & 800 deletions libc/newhdrgen/yaml/math.yaml

Large diffs are not rendered by default.

13 changes: 11 additions & 2 deletions libc/newhdrgen/yaml/sys_prctl.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
header: sys-prctl.h
standards: Linux
macros: []
types: []
enums: []
objects: []
functions: []
functions:
- name: prctl
standards:
- Linux
return_type: int
arguments:
- type: int
- type: unsigned long
- type: unsigned long
- type: unsigned long
- type: unsigned long
1 change: 0 additions & 1 deletion libc/newhdrgen/yaml/unistd.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -307,4 +307,3 @@ functions:
- type: const void *__restrict
- type: void *
- type: ssize_t

58 changes: 44 additions & 14 deletions libc/newhdrgen/yaml_to_classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ def yaml_to_classes(yaml_data):
for macro_data in yaml_data.get("macros", []):
header.add_macro(Macro(macro_data["macro_name"], macro_data["macro_value"]))

for type_data in yaml_data.get("types", []):
types = yaml_data.get("types", [])
sorted_types = sorted(types, key=lambda x: x["type_name"])
for type_data in sorted_types:
header.add_type(Type(type_data["type_name"]))

for enum_data in yaml_data.get("enums", []):
Expand All @@ -48,23 +50,51 @@ def yaml_to_classes(yaml_data):

functions = yaml_data.get("functions", [])
sorted_functions = sorted(functions, key=lambda x: x["name"])
guards = []
guarded_function_dict = {}
for function_data in sorted_functions:
arguments = [arg["type"] for arg in function_data["arguments"]]
guard = function_data.get("guard", None)
attributes = function_data.get("attributes", None)
standards = function_data.get("standards", None)
header.add_function(
Function(
function_data["return_type"],
function_data["name"],
arguments,
standards,
guard,
attributes,
if guard == None:
arguments = [arg["type"] for arg in function_data["arguments"]]
attributes = function_data.get("attributes", None)
standards = function_data.get("standards", None)
header.add_function(
Function(
function_data["return_type"],
function_data["name"],
arguments,
standards,
guard,
attributes,
)
)
else:
if guard not in guards:
guards.append(guard)
guarded_function_dict[guard] = []
guarded_function_dict[guard].append(function_data)
else:
guarded_function_dict[guard].append(function_data)
sorted_guards = sorted(guards)
for guard in sorted_guards:
for function_data in guarded_function_dict[guard]:
arguments = [arg["type"] for arg in function_data["arguments"]]
attributes = function_data.get("attributes", None)
standards = function_data.get("standards", None)
header.add_function(
Function(
function_data["return_type"],
function_data["name"],
arguments,
standards,
guard,
attributes,
)
)
)

for object_data in yaml_data.get("objects", []):
objects = yaml_data.get("objects", [])
sorted_objects = sorted(objects, key=lambda x: x["object_name"])
for object_data in sorted_objects:
header.add_object(
Object(object_data["object_name"], object_data["object_type"])
)
Expand Down