From eee4387201d142524532dd776ebedfe949fae76b Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Sun, 10 Aug 2025 15:06:21 +0100 Subject: [PATCH] Update dbl_list to add C++ specific macros --- codegen/datatypes.py | 11 +++++++++++ codegen/dbl_list/make_dbl_list.py | 17 +++++++++++++++-- codegen/dbl_list/snippets/list_node_cpp | 1 + src/primitives/dbl_list/dbl_list.h | 23 +++++++++++++++++++++++ 4 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 codegen/dbl_list/snippets/list_node_cpp diff --git a/codegen/datatypes.py b/codegen/datatypes.py index 64e6e13..2641022 100644 --- a/codegen/datatypes.py +++ b/codegen/datatypes.py @@ -211,6 +211,8 @@ class CFile: funcs: List[CFunc] = field(default_factory=list) decl_types: List[CStruct] = field(default_factory=list) macros: List[CMacro] = field(default_factory=list) + c_macros: List[CMacro] = field(default_factory=list) + cpp_macros: List[CMacro] = field(default_factory=list) def save(self, output_dir: Path): self.includes.extend( @@ -259,6 +261,15 @@ class CHeader(CFile): if len(macros) > 0: macros += "\n" + if len(self.cpp_macros) > 0: + macros += "#ifdef WAPP_PLATFORM_CPP\n" + for macro in self.cpp_macros: + macros += str(macro) + macros += "#else\n" + for macro in self.c_macros: + macros += str(macro) + macros += "#endif // !WAPP_PLATFORM_CPP\n\n" + forward_declarations = "" for _type in self.decl_types: forward_declarations += _type.declare() diff --git a/codegen/dbl_list/make_dbl_list.py b/codegen/dbl_list/make_dbl_list.py index 2f169d5..8eaa96f 100644 --- a/codegen/dbl_list/make_dbl_list.py +++ b/codegen/dbl_list/make_dbl_list.py @@ -139,7 +139,7 @@ def make_dbl_list(user_datatypes: Dict[CDataType, DblListData] = {}): ], ) - node_macro = CMacro( + node_cmacro = CMacro( name=f"wapp_{type_string_lower}_list_node(ITEM_PTR)", value=__format_func_body( filename=snippets_dir / "list_node", @@ -151,6 +151,18 @@ def make_dbl_list(user_datatypes: Dict[CDataType, DblListData] = {}): ), ) + node_cppmacro = CMacro( + name=f"wapp_{type_string_lower}_list_node(ITEM_PTR)", + value=__format_func_body( + filename=snippets_dir / "list_node_cpp", + 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", ret_type=node, @@ -307,7 +319,8 @@ def make_dbl_list(user_datatypes: Dict[CDataType, DblListData] = {}): ) header.decl_types.extend(dbl_list_data.hdr_decl_types) - header.macros.append(node_macro) + header.c_macros.append(node_cmacro) + header.cpp_macros.append(node_cppmacro) header.types.extend([node, dl_list]) header.funcs.extend([ get_func, diff --git a/codegen/dbl_list/snippets/list_node_cpp b/codegen/dbl_list/snippets/list_node_cpp new file mode 100644 index 0000000..c753803 --- /dev/null +++ b/codegen/dbl_list/snippets/list_node_cpp @@ -0,0 +1 @@ +{NodeType}{{ITEM_PTR, nullptr, nullptr}} diff --git a/src/primitives/dbl_list/dbl_list.h b/src/primitives/dbl_list/dbl_list.h index a08a3e2..80f3eae 100644 --- a/src/primitives/dbl_list/dbl_list.h +++ b/src/primitives/dbl_list/dbl_list.h @@ -13,6 +13,28 @@ BEGIN_C_LINKAGE #endif // !WAPP_PLATFORM_CPP +#ifdef WAPP_PLATFORM_CPP +#define wapp_str8_list_node(ITEM_PTR) Str8Node{ITEM_PTR, nullptr, nullptr} +#define wapp_void_ptr_list_node(ITEM_PTR) VoidPNode{ITEM_PTR, nullptr, nullptr} +#define wapp_b32_list_node(ITEM_PTR) B32Node{ITEM_PTR, nullptr, nullptr} +#define wapp_char_list_node(ITEM_PTR) CharNode{ITEM_PTR, nullptr, nullptr} +#define wapp_c8_list_node(ITEM_PTR) C8Node{ITEM_PTR, nullptr, nullptr} +#define wapp_c16_list_node(ITEM_PTR) C16Node{ITEM_PTR, nullptr, nullptr} +#define wapp_c32_list_node(ITEM_PTR) C32Node{ITEM_PTR, nullptr, nullptr} +#define wapp_i8_list_node(ITEM_PTR) I8Node{ITEM_PTR, nullptr, nullptr} +#define wapp_i16_list_node(ITEM_PTR) I16Node{ITEM_PTR, nullptr, nullptr} +#define wapp_i32_list_node(ITEM_PTR) I32Node{ITEM_PTR, nullptr, nullptr} +#define wapp_i64_list_node(ITEM_PTR) I64Node{ITEM_PTR, nullptr, nullptr} +#define wapp_u8_list_node(ITEM_PTR) U8Node{ITEM_PTR, nullptr, nullptr} +#define wapp_u16_list_node(ITEM_PTR) U16Node{ITEM_PTR, nullptr, nullptr} +#define wapp_u32_list_node(ITEM_PTR) U32Node{ITEM_PTR, nullptr, nullptr} +#define wapp_u64_list_node(ITEM_PTR) U64Node{ITEM_PTR, nullptr, nullptr} +#define wapp_f32_list_node(ITEM_PTR) F32Node{ITEM_PTR, nullptr, nullptr} +#define wapp_f64_list_node(ITEM_PTR) F64Node{ITEM_PTR, nullptr, nullptr} +#define wapp_f128_list_node(ITEM_PTR) F128Node{ITEM_PTR, nullptr, nullptr} +#define wapp_iptr_list_node(ITEM_PTR) IptrNode{ITEM_PTR, nullptr, nullptr} +#define wapp_uptr_list_node(ITEM_PTR) UptrNode{ITEM_PTR, nullptr, nullptr} +#else #define wapp_str8_list_node(ITEM_PTR) ((Str8Node){.item = ITEM_PTR}) #define wapp_void_ptr_list_node(ITEM_PTR) ((VoidPNode){.item = ITEM_PTR}) #define wapp_b32_list_node(ITEM_PTR) ((B32Node){.item = ITEM_PTR}) @@ -33,6 +55,7 @@ BEGIN_C_LINKAGE #define wapp_f128_list_node(ITEM_PTR) ((F128Node){.item = ITEM_PTR}) #define wapp_iptr_list_node(ITEM_PTR) ((IptrNode){.item = ITEM_PTR}) #define wapp_uptr_list_node(ITEM_PTR) ((UptrNode){.item = ITEM_PTR}) +#endif // !WAPP_PLATFORM_CPP typedef struct str8 Str8;