Handle pointer types properly in dbl_list codegen

This commit is contained in:
Abdelrahman Said 2025-04-19 21:27:00 +01:00
parent 25395553d7
commit 1cfc52b35e

View File

@ -28,13 +28,20 @@ class DblListData:
def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
def __format_func_body(filename: Path, type_string: str, node_typename: str, list_typename: str):
def __format_func_body(
filename: Path,
type_string: str,
type_string_upper: str,
type_string_lower: str,
node_typename: str,
list_typename: str
):
return load_func_body_from_file(filename).format(
T=type_string,
NodeType=node_typename,
ListType=list_typename,
Tupper=type_string.upper(),
Tlower=type_string.lower(),
Tupper=type_string_upper,
Tlower=type_string_lower,
)
out_dir = WAPP_SRC_ROOT / "containers" / "dbl_list"
@ -89,6 +96,9 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
for _type, dbl_list_data in datatypes.items():
type_string = get_datatype_string(_type)
clean_type_string = type_string.replace(" ", "").replace("*", "_ptr")
type_string_upper = clean_type_string.upper()
type_string_lower = clean_type_string.lower()
node = CStruct(
name=dbl_list_data.node_typename,
@ -111,17 +121,19 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
)
node_macro = CMacro(
name=f"wapp_{type_string.lower()}_list_node(ITEM_PTR)",
name=f"wapp_{type_string_lower}_list_node(ITEM_PTR)",
value=__format_func_body(
filename=snippets_dir / "list_node",
type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename
),
)
get_func = CFunc(
name=f"wapp_{type_string.lower()}_list_get",
name=f"wapp_{type_string_lower}_list_get",
ret_type=node,
args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST),
@ -130,6 +142,8 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
body=__format_func_body(
filename=snippets_dir / "list_get",
type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename
),
@ -137,7 +151,7 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
)
push_front_func = CFunc(
name=f"wapp_{type_string.lower()}_list_push_front",
name=f"wapp_{type_string_lower}_list_push_front",
ret_type=CType.VOID,
args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)),
@ -146,13 +160,15 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
body=__format_func_body(
filename=snippets_dir / "list_push_front",
type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename
),
)
push_back_func = CFunc(
name=f"wapp_{type_string.lower()}_list_push_back",
name=f"wapp_{type_string_lower}_list_push_back",
ret_type=CType.VOID,
args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)),
@ -161,13 +177,15 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
body=__format_func_body(
filename=snippets_dir / "list_push_back",
type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename
),
)
insert_func = CFunc(
name=f"wapp_{type_string.lower()}_list_insert",
name=f"wapp_{type_string_lower}_list_insert",
ret_type=CType.VOID,
args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)),
@ -177,13 +195,15 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
body=__format_func_body(
filename=snippets_dir / "list_insert",
type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename
),
)
pop_front_func = CFunc(
name=f"wapp_{type_string.lower()}_list_pop_front",
name=f"wapp_{type_string_lower}_list_pop_front",
ret_type=node,
args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)),
@ -191,6 +211,8 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
body=__format_func_body(
filename=snippets_dir / "list_pop_front",
type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename
),
@ -198,7 +220,7 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
)
pop_back_func = CFunc(
name=f"wapp_{type_string.lower()}_list_pop_back",
name=f"wapp_{type_string_lower}_list_pop_back",
ret_type=node,
args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)),
@ -206,6 +228,8 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
body=__format_func_body(
filename=snippets_dir / "list_pop_back",
type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename
),
@ -213,7 +237,7 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
)
remove_func = CFunc(
name=f"wapp_{type_string.lower()}_list_remove",
name=f"wapp_{type_string_lower}_list_remove",
ret_type=node,
args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)),
@ -222,6 +246,8 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
body=__format_func_body(
filename=snippets_dir / "list_remove",
type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename
),
@ -229,7 +255,7 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
)
empty_func = CFunc(
name=f"wapp_{type_string.lower()}_list_empty",
name=f"wapp_{type_string_lower}_list_empty",
ret_type=CType.VOID,
args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)),
@ -237,13 +263,15 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
body=__format_func_body(
filename=snippets_dir / "list_empty",
type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename
),
)
node_to_list_func = CFunc(
name=f"{type_string.lower()}_node_to_list",
name=f"{type_string_lower}_node_to_list",
ret_type=dl_list,
args=[
CArg(name="node", _type=node, pointer=CPointer(CPointerType.SINGLE)),
@ -251,6 +279,8 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
body=__format_func_body(
filename=snippets_dir / "node_to_list",
type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename
),