Fix array pop for C++ pointer types

This commit is contained in:
2025-11-08 20:45:41 +00:00
parent 0a00721c10
commit 1bdc1ad955
3 changed files with 28 additions and 11 deletions

View File

@@ -219,6 +219,19 @@ def make_array(user_datatypes: Dict[CDataType, ArrayData] = {}):
array_typename=array_data.array_typename, array_typename=array_data.array_typename,
), ),
) )
if "*" in type_string:
array_pop_cppmacro = CMacro(
name=f"wapp_{type_string_lower}_array_pop(ARRAY_PTR)",
value=__format_func_body(
filename=snippets_dir / "ptr_array_pop_macro_cpp",
type_string=type_string,
type_string_upper=type_string_upper,
type_string_lower=type_string_lower,
array_typename=array_data.array_typename,
),
)
else:
array_pop_cppmacro = CMacro( array_pop_cppmacro = CMacro(
name=f"wapp_{type_string_lower}_array_pop(ARRAY_PTR)", name=f"wapp_{type_string_lower}_array_pop(ARRAY_PTR)",
value=__format_func_body( value=__format_func_body(

View File

@@ -0,0 +1,4 @@
(ARRAY_PTR != NULL && (ARRAY_PTR)->count > 0 ? \
*_{Tlower}_array_pop(ARRAY_PTR) : \
({T})(0) \
)

View File

@@ -51,7 +51,7 @@ BEGIN_C_LINKAGE
}()) }())
#define wapp_void_ptr_array_pop(ARRAY_PTR) (ARRAY_PTR != NULL && (ARRAY_PTR)->count > 0 ? \ #define wapp_void_ptr_array_pop(ARRAY_PTR) (ARRAY_PTR != NULL && (ARRAY_PTR)->count > 0 ? \
*_void_ptr_array_pop(ARRAY_PTR) : \ *_void_ptr_array_pop(ARRAY_PTR) : \
void *{} \ (void *)(0) \
) )
#define wapp_str8_array(...) ([&]() { \ #define wapp_str8_array(...) ([&]() { \
wapp_persist Str8 buf[wapp_misc_utils_u64_round_up_pow2(wapp_misc_utils_va_args_count(Str8, __VA_ARGS__) * 2)] = {__VA_ARGS__}; \ wapp_persist Str8 buf[wapp_misc_utils_u64_round_up_pow2(wapp_misc_utils_va_args_count(Str8, __VA_ARGS__) * 2)] = {__VA_ARGS__}; \