diff --git a/codegen/array/make_array.py b/codegen/array/make_array.py index eaaed02..d239ce3 100644 --- a/codegen/array/make_array.py +++ b/codegen/array/make_array.py @@ -219,16 +219,29 @@ def make_array(user_datatypes: Dict[CDataType, ArrayData] = {}): array_typename=array_data.array_typename, ), ) - array_pop_cppmacro = CMacro( - name=f"wapp_{type_string_lower}_array_pop(ARRAY_PTR)", - value=__format_func_body( - filename=snippets_dir / "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, - ), - ) + + 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( + name=f"wapp_{type_string_lower}_array_pop(ARRAY_PTR)", + value=__format_func_body( + filename=snippets_dir / "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, + ), + ) get_func = CFunc( name=f"wapp_{type_string_lower}_array_get", diff --git a/codegen/array/snippets/ptr_array_pop_macro_cpp b/codegen/array/snippets/ptr_array_pop_macro_cpp new file mode 100644 index 0000000..1f53416 --- /dev/null +++ b/codegen/array/snippets/ptr_array_pop_macro_cpp @@ -0,0 +1,4 @@ +(ARRAY_PTR != NULL && (ARRAY_PTR)->count > 0 ? \ + *_{Tlower}_array_pop(ARRAY_PTR) : \ + ({T})(0) \ +) diff --git a/src/primitives/array/array.h b/src/primitives/array/array.h index 90dfa79..ab6a6d3 100644 --- a/src/primitives/array/array.h +++ b/src/primitives/array/array.h @@ -51,7 +51,7 @@ BEGIN_C_LINKAGE }()) #define wapp_void_ptr_array_pop(ARRAY_PTR) (ARRAY_PTR != NULL && (ARRAY_PTR)->count > 0 ? \ *_void_ptr_array_pop(ARRAY_PTR) : \ - void *{} \ + (void *)(0) \ ) #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__}; \