From 9689062f6c73516a798b72588bfe4189ca4bf696 Mon Sep 17 00:00:00 2001 From: Emil Sjolander Date: Tue, 2 Aug 2016 08:07:11 -0700 Subject: [PATCH] Implement custom assert macro Summary: assert.h assertion gets stripped from builds. I don't want these assertions to be stripped so implement a custom assert macro. This also allows the assertion to be documented with a message. Reviewed By: javache Differential Revision: D3648805 fbshipit-source-id: a6bf1bb55e1e0ee37284647ab76d66f3956a66c0 --- CSSLayout/CSSLayout.c | 9 ++++----- CSSLayout/CSSMacros.h | 14 ++++++++++++++ CSSLayout/CSSNodeList.c | 6 +++--- CSSLayout/CSSNodeList.h | 1 + 4 files changed, 22 insertions(+), 8 deletions(-) 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