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 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( return load_func_body_from_file(filename).format(
T=type_string, T=type_string,
NodeType=node_typename, NodeType=node_typename,
ListType=list_typename, ListType=list_typename,
Tupper=type_string.upper(), Tupper=type_string_upper,
Tlower=type_string.lower(), Tlower=type_string_lower,
) )
out_dir = WAPP_SRC_ROOT / "containers" / "dbl_list" 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(): for _type, dbl_list_data in datatypes.items():
type_string = get_datatype_string(_type) 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( node = CStruct(
name=dbl_list_data.node_typename, name=dbl_list_data.node_typename,
@ -111,17 +121,19 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
) )
node_macro = CMacro( 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( value=__format_func_body(
filename=snippets_dir / "list_node", filename=snippets_dir / "list_node",
type_string=type_string, type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename, node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename list_typename=dbl_list_data.list_typename
), ),
) )
get_func = CFunc( get_func = CFunc(
name=f"wapp_{type_string.lower()}_list_get", name=f"wapp_{type_string_lower}_list_get",
ret_type=node, ret_type=node,
args=[ args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), 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( body=__format_func_body(
filename=snippets_dir / "list_get", filename=snippets_dir / "list_get",
type_string=type_string, type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename, node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_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( 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, ret_type=CType.VOID,
args=[ args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)), 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( body=__format_func_body(
filename=snippets_dir / "list_push_front", filename=snippets_dir / "list_push_front",
type_string=type_string, type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename, node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename list_typename=dbl_list_data.list_typename
), ),
) )
push_back_func = CFunc( 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, ret_type=CType.VOID,
args=[ args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)), 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( body=__format_func_body(
filename=snippets_dir / "list_push_back", filename=snippets_dir / "list_push_back",
type_string=type_string, type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename, node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename list_typename=dbl_list_data.list_typename
), ),
) )
insert_func = CFunc( insert_func = CFunc(
name=f"wapp_{type_string.lower()}_list_insert", name=f"wapp_{type_string_lower}_list_insert",
ret_type=CType.VOID, ret_type=CType.VOID,
args=[ args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)), 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( body=__format_func_body(
filename=snippets_dir / "list_insert", filename=snippets_dir / "list_insert",
type_string=type_string, type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename, node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename list_typename=dbl_list_data.list_typename
), ),
) )
pop_front_func = CFunc( 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, ret_type=node,
args=[ args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)), 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( body=__format_func_body(
filename=snippets_dir / "list_pop_front", filename=snippets_dir / "list_pop_front",
type_string=type_string, type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename, node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_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( 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, ret_type=node,
args=[ args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)), 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( body=__format_func_body(
filename=snippets_dir / "list_pop_back", filename=snippets_dir / "list_pop_back",
type_string=type_string, type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename, node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename list_typename=dbl_list_data.list_typename
), ),
@ -213,7 +237,7 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
) )
remove_func = CFunc( remove_func = CFunc(
name=f"wapp_{type_string.lower()}_list_remove", name=f"wapp_{type_string_lower}_list_remove",
ret_type=node, ret_type=node,
args=[ args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)), 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( body=__format_func_body(
filename=snippets_dir / "list_remove", filename=snippets_dir / "list_remove",
type_string=type_string, type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename, node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename list_typename=dbl_list_data.list_typename
), ),
@ -229,7 +255,7 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}):
) )
empty_func = CFunc( empty_func = CFunc(
name=f"wapp_{type_string.lower()}_list_empty", name=f"wapp_{type_string_lower}_list_empty",
ret_type=CType.VOID, ret_type=CType.VOID,
args=[ args=[
CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)), 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( body=__format_func_body(
filename=snippets_dir / "list_empty", filename=snippets_dir / "list_empty",
type_string=type_string, type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename, node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename list_typename=dbl_list_data.list_typename
), ),
) )
node_to_list_func = CFunc( 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, ret_type=dl_list,
args=[ args=[
CArg(name="node", _type=node, pointer=CPointer(CPointerType.SINGLE)), 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( body=__format_func_body(
filename=snippets_dir / "node_to_list", filename=snippets_dir / "node_to_list",
type_string=type_string, type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
node_typename=dbl_list_data.node_typename, node_typename=dbl_list_data.node_typename,
list_typename=dbl_list_data.list_typename list_typename=dbl_list_data.list_typename
), ),