Reintroduce C++ support and add usage tests for C++ #4
@ -211,6 +211,8 @@ class CFile:
|
|||||||
funcs: List[CFunc] = field(default_factory=list)
|
funcs: List[CFunc] = field(default_factory=list)
|
||||||
decl_types: List[CStruct] = field(default_factory=list)
|
decl_types: List[CStruct] = field(default_factory=list)
|
||||||
macros: List[CMacro] = 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):
|
def save(self, output_dir: Path):
|
||||||
self.includes.extend(
|
self.includes.extend(
|
||||||
@ -259,6 +261,15 @@ class CHeader(CFile):
|
|||||||
if len(macros) > 0:
|
if len(macros) > 0:
|
||||||
macros += "\n"
|
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 = ""
|
forward_declarations = ""
|
||||||
for _type in self.decl_types:
|
for _type in self.decl_types:
|
||||||
forward_declarations += _type.declare()
|
forward_declarations += _type.declare()
|
||||||
|
@ -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)",
|
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",
|
||||||
@ -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(
|
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,
|
||||||
@ -307,7 +319,8 @@ def make_dbl_list(user_datatypes: Dict[CDataType, DblListData] = {}):
|
|||||||
)
|
)
|
||||||
|
|
||||||
header.decl_types.extend(dbl_list_data.hdr_decl_types)
|
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.types.extend([node, dl_list])
|
||||||
header.funcs.extend([
|
header.funcs.extend([
|
||||||
get_func,
|
get_func,
|
||||||
|
1
codegen/dbl_list/snippets/list_node_cpp
Normal file
1
codegen/dbl_list/snippets/list_node_cpp
Normal file
@ -0,0 +1 @@
|
|||||||
|
{NodeType}{{ITEM_PTR, nullptr, nullptr}}
|
@ -13,6 +13,28 @@
|
|||||||
BEGIN_C_LINKAGE
|
BEGIN_C_LINKAGE
|
||||||
#endif // !WAPP_PLATFORM_CPP
|
#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_str8_list_node(ITEM_PTR) ((Str8Node){.item = ITEM_PTR})
|
||||||
#define wapp_void_ptr_list_node(ITEM_PTR) ((VoidPNode){.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})
|
#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_f128_list_node(ITEM_PTR) ((F128Node){.item = ITEM_PTR})
|
||||||
#define wapp_iptr_list_node(ITEM_PTR) ((IptrNode){.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})
|
#define wapp_uptr_list_node(ITEM_PTR) ((UptrNode){.item = ITEM_PTR})
|
||||||
|
#endif // !WAPP_PLATFORM_CPP
|
||||||
|
|
||||||
typedef struct str8 Str8;
|
typedef struct str8 Str8;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user