diff --git a/CSSLayout/CSSLayout.c b/CSSLayout/CSSLayout.c index 8e4f5c96..31b752e4 100644 --- a/CSSLayout/CSSLayout.c +++ b/CSSLayout/CSSLayout.c @@ -27,7 +27,7 @@ __forceinline const float fmaxf(const float a, const float b) { CSSNodeRef CSSNodeNew() { CSSNodeRef node = calloc(1, sizeof(CSSNode)); - assert(node != NULL); + CSS_ASSERT(node != NULL, "Could not allocate memory for node"); CSSNodeInit(node); return node; @@ -119,8 +119,7 @@ uint32_t CSSNodeChildCount(CSSNodeRef node) { } void CSSNodeMarkDirty(CSSNodeRef node) { - // Nodes without custom measure functions should not manually mark themselves as dirty - assert(node->measure != NULL); + CSS_ASSERT(node->measure != NULL, "Nodes without custom measure functions should not manually mark themselves as dirty"); _CSSNodeMarkDirty(node); } @@ -794,8 +793,8 @@ static void setPosition(CSSNode* node, CSSDirection direction) { static void layoutNodeImpl(CSSNode* node, float availableWidth, float availableHeight, CSSDirection parentDirection, CSSMeasureMode widthMeasureMode, CSSMeasureMode heightMeasureMode, bool performLayout) { - assert(isUndefined(availableWidth) ? widthMeasureMode == CSSMeasureModeUndefined : true); // availableWidth is indefinite so widthMeasureMode must be CSSMeasureModeUndefined - assert(isUndefined(availableHeight) ? heightMeasureMode == CSSMeasureModeUndefined : true); // availableHeight is indefinite so heightMeasureMode must be CSSMeasureModeUndefined + CSS_ASSERT(isUndefined(availableWidth) ? widthMeasureMode == CSSMeasureModeUndefined : true, "availableWidth is indefinite so widthMeasureMode must be CSSMeasureModeUndefined"); + CSS_ASSERT(isUndefined(availableHeight) ? heightMeasureMode == CSSMeasureModeUndefined : true, "availableHeight is indefinite so heightMeasureMode must be CSSMeasureModeUndefined"); float paddingAndBorderAxisRow = getPaddingAndBorderAxis(node, CSSFlexDirectionRow); float paddingAndBorderAxisColumn = getPaddingAndBorderAxis(node, CSSFlexDirectionColumn); diff --git a/CSSLayout/CSSMacros.h b/CSSLayout/CSSMacros.h index 1cf88202..abd0bba4 100644 --- a/CSSLayout/CSSMacros.h +++ b/CSSLayout/CSSMacros.h @@ -16,3 +16,17 @@ # define CSS_EXTERN_C_BEGIN # define CSS_EXTERN_C_END #endif + +#ifndef FB_ASSERTIONS_ENABLED +#define FB_ASSERTIONS_ENABLED 1 +#endif + +#if !(FB_ASSERTIONS_ENABLED) +#define abort() +#endif + +#define CSS_ASSERT(X, message) \ +if (!(X)) { \ + fprintf(stderr, "%s\n", message); \ + abort(); \ +} diff --git a/CSSLayout/CSSNodeList.c b/CSSLayout/CSSNodeList.c index 0daf3421..dd113834 100644 --- a/CSSLayout/CSSNodeList.c +++ b/CSSLayout/CSSNodeList.c @@ -17,12 +17,12 @@ struct CSSNodeList { CSSNodeListRef CSSNodeListNew(uint32_t initialCapacity) { CSSNodeListRef list = malloc(sizeof(struct CSSNodeList)); - assert(list != NULL); + CSS_ASSERT(list != NULL, "Could not allocate memory for list"); list->capacity = initialCapacity; list->count = 0; list->items = malloc(sizeof(void*) * list->capacity); - assert(list->items != NULL); + CSS_ASSERT(list->items != NULL, "Could not allocate memory for items"); return list; } @@ -43,7 +43,7 @@ void CSSNodeListInsert(CSSNodeListRef list, CSSNodeRef node, uint32_t index) { if (list->count == list->capacity) { list->capacity *= 2; list->items = realloc(list->items, sizeof(void*) * list->capacity); - assert(list->items != NULL); + CSS_ASSERT(list->items != NULL, "Could not extend allocation for items"); } for (uint32_t i = list->count; i > index; i--) { diff --git a/CSSLayout/CSSNodeList.h b/CSSLayout/CSSNodeList.h index d6904efb..f74376cb 100644 --- a/CSSLayout/CSSNodeList.h +++ b/CSSLayout/CSSNodeList.h @@ -15,6 +15,7 @@ #include #include +#include CSS_EXTERN_C_BEGIN