| /** @file | |
| Provides a definition of the assert macro used to insert diagnostic messages | |
| into code. | |
| This header file defines the assert macro and refers to the NDEBUG macro, | |
| which is NOT defined in this file. | |
| Unlike other header files, assert.h is designed to be included multiple | |
| times, with potentially different behavior on each inclusion. | |
| If the NDEBUG macro is defined at the point where assert.h | |
| is included, the assert macro is defined so as to not produce code. | |
| Otherwise, the assertion is tested and if the assertion is FALSE | |
| (e.g. evaluates to 0) a diagnostic message of the form<BR> | |
| "Assertion failed: (EXPR), file FILE, function FUNC, line LINE.\n"<BR> | |
| is produced. | |
| A FALSE evaluation will also result in the application being aborted. | |
| Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials are licensed and made available under | |
| the terms and conditions of the BSD License that accompanies this distribution. | |
| The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license. | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #include <sys/EfiCdefs.h> | |
| #undef assert ///< Remove any existing definition for assert. | |
| /** Internal helper function for the assert macro. | |
| The __assert function prints a diagnostic message then exits the | |
| currently running application. | |
| This function should NEVER be called directly. | |
| Some pre-processors do not provide the __func__ identifier. When that is | |
| the case, __func__ will be NULL. This function accounts for this and | |
| will modify the diagnostic message appropriately. | |
| @param[in] file The name of the file containing the assert. | |
| @param[in] func The name of the function containing the assert. | |
| @param[in] line The line number the assert is located on. | |
| @param[in] failedexpr A literal representation of the assert's expression. | |
| @return The __assert function will never return. It aborts the | |
| current application and returns to the environment that | |
| the application was launched from. | |
| **/ | |
| extern void | |
| __assert(const char *file, const char *func, int line, const char *failedexpr); | |
| /** The assert macro puts diagnostic tests into programs; it expands to a | |
| void expression. | |
| When it is executed, if expression (which must have a scalar type) is | |
| FALSE (that is, compares equal to 0), the assert macro writes information | |
| about the particular call that failed (including the text of the argument, | |
| the name of the source file, the source line number, and the name of the | |
| enclosing function - the latter are respectively the values of the | |
| preprocessing macros __FILE__ and __LINE__ and of the identifier __func__) | |
| on the standard error stream. It then calls the abort function. | |
| If NDEBUG is not defined, Expression is evaluated. If Expression evaluates to FALSE, | |
| then __assert is called passing in the source filename, source function, source | |
| line number, and the Expression. | |
| @param Expression Boolean expression. | |
| @{ | |
| **/ | |
| #ifdef NDEBUG | |
| #define assert(Expression) /* ignored */ | |
| #else | |
| #define assert(Expression) ((Expression) ? (void)0 :\ | |
| __assert(__FILE__, __func__, __LINE__, #Expression) ) | |
| #endif | |
| /// @} | |
| /* END of file assert.h */ |