1 /**
2  * @file lv_assert.h
3  *
4  */
5 
6 #ifndef LV_ASSERT_H
7 #define LV_ASSERT_H
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 /*********************
14  *      INCLUDES
15  *********************/
16 #include "../lv_conf_internal.h"
17 #include "lv_log.h"
18 #include "../stdlib/lv_mem.h"
19 #include LV_ASSERT_HANDLER_INCLUDE
20 
21 /*********************
22  *      DEFINES
23  *********************/
24 
25 /**********************
26  *      TYPEDEFS
27  **********************/
28 
29 /**********************
30  * GLOBAL PROTOTYPES
31  **********************/
32 
33 /**********************
34  *      MACROS
35  **********************/
36 
37 #define LV_ASSERT(expr)                                        \
38     do {                                                       \
39         if(!(expr)) {                                          \
40             LV_LOG_ERROR("Asserted at expression: %s", #expr); \
41             LV_ASSERT_HANDLER                                  \
42         }                                                      \
43     } while(0)
44 
45 #define LV_ASSERT_MSG(expr, msg)                                         \
46     do {                                                                 \
47         if(!(expr)) {                                                    \
48             LV_LOG_ERROR("Asserted at expression: %s (%s)", #expr, msg); \
49             LV_ASSERT_HANDLER                                            \
50         }                                                                \
51     } while(0)
52 
53 #define LV_ASSERT_FORMAT_MSG(expr, format, ...)                                         \
54     do {                                                                                \
55         if(!(expr)) {                                                                   \
56             LV_LOG_ERROR("Asserted at expression: %s " format , #expr, __VA_ARGS__);    \
57             LV_ASSERT_HANDLER                                                           \
58         }                                                                               \
59     } while(0)
60 
61 /*-----------------
62  * ASSERTS
63  *-----------------*/
64 
65 #if LV_USE_ASSERT_NULL
66 #   define LV_ASSERT_NULL(p) LV_ASSERT_MSG(p != NULL, "NULL pointer");
67 #else
68 #   define LV_ASSERT_NULL(p)
69 #endif
70 
71 #if LV_USE_ASSERT_MALLOC
72 #   define LV_ASSERT_MALLOC(p) LV_ASSERT_MSG(p != NULL, "Out of memory");
73 #else
74 #   define LV_ASSERT_MALLOC(p)
75 #endif
76 
77 #if LV_USE_ASSERT_MEM_INTEGRITY
78 #   define LV_ASSERT_MEM_INTEGRITY() LV_ASSERT_MSG(lv_mem_test() == LV_RESULT_OK, "Memory integrity error");
79 #else
80 #   define LV_ASSERT_MEM_INTEGRITY()
81 #endif
82 
83 #ifdef __cplusplus
84 } /*extern "C"*/
85 #endif
86 
87 #endif /*LV_ASSERT_H*/
88