From 8dbdfa20945447f87c39f912006dea11fba10131 Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Sat, 19 Apr 2025 20:54:04 +0100 Subject: [PATCH] Update dbl_list codegen --- codegen/dbl_list/make_dbl_list.py | 79 +++++++++++++++++++---- codegen/dbl_list/snippets/list_get | 4 +- codegen/dbl_list/snippets/list_insert | 6 +- codegen/dbl_list/snippets/list_node | 2 +- codegen/dbl_list/snippets/list_pop_back | 4 +- codegen/dbl_list/snippets/list_pop_front | 4 +- codegen/dbl_list/snippets/list_push_back | 4 +- codegen/dbl_list/snippets/list_push_front | 4 +- codegen/dbl_list/snippets/list_remove | 2 +- codegen/dbl_list/snippets/node_to_list | 2 +- 10 files changed, 83 insertions(+), 28 deletions(-) diff --git a/codegen/dbl_list/make_dbl_list.py b/codegen/dbl_list/make_dbl_list.py index e7f9111..9c7c779 100644 --- a/codegen/dbl_list/make_dbl_list.py +++ b/codegen/dbl_list/make_dbl_list.py @@ -21,15 +21,18 @@ from codegen.datatypes import ( @dataclass class DblListData: + node_typename: str + list_typename: str hdr_decl_types: list[CStruct] = field(default_factory=list) src_decl_types: list[CStruct] = field(default_factory=list) def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}): - def __format_func_body(filename: Path, type_string: str): + def __format_func_body(filename: Path, type_string: str, node_typename: str, list_typename: str): return load_func_body_from_file(filename).format( T=type_string, - Ttitle=type_string.title(), + NodeType=node_typename, + ListType=list_typename, Tupper=type_string.upper(), Tlower=type_string.lower(), ) @@ -53,6 +56,8 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}): datatypes: dict[CDataType, DblListData] = { "Str8": DblListData( + node_typename="Str8Node", + list_typename="Str8List", hdr_decl_types=[ CStruct(name="str8", cargs=[], typedef_name="Str8"), ], @@ -107,7 +112,12 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}): node_macro = CMacro( name=f"wapp_{type_string.lower()}_list_node(ITEM_PTR)", - value=__format_func_body(snippets_dir / "list_node", type_string), + value=__format_func_body( + filename=snippets_dir / "list_node", + type_string=type_string, + node_typename=dbl_list_data.node_typename, + list_typename=dbl_list_data.list_typename + ), ) get_func = CFunc( @@ -117,7 +127,12 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}): CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE), qualifier=CQualifier.CONST), CArg(name="index", _type=CType.U64), ], - body=__format_func_body(snippets_dir / "list_get", type_string), + body=__format_func_body( + filename=snippets_dir / "list_get", + type_string=type_string, + node_typename=dbl_list_data.node_typename, + list_typename=dbl_list_data.list_typename + ), pointer=CPointer(CPointerType.SINGLE), ) @@ -128,7 +143,12 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}): CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)), CArg(name="node", _type=node, pointer=CPointer(CPointerType.SINGLE)), ], - body=__format_func_body(snippets_dir / "list_push_front", type_string), + body=__format_func_body( + filename=snippets_dir / "list_push_front", + type_string=type_string, + node_typename=dbl_list_data.node_typename, + list_typename=dbl_list_data.list_typename + ), ) push_back_func = CFunc( @@ -138,7 +158,12 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}): CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)), CArg(name="node", _type=node, pointer=CPointer(CPointerType.SINGLE)), ], - body=__format_func_body(snippets_dir / "list_push_back", type_string), + body=__format_func_body( + filename=snippets_dir / "list_push_back", + type_string=type_string, + node_typename=dbl_list_data.node_typename, + list_typename=dbl_list_data.list_typename + ), ) insert_func = CFunc( @@ -149,7 +174,12 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}): CArg(name="node", _type=node, pointer=CPointer(CPointerType.SINGLE)), CArg(name="index", _type=CType.U64), ], - body=__format_func_body(snippets_dir / "list_insert", type_string), + body=__format_func_body( + filename=snippets_dir / "list_insert", + type_string=type_string, + node_typename=dbl_list_data.node_typename, + list_typename=dbl_list_data.list_typename + ), ) pop_front_func = CFunc( @@ -158,7 +188,12 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}): args=[ CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)), ], - body=__format_func_body(snippets_dir / "list_pop_front", type_string), + body=__format_func_body( + filename=snippets_dir / "list_pop_front", + type_string=type_string, + node_typename=dbl_list_data.node_typename, + list_typename=dbl_list_data.list_typename + ), pointer=CPointer(CPointerType.SINGLE), ) @@ -168,7 +203,12 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}): args=[ CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)), ], - body=__format_func_body(snippets_dir / "list_pop_back", type_string), + body=__format_func_body( + filename=snippets_dir / "list_pop_back", + type_string=type_string, + node_typename=dbl_list_data.node_typename, + list_typename=dbl_list_data.list_typename + ), pointer=CPointer(CPointerType.SINGLE), ) @@ -179,7 +219,12 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}): CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)), CArg(name="index", _type=CType.U64), ], - body=__format_func_body(snippets_dir / "list_remove", type_string), + body=__format_func_body( + filename=snippets_dir / "list_remove", + type_string=type_string, + node_typename=dbl_list_data.node_typename, + list_typename=dbl_list_data.list_typename + ), pointer=CPointer(CPointerType.SINGLE), ) @@ -189,7 +234,12 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}): args=[ CArg(name="list", _type=dl_list, pointer=CPointer(CPointerType.SINGLE)), ], - body=__format_func_body(snippets_dir / "list_empty", type_string), + body=__format_func_body( + filename=snippets_dir / "list_empty", + type_string=type_string, + node_typename=dbl_list_data.node_typename, + list_typename=dbl_list_data.list_typename + ), ) node_to_list_func = CFunc( @@ -198,7 +248,12 @@ def make_dbl_list(user_datatypes: dict[CDataType, DblListData] = {}): args=[ CArg(name="node", _type=node, pointer=CPointer(CPointerType.SINGLE)), ], - body=__format_func_body(snippets_dir / "node_to_list", type_string), + body=__format_func_body( + filename=snippets_dir / "node_to_list", + type_string=type_string, + node_typename=dbl_list_data.node_typename, + list_typename=dbl_list_data.list_typename + ), qualifiers=[CQualifier.INTERNAL], ) diff --git a/codegen/dbl_list/snippets/list_get b/codegen/dbl_list/snippets/list_get index 0fde3ac..54b394f 100644 --- a/codegen/dbl_list/snippets/list_get +++ b/codegen/dbl_list/snippets/list_get @@ -2,8 +2,8 @@ return NULL; }} - {Ttitle}Node *output = NULL; - {Ttitle}Node *current = list->first; + {NodeType} *output = NULL; + {NodeType} *current = list->first; for (u64 i = 1; i <= index; ++i) {{ current = current->next; }} diff --git a/codegen/dbl_list/snippets/list_insert b/codegen/dbl_list/snippets/list_insert index 5ae0d84..57e9661 100644 --- a/codegen/dbl_list/snippets/list_insert +++ b/codegen/dbl_list/snippets/list_insert @@ -10,16 +10,16 @@ return; }} - {Ttitle}Node *dst_node = wapp_{Tlower}_list_get(list, index); + {NodeType} *dst_node = wapp_{Tlower}_list_get(list, index); if (!dst_node) {{ return; }} - {Ttitle}List node_list = {Tlower}_node_to_list(node); + {ListType} node_list = {Tlower}_node_to_list(node); list->node_count += node_list.node_count; - {Ttitle}Node *prev = dst_node->prev; + {NodeType} *prev = dst_node->prev; dst_node->prev = node_list.last; prev->next = node_list.first; diff --git a/codegen/dbl_list/snippets/list_node b/codegen/dbl_list/snippets/list_node index b689b0e..3eec148 100644 --- a/codegen/dbl_list/snippets/list_node +++ b/codegen/dbl_list/snippets/list_node @@ -1 +1 @@ -(({Ttitle}Node){{.item = ITEM_PTR}}) +(({NodeType}){{.item = ITEM_PTR}}) diff --git a/codegen/dbl_list/snippets/list_pop_back b/codegen/dbl_list/snippets/list_pop_back index 849136d..82be11e 100644 --- a/codegen/dbl_list/snippets/list_pop_back +++ b/codegen/dbl_list/snippets/list_pop_back @@ -1,4 +1,4 @@ - {Ttitle}Node *output = NULL; + {NodeType} *output = NULL; if (!list || list->node_count == 0) {{ goto RETURN_{Tupper}_LIST_POP_BACK; @@ -7,7 +7,7 @@ output = list->last; if (list->node_count == 1) {{ - *list = ({Ttitle}List){{0}}; + *list = ({ListType}){{0}}; goto RETURN_{Tupper}_LIST_POP_BACK; }} diff --git a/codegen/dbl_list/snippets/list_pop_front b/codegen/dbl_list/snippets/list_pop_front index 8770e3f..aea490e 100644 --- a/codegen/dbl_list/snippets/list_pop_front +++ b/codegen/dbl_list/snippets/list_pop_front @@ -1,4 +1,4 @@ - {Ttitle}Node *output = NULL; + {NodeType} *output = NULL; if (!list || list->node_count == 0) {{ goto RETURN_{Tupper}_LIST_POP_FRONT; @@ -7,7 +7,7 @@ output = list->first; if (list->node_count == 1) {{ - *list = ({Ttitle}List){{0}}; + *list = ({ListType}){{0}}; goto RETURN_{Tupper}_LIST_POP_FRONT; }} diff --git a/codegen/dbl_list/snippets/list_push_back b/codegen/dbl_list/snippets/list_push_back index 35abf52..1a0ed00 100644 --- a/codegen/dbl_list/snippets/list_push_back +++ b/codegen/dbl_list/snippets/list_push_back @@ -2,7 +2,7 @@ return; }} - {Ttitle}List node_list = {Tlower}_node_to_list(node); + {ListType} node_list = {Tlower}_node_to_list(node); if (list->node_count == 0) {{ *list = node_list; @@ -11,7 +11,7 @@ list->node_count += node_list.node_count; - {Ttitle}Node *last = list->last; + {NodeType} *last = list->last; if (last) {{ last->next = node_list.first; }} diff --git a/codegen/dbl_list/snippets/list_push_front b/codegen/dbl_list/snippets/list_push_front index f021cfc..f9031d6 100644 --- a/codegen/dbl_list/snippets/list_push_front +++ b/codegen/dbl_list/snippets/list_push_front @@ -2,7 +2,7 @@ return; }} - {Ttitle}List node_list = {Tlower}_node_to_list(node); + {ListType} node_list = {Tlower}_node_to_list(node); if (list->node_count == 0) {{ *list = node_list; @@ -11,7 +11,7 @@ list->node_count += node_list.node_count; - {Ttitle}Node *first = list->first; + {NodeType} *first = list->first; if (first) {{ first->prev = node_list.last; }} diff --git a/codegen/dbl_list/snippets/list_remove b/codegen/dbl_list/snippets/list_remove index 611729a..8e7532e 100644 --- a/codegen/dbl_list/snippets/list_remove +++ b/codegen/dbl_list/snippets/list_remove @@ -1,4 +1,4 @@ - {Ttitle}Node *output = NULL; + {NodeType} *output = NULL; if (!list) {{ goto RETURN_{Tupper}_LIST_REMOVE; }} diff --git a/codegen/dbl_list/snippets/node_to_list b/codegen/dbl_list/snippets/node_to_list index b47d7e5..bc8ed05 100644 --- a/codegen/dbl_list/snippets/node_to_list +++ b/codegen/dbl_list/snippets/node_to_list @@ -1,4 +1,4 @@ - {Ttitle}List output = {{.first = node, .last = node, .node_count = 1}}; + {ListType} output = {{.first = node, .last = node, .node_count = 1}}; while (output.first->prev != NULL) {{ output.first = output.first->prev;