1*19c3b8c2SApple OSS Distributions /* 2*19c3b8c2SApple OSS Distributions * Copyright (c) 2002-2008 by Apple Inc.. All rights reserved. 3*19c3b8c2SApple OSS Distributions * 4*19c3b8c2SApple OSS Distributions * @APPLE_LICENSE_HEADER_START@ 5*19c3b8c2SApple OSS Distributions * 6*19c3b8c2SApple OSS Distributions * This file contains Original Code and/or Modifications of Original Code 7*19c3b8c2SApple OSS Distributions * as defined in and that are subject to the Apple Public Source License 8*19c3b8c2SApple OSS Distributions * Version 2.0 (the 'License'). You may not use this file except in 9*19c3b8c2SApple OSS Distributions * compliance with the License. Please obtain a copy of the License at 10*19c3b8c2SApple OSS Distributions * http://www.opensource.apple.com/apsl/ and read it before using this 11*19c3b8c2SApple OSS Distributions * file. 12*19c3b8c2SApple OSS Distributions * 13*19c3b8c2SApple OSS Distributions * The Original Code and all software distributed under the License are 14*19c3b8c2SApple OSS Distributions * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15*19c3b8c2SApple OSS Distributions * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16*19c3b8c2SApple OSS Distributions * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17*19c3b8c2SApple OSS Distributions * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18*19c3b8c2SApple OSS Distributions * Please see the License for the specific language governing rights and 19*19c3b8c2SApple OSS Distributions * limitations under the License. 20*19c3b8c2SApple OSS Distributions * 21*19c3b8c2SApple OSS Distributions * @APPLE_LICENSE_HEADER_END@ 22*19c3b8c2SApple OSS Distributions */ 23*19c3b8c2SApple OSS Distributions 24*19c3b8c2SApple OSS Distributions 25*19c3b8c2SApple OSS Distributions /* 26*19c3b8c2SApple OSS Distributions File: AssertMacros.h 27*19c3b8c2SApple OSS Distributions 28*19c3b8c2SApple OSS Distributions Contains: This file defines structured error handling and assertion macros for 29*19c3b8c2SApple OSS Distributions programming in C. Originally used in QuickDraw GX and later enhanced. 30*19c3b8c2SApple OSS Distributions These macros are used throughout Apple's software. 31*19c3b8c2SApple OSS Distributions 32*19c3b8c2SApple OSS Distributions New code may not want to begin adopting these macros and instead use 33*19c3b8c2SApple OSS Distributions existing language functionality. 34*19c3b8c2SApple OSS Distributions 35*19c3b8c2SApple OSS Distributions See "Living In an Exceptional World" by Sean Parent 36*19c3b8c2SApple OSS Distributions (develop, The Apple Technical Journal, Issue 11, August/September 1992) 37*19c3b8c2SApple OSS Distributions <http://developer.apple.com/dev/techsupport/develop/issue11toc.shtml> or 38*19c3b8c2SApple OSS Distributions <http://www.mactech.com/articles/develop/issue_11/Parent_final.html> 39*19c3b8c2SApple OSS Distributions for the methodology behind these error handling and assertion macros. 40*19c3b8c2SApple OSS Distributions 41*19c3b8c2SApple OSS Distributions Bugs?: For bug reports, consult the following page on 42*19c3b8c2SApple OSS Distributions the World Wide Web: 43*19c3b8c2SApple OSS Distributions 44*19c3b8c2SApple OSS Distributions http://developer.apple.com/bugreporter/ 45*19c3b8c2SApple OSS Distributions */ 46*19c3b8c2SApple OSS Distributions #ifndef __ASSERTMACROS__ 47*19c3b8c2SApple OSS Distributions #define __ASSERTMACROS__ 48*19c3b8c2SApple OSS Distributions 49*19c3b8c2SApple OSS Distributions /* 50*19c3b8c2SApple OSS Distributions * Macro overview: 51*19c3b8c2SApple OSS Distributions * 52*19c3b8c2SApple OSS Distributions * check(assertion) 53*19c3b8c2SApple OSS Distributions * In production builds, pre-processed away 54*19c3b8c2SApple OSS Distributions * In debug builds, if assertion evaluates to false, calls DEBUG_ASSERT_MESSAGE 55*19c3b8c2SApple OSS Distributions * 56*19c3b8c2SApple OSS Distributions * verify(assertion) 57*19c3b8c2SApple OSS Distributions * In production builds, evaluates assertion and does nothing 58*19c3b8c2SApple OSS Distributions * In debug builds, if assertion evaluates to false, calls DEBUG_ASSERT_MESSAGE 59*19c3b8c2SApple OSS Distributions * 60*19c3b8c2SApple OSS Distributions * require(assertion, exceptionLabel) 61*19c3b8c2SApple OSS Distributions * In production builds, if the assertion expression evaluates to false, goto exceptionLabel 62*19c3b8c2SApple OSS Distributions * In debug builds, if the assertion expression evaluates to false, calls DEBUG_ASSERT_MESSAGE 63*19c3b8c2SApple OSS Distributions * and jumps to exceptionLabel 64*19c3b8c2SApple OSS Distributions * 65*19c3b8c2SApple OSS Distributions * In addition the following suffixes are available: 66*19c3b8c2SApple OSS Distributions * 67*19c3b8c2SApple OSS Distributions * _noerr Adds "!= 0" to assertion. Useful for asserting and OSStatus or OSErr is noErr (zero) 68*19c3b8c2SApple OSS Distributions * _action Adds statement to be executued if assertion fails 69*19c3b8c2SApple OSS Distributions * _quiet Suppress call to DEBUG_ASSERT_MESSAGE 70*19c3b8c2SApple OSS Distributions * _string Allows you to add explanitory message to DEBUG_ASSERT_MESSAGE 71*19c3b8c2SApple OSS Distributions * 72*19c3b8c2SApple OSS Distributions * For instance, require_noerr_string(resultCode, label, msg) will do nothing if 73*19c3b8c2SApple OSS Distributions * resultCode is zero, otherwise it will call DEBUG_ASSERT_MESSAGE with msg 74*19c3b8c2SApple OSS Distributions * and jump to label. 75*19c3b8c2SApple OSS Distributions * 76*19c3b8c2SApple OSS Distributions * Configuration: 77*19c3b8c2SApple OSS Distributions * 78*19c3b8c2SApple OSS Distributions * By default all macros generate "production code" (i.e non-debug). If 79*19c3b8c2SApple OSS Distributions * DEBUG_ASSERT_PRODUCTION_CODE is defined to zero or DEBUG is defined to non-zero 80*19c3b8c2SApple OSS Distributions * while this header is included, the macros will generated debug code. 81*19c3b8c2SApple OSS Distributions * 82*19c3b8c2SApple OSS Distributions * If DEBUG_ASSERT_COMPONENT_NAME_STRING is defined, all debug messages will 83*19c3b8c2SApple OSS Distributions * be prefixed with it. 84*19c3b8c2SApple OSS Distributions * 85*19c3b8c2SApple OSS Distributions * By default, all messages write to stderr. If you would like to write a custom 86*19c3b8c2SApple OSS Distributions * error message formater, defined DEBUG_ASSERT_MESSAGE to your function name. 87*19c3b8c2SApple OSS Distributions * 88*19c3b8c2SApple OSS Distributions * Each individual macro will only be defined if it is not already defined, so 89*19c3b8c2SApple OSS Distributions * you can redefine their behavior singly by providing your own definition before 90*19c3b8c2SApple OSS Distributions * this file is included. 91*19c3b8c2SApple OSS Distributions * 92*19c3b8c2SApple OSS Distributions * If you define __ASSERTMACROS__ before this file is included, then nothing in 93*19c3b8c2SApple OSS Distributions * this file will take effect. 94*19c3b8c2SApple OSS Distributions * 95*19c3b8c2SApple OSS Distributions * Prior to Mac OS X 10.6 the macro names used in this file conflicted with some 96*19c3b8c2SApple OSS Distributions * user code, including libraries in boost and the proposed C++ standards efforts, 97*19c3b8c2SApple OSS Distributions * and there was no way for a client of this header to resolve this conflict. Because 98*19c3b8c2SApple OSS Distributions * of this, most of the macros have been changed so that they are prefixed with 99*19c3b8c2SApple OSS Distributions * __ and contain at least one capital letter, which should alleviate the current 100*19c3b8c2SApple OSS Distributions * and future conflicts. However, to allow current sources to continue to compile, 101*19c3b8c2SApple OSS Distributions * compatibility macros are defined at the end with the old names. A tops script 102*19c3b8c2SApple OSS Distributions * at the end of this file will convert all of the old macro names used in a directory 103*19c3b8c2SApple OSS Distributions * to the new names. Clients are recommended to migrate over to these new macros as 104*19c3b8c2SApple OSS Distributions * they update their sources because a future release of Mac OS X will remove the 105*19c3b8c2SApple OSS Distributions * old macro definitions ( without the double-underscore prefix ). Clients who 106*19c3b8c2SApple OSS Distributions * want to compile without the old macro definitions can define the macro 107*19c3b8c2SApple OSS Distributions * __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES to 0 before this file is 108*19c3b8c2SApple OSS Distributions * included. 109*19c3b8c2SApple OSS Distributions */ 110*19c3b8c2SApple OSS Distributions 111*19c3b8c2SApple OSS Distributions 112*19c3b8c2SApple OSS Distributions /* 113*19c3b8c2SApple OSS Distributions * Before including this file, #define DEBUG_ASSERT_COMPONENT_NAME_STRING to 114*19c3b8c2SApple OSS Distributions * a C-string containing the name of your client. This string will be passed to 115*19c3b8c2SApple OSS Distributions * the DEBUG_ASSERT_MESSAGE macro for inclusion in any assertion messages. 116*19c3b8c2SApple OSS Distributions * 117*19c3b8c2SApple OSS Distributions * If you do not define DEBUG_ASSERT_COMPONENT_NAME_STRING, the default 118*19c3b8c2SApple OSS Distributions * DEBUG_ASSERT_COMPONENT_NAME_STRING value, an empty string, will be used by 119*19c3b8c2SApple OSS Distributions * the assertion macros. 120*19c3b8c2SApple OSS Distributions */ 121*19c3b8c2SApple OSS Distributions #ifndef DEBUG_ASSERT_COMPONENT_NAME_STRING 122*19c3b8c2SApple OSS Distributions #define DEBUG_ASSERT_COMPONENT_NAME_STRING "" 123*19c3b8c2SApple OSS Distributions #endif 124*19c3b8c2SApple OSS Distributions 125*19c3b8c2SApple OSS Distributions 126*19c3b8c2SApple OSS Distributions /* 127*19c3b8c2SApple OSS Distributions * To activate the additional assertion code and messages for non-production builds, 128*19c3b8c2SApple OSS Distributions * #define DEBUG_ASSERT_PRODUCTION_CODE to zero before including this file. 129*19c3b8c2SApple OSS Distributions * 130*19c3b8c2SApple OSS Distributions * If you do not define DEBUG_ASSERT_PRODUCTION_CODE, the default value 1 will be used 131*19c3b8c2SApple OSS Distributions * (production code = no assertion code and no messages). 132*19c3b8c2SApple OSS Distributions */ 133*19c3b8c2SApple OSS Distributions #ifndef DEBUG_ASSERT_PRODUCTION_CODE 134*19c3b8c2SApple OSS Distributions #define DEBUG_ASSERT_PRODUCTION_CODE !DEBUG 135*19c3b8c2SApple OSS Distributions #endif 136*19c3b8c2SApple OSS Distributions 137*19c3b8c2SApple OSS Distributions 138*19c3b8c2SApple OSS Distributions /* 139*19c3b8c2SApple OSS Distributions * DEBUG_ASSERT_MESSAGE(component, assertion, label, error, file, line, errorCode) 140*19c3b8c2SApple OSS Distributions * 141*19c3b8c2SApple OSS Distributions * Summary: 142*19c3b8c2SApple OSS Distributions * All assertion messages are routed through this macro. If you wish to use your 143*19c3b8c2SApple OSS Distributions * own routine to display assertion messages, you can override DEBUG_ASSERT_MESSAGE 144*19c3b8c2SApple OSS Distributions * by #defining DEBUG_ASSERT_MESSAGE before including this file. 145*19c3b8c2SApple OSS Distributions * 146*19c3b8c2SApple OSS Distributions * Parameters: 147*19c3b8c2SApple OSS Distributions * 148*19c3b8c2SApple OSS Distributions * componentNameString: 149*19c3b8c2SApple OSS Distributions * A pointer to a string constant containing the name of the 150*19c3b8c2SApple OSS Distributions * component this code is part of. This must be a string constant 151*19c3b8c2SApple OSS Distributions * (and not a string variable or NULL) because the preprocessor 152*19c3b8c2SApple OSS Distributions * concatenates it with other string constants. 153*19c3b8c2SApple OSS Distributions * 154*19c3b8c2SApple OSS Distributions * assertionString: 155*19c3b8c2SApple OSS Distributions * A pointer to a string constant containing the assertion. 156*19c3b8c2SApple OSS Distributions * This must be a string constant (and not a string variable or 157*19c3b8c2SApple OSS Distributions * NULL) because the Preprocessor concatenates it with other 158*19c3b8c2SApple OSS Distributions * string constants. 159*19c3b8c2SApple OSS Distributions * 160*19c3b8c2SApple OSS Distributions * exceptionLabelString: 161*19c3b8c2SApple OSS Distributions * A pointer to a string containing the exceptionLabel, or NULL. 162*19c3b8c2SApple OSS Distributions * 163*19c3b8c2SApple OSS Distributions * errorString: 164*19c3b8c2SApple OSS Distributions * A pointer to the error string, or NULL. DEBUG_ASSERT_MESSAGE macros 165*19c3b8c2SApple OSS Distributions * must not attempt to concatenate this string with constant 166*19c3b8c2SApple OSS Distributions * character strings. 167*19c3b8c2SApple OSS Distributions * 168*19c3b8c2SApple OSS Distributions * fileName: 169*19c3b8c2SApple OSS Distributions * A pointer to the fileName or pathname (generated by the 170*19c3b8c2SApple OSS Distributions * preprocessor __FILE__ identifier), or NULL. 171*19c3b8c2SApple OSS Distributions * 172*19c3b8c2SApple OSS Distributions * lineNumber: 173*19c3b8c2SApple OSS Distributions * The line number in the file (generated by the preprocessor 174*19c3b8c2SApple OSS Distributions * __LINE__ identifier), or 0 (zero). 175*19c3b8c2SApple OSS Distributions * 176*19c3b8c2SApple OSS Distributions * errorCode: 177*19c3b8c2SApple OSS Distributions * A value associated with the assertion, or 0. 178*19c3b8c2SApple OSS Distributions * 179*19c3b8c2SApple OSS Distributions * Here is an example of a DEBUG_ASSERT_MESSAGE macro and a routine which displays 180*19c3b8c2SApple OSS Distributions * assertion messsages: 181*19c3b8c2SApple OSS Distributions * 182*19c3b8c2SApple OSS Distributions * #define DEBUG_ASSERT_COMPONENT_NAME_STRING "MyCoolProgram" 183*19c3b8c2SApple OSS Distributions * 184*19c3b8c2SApple OSS Distributions * #define DEBUG_ASSERT_MESSAGE(componentNameString, assertionString, \ 185*19c3b8c2SApple OSS Distributions * exceptionLabelString, errorString, fileName, lineNumber, errorCode) \ 186*19c3b8c2SApple OSS Distributions * MyProgramDebugAssert(componentNameString, assertionString, \ 187*19c3b8c2SApple OSS Distributions * exceptionLabelString, errorString, fileName, lineNumber, errorCode) 188*19c3b8c2SApple OSS Distributions * 189*19c3b8c2SApple OSS Distributions * static void 190*19c3b8c2SApple OSS Distributions * MyProgramDebugAssert(const char *componentNameString, const char *assertionString, 191*19c3b8c2SApple OSS Distributions * const char *exceptionLabelString, const char *errorString, 192*19c3b8c2SApple OSS Distributions * const char *fileName, long lineNumber, int errorCode) 193*19c3b8c2SApple OSS Distributions * { 194*19c3b8c2SApple OSS Distributions * if ( (assertionString != NULL) && (*assertionString != '\0') ) 195*19c3b8c2SApple OSS Distributions * fprintf(stderr, "Assertion failed: %s: %s\n", componentNameString, assertionString); 196*19c3b8c2SApple OSS Distributions * else 197*19c3b8c2SApple OSS Distributions * fprintf(stderr, "Check failed: %s:\n", componentNameString); 198*19c3b8c2SApple OSS Distributions * if ( exceptionLabelString != NULL ) 199*19c3b8c2SApple OSS Distributions * fprintf(stderr, " %s\n", exceptionLabelString); 200*19c3b8c2SApple OSS Distributions * if ( errorString != NULL ) 201*19c3b8c2SApple OSS Distributions * fprintf(stderr, " %s\n", errorString); 202*19c3b8c2SApple OSS Distributions * if ( fileName != NULL ) 203*19c3b8c2SApple OSS Distributions * fprintf(stderr, " file: %s\n", fileName); 204*19c3b8c2SApple OSS Distributions * if ( lineNumber != 0 ) 205*19c3b8c2SApple OSS Distributions * fprintf(stderr, " line: %ld\n", lineNumber); 206*19c3b8c2SApple OSS Distributions * if ( errorCode != 0 ) 207*19c3b8c2SApple OSS Distributions * fprintf(stderr, " error: %d\n", errorCode); 208*19c3b8c2SApple OSS Distributions * } 209*19c3b8c2SApple OSS Distributions * 210*19c3b8c2SApple OSS Distributions * If you do not define DEBUG_ASSERT_MESSAGE, a simple printf to stderr will be used. 211*19c3b8c2SApple OSS Distributions */ 212*19c3b8c2SApple OSS Distributions #ifndef DEBUG_ASSERT_MESSAGE 213*19c3b8c2SApple OSS Distributions #ifdef KERNEL 214*19c3b8c2SApple OSS Distributions #include <libkern/libkern.h> 215*19c3b8c2SApple OSS Distributions #define DEBUG_ASSERT_MESSAGE(name, assertion, label, message, file, line, value) \ 216*19c3b8c2SApple OSS Distributions printf( "AssertMacros: %s, %s file: %s, line: %d\n", assertion, (message!=0) ? message : "", file, line); 217*19c3b8c2SApple OSS Distributions #else 218*19c3b8c2SApple OSS Distributions #include <stdio.h> 219*19c3b8c2SApple OSS Distributions #define DEBUG_ASSERT_MESSAGE(name, assertion, label, message, file, line, value) \ 220*19c3b8c2SApple OSS Distributions fprintf(stderr, "AssertMacros: %s, %s file: %s, line: %d\n", assertion, (message!=0) ? message : "", file, line); 221*19c3b8c2SApple OSS Distributions #endif 222*19c3b8c2SApple OSS Distributions #endif 223*19c3b8c2SApple OSS Distributions 224*19c3b8c2SApple OSS Distributions 225*19c3b8c2SApple OSS Distributions 226*19c3b8c2SApple OSS Distributions 227*19c3b8c2SApple OSS Distributions 228*19c3b8c2SApple OSS Distributions /* 229*19c3b8c2SApple OSS Distributions * __Debug_String(message) 230*19c3b8c2SApple OSS Distributions * 231*19c3b8c2SApple OSS Distributions * Summary: 232*19c3b8c2SApple OSS Distributions * Production builds: does nothing and produces no code. 233*19c3b8c2SApple OSS Distributions * 234*19c3b8c2SApple OSS Distributions * Non-production builds: call DEBUG_ASSERT_MESSAGE. 235*19c3b8c2SApple OSS Distributions * 236*19c3b8c2SApple OSS Distributions * Parameters: 237*19c3b8c2SApple OSS Distributions * 238*19c3b8c2SApple OSS Distributions * message: 239*19c3b8c2SApple OSS Distributions * The C string to display. 240*19c3b8c2SApple OSS Distributions * 241*19c3b8c2SApple OSS Distributions */ 242*19c3b8c2SApple OSS Distributions #ifndef __Debug_String 243*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 244*19c3b8c2SApple OSS Distributions #define __Debug_String(message) 245*19c3b8c2SApple OSS Distributions #else 246*19c3b8c2SApple OSS Distributions #define __Debug_String(message) \ 247*19c3b8c2SApple OSS Distributions do \ 248*19c3b8c2SApple OSS Distributions { \ 249*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 250*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 251*19c3b8c2SApple OSS Distributions "", \ 252*19c3b8c2SApple OSS Distributions 0, \ 253*19c3b8c2SApple OSS Distributions message, \ 254*19c3b8c2SApple OSS Distributions __FILE__, \ 255*19c3b8c2SApple OSS Distributions __LINE__, \ 256*19c3b8c2SApple OSS Distributions 0); \ 257*19c3b8c2SApple OSS Distributions } while ( 0 ) 258*19c3b8c2SApple OSS Distributions #endif 259*19c3b8c2SApple OSS Distributions #endif 260*19c3b8c2SApple OSS Distributions 261*19c3b8c2SApple OSS Distributions /* 262*19c3b8c2SApple OSS Distributions * __Check(assertion) 263*19c3b8c2SApple OSS Distributions * 264*19c3b8c2SApple OSS Distributions * Summary: 265*19c3b8c2SApple OSS Distributions * Production builds: does nothing and produces no code. 266*19c3b8c2SApple OSS Distributions * 267*19c3b8c2SApple OSS Distributions * Non-production builds: if the assertion expression evaluates to false, 268*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE. 269*19c3b8c2SApple OSS Distributions * 270*19c3b8c2SApple OSS Distributions * Parameters: 271*19c3b8c2SApple OSS Distributions * 272*19c3b8c2SApple OSS Distributions * assertion: 273*19c3b8c2SApple OSS Distributions * The assertion expression. 274*19c3b8c2SApple OSS Distributions */ 275*19c3b8c2SApple OSS Distributions #ifndef __Check 276*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 277*19c3b8c2SApple OSS Distributions #define __Check(assertion) 278*19c3b8c2SApple OSS Distributions #else 279*19c3b8c2SApple OSS Distributions #define __Check(assertion) \ 280*19c3b8c2SApple OSS Distributions do \ 281*19c3b8c2SApple OSS Distributions { \ 282*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) \ 283*19c3b8c2SApple OSS Distributions { \ 284*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 285*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 286*19c3b8c2SApple OSS Distributions #assertion, 0, 0, __FILE__, __LINE__, 0 ); \ 287*19c3b8c2SApple OSS Distributions } \ 288*19c3b8c2SApple OSS Distributions } while ( 0 ) 289*19c3b8c2SApple OSS Distributions #endif 290*19c3b8c2SApple OSS Distributions #endif 291*19c3b8c2SApple OSS Distributions 292*19c3b8c2SApple OSS Distributions #ifndef __nCheck 293*19c3b8c2SApple OSS Distributions #define __nCheck(assertion) __Check(!(assertion)) 294*19c3b8c2SApple OSS Distributions #endif 295*19c3b8c2SApple OSS Distributions 296*19c3b8c2SApple OSS Distributions /* 297*19c3b8c2SApple OSS Distributions * __Check_String(assertion, message) 298*19c3b8c2SApple OSS Distributions * 299*19c3b8c2SApple OSS Distributions * Summary: 300*19c3b8c2SApple OSS Distributions * Production builds: does nothing and produces no code. 301*19c3b8c2SApple OSS Distributions * 302*19c3b8c2SApple OSS Distributions * Non-production builds: if the assertion expression evaluates to false, 303*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE. 304*19c3b8c2SApple OSS Distributions * 305*19c3b8c2SApple OSS Distributions * Parameters: 306*19c3b8c2SApple OSS Distributions * 307*19c3b8c2SApple OSS Distributions * assertion: 308*19c3b8c2SApple OSS Distributions * The assertion expression. 309*19c3b8c2SApple OSS Distributions * 310*19c3b8c2SApple OSS Distributions * message: 311*19c3b8c2SApple OSS Distributions * The C string to display. 312*19c3b8c2SApple OSS Distributions */ 313*19c3b8c2SApple OSS Distributions #ifndef __Check_String 314*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 315*19c3b8c2SApple OSS Distributions #define __Check_String(assertion, message) 316*19c3b8c2SApple OSS Distributions #else 317*19c3b8c2SApple OSS Distributions #define __Check_String(assertion, message) \ 318*19c3b8c2SApple OSS Distributions do \ 319*19c3b8c2SApple OSS Distributions { \ 320*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) \ 321*19c3b8c2SApple OSS Distributions { \ 322*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 323*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 324*19c3b8c2SApple OSS Distributions #assertion, 0, message, __FILE__, __LINE__, 0 ); \ 325*19c3b8c2SApple OSS Distributions } \ 326*19c3b8c2SApple OSS Distributions } while ( 0 ) 327*19c3b8c2SApple OSS Distributions #endif 328*19c3b8c2SApple OSS Distributions #endif 329*19c3b8c2SApple OSS Distributions 330*19c3b8c2SApple OSS Distributions #ifndef __nCheck_String 331*19c3b8c2SApple OSS Distributions #define __nCheck_String(assertion, message) __Check_String(!(assertion), message) 332*19c3b8c2SApple OSS Distributions #endif 333*19c3b8c2SApple OSS Distributions 334*19c3b8c2SApple OSS Distributions /* 335*19c3b8c2SApple OSS Distributions * __Check_noErr(errorCode) 336*19c3b8c2SApple OSS Distributions * 337*19c3b8c2SApple OSS Distributions * Summary: 338*19c3b8c2SApple OSS Distributions * Production builds: does nothing and produces no code. 339*19c3b8c2SApple OSS Distributions * 340*19c3b8c2SApple OSS Distributions * Non-production builds: if the errorCode expression does not equal 0 (noErr), 341*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE. 342*19c3b8c2SApple OSS Distributions * 343*19c3b8c2SApple OSS Distributions * Parameters: 344*19c3b8c2SApple OSS Distributions * 345*19c3b8c2SApple OSS Distributions * errorCode: 346*19c3b8c2SApple OSS Distributions * The errorCode expression to compare with 0. 347*19c3b8c2SApple OSS Distributions */ 348*19c3b8c2SApple OSS Distributions #ifndef __Check_noErr 349*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 350*19c3b8c2SApple OSS Distributions #define __Check_noErr(errorCode) 351*19c3b8c2SApple OSS Distributions #else 352*19c3b8c2SApple OSS Distributions #define __Check_noErr(errorCode) \ 353*19c3b8c2SApple OSS Distributions do \ 354*19c3b8c2SApple OSS Distributions { \ 355*19c3b8c2SApple OSS Distributions long evalOnceErrorCode = (errorCode); \ 356*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ 357*19c3b8c2SApple OSS Distributions { \ 358*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 359*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 360*19c3b8c2SApple OSS Distributions #errorCode " == 0 ", 0, 0, __FILE__, __LINE__, evalOnceErrorCode ); \ 361*19c3b8c2SApple OSS Distributions } \ 362*19c3b8c2SApple OSS Distributions } while ( 0 ) 363*19c3b8c2SApple OSS Distributions #endif 364*19c3b8c2SApple OSS Distributions #endif 365*19c3b8c2SApple OSS Distributions 366*19c3b8c2SApple OSS Distributions /* 367*19c3b8c2SApple OSS Distributions * __Check_noErr_String(errorCode, message) 368*19c3b8c2SApple OSS Distributions * 369*19c3b8c2SApple OSS Distributions * Summary: 370*19c3b8c2SApple OSS Distributions * Production builds: check_noerr_string() does nothing and produces 371*19c3b8c2SApple OSS Distributions * no code. 372*19c3b8c2SApple OSS Distributions * 373*19c3b8c2SApple OSS Distributions * Non-production builds: if the errorCode expression does not equal 0 (noErr), 374*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE. 375*19c3b8c2SApple OSS Distributions * 376*19c3b8c2SApple OSS Distributions * Parameters: 377*19c3b8c2SApple OSS Distributions * 378*19c3b8c2SApple OSS Distributions * errorCode: 379*19c3b8c2SApple OSS Distributions * The errorCode expression to compare to 0. 380*19c3b8c2SApple OSS Distributions * 381*19c3b8c2SApple OSS Distributions * message: 382*19c3b8c2SApple OSS Distributions * The C string to display. 383*19c3b8c2SApple OSS Distributions */ 384*19c3b8c2SApple OSS Distributions #ifndef __Check_noErr_String 385*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 386*19c3b8c2SApple OSS Distributions #define __Check_noErr_String(errorCode, message) 387*19c3b8c2SApple OSS Distributions #else 388*19c3b8c2SApple OSS Distributions #define __Check_noErr_String(errorCode, message) \ 389*19c3b8c2SApple OSS Distributions do \ 390*19c3b8c2SApple OSS Distributions { \ 391*19c3b8c2SApple OSS Distributions long evalOnceErrorCode = (errorCode); \ 392*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ 393*19c3b8c2SApple OSS Distributions { \ 394*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 395*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 396*19c3b8c2SApple OSS Distributions #errorCode " == 0 ", 0, message, __FILE__, __LINE__, evalOnceErrorCode ); \ 397*19c3b8c2SApple OSS Distributions } \ 398*19c3b8c2SApple OSS Distributions } while ( 0 ) 399*19c3b8c2SApple OSS Distributions #endif 400*19c3b8c2SApple OSS Distributions #endif 401*19c3b8c2SApple OSS Distributions 402*19c3b8c2SApple OSS Distributions /* 403*19c3b8c2SApple OSS Distributions * __Verify(assertion) 404*19c3b8c2SApple OSS Distributions * 405*19c3b8c2SApple OSS Distributions * Summary: 406*19c3b8c2SApple OSS Distributions * Production builds: evaluate the assertion expression, but ignore 407*19c3b8c2SApple OSS Distributions * the result. 408*19c3b8c2SApple OSS Distributions * 409*19c3b8c2SApple OSS Distributions * Non-production builds: if the assertion expression evaluates to false, 410*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE. 411*19c3b8c2SApple OSS Distributions * 412*19c3b8c2SApple OSS Distributions * Parameters: 413*19c3b8c2SApple OSS Distributions * 414*19c3b8c2SApple OSS Distributions * assertion: 415*19c3b8c2SApple OSS Distributions * The assertion expression. 416*19c3b8c2SApple OSS Distributions */ 417*19c3b8c2SApple OSS Distributions #ifndef __Verify 418*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 419*19c3b8c2SApple OSS Distributions #define __Verify(assertion) \ 420*19c3b8c2SApple OSS Distributions do \ 421*19c3b8c2SApple OSS Distributions { \ 422*19c3b8c2SApple OSS Distributions if ( !(assertion) ) \ 423*19c3b8c2SApple OSS Distributions { \ 424*19c3b8c2SApple OSS Distributions } \ 425*19c3b8c2SApple OSS Distributions } while ( 0 ) 426*19c3b8c2SApple OSS Distributions #else 427*19c3b8c2SApple OSS Distributions #define __Verify(assertion) \ 428*19c3b8c2SApple OSS Distributions do \ 429*19c3b8c2SApple OSS Distributions { \ 430*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) \ 431*19c3b8c2SApple OSS Distributions { \ 432*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 433*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 434*19c3b8c2SApple OSS Distributions #assertion, 0, 0, __FILE__, __LINE__, 0 ); \ 435*19c3b8c2SApple OSS Distributions } \ 436*19c3b8c2SApple OSS Distributions } while ( 0 ) 437*19c3b8c2SApple OSS Distributions #endif 438*19c3b8c2SApple OSS Distributions #endif 439*19c3b8c2SApple OSS Distributions 440*19c3b8c2SApple OSS Distributions #ifndef __nVerify 441*19c3b8c2SApple OSS Distributions #define __nVerify(assertion) __Verify(!(assertion)) 442*19c3b8c2SApple OSS Distributions #endif 443*19c3b8c2SApple OSS Distributions 444*19c3b8c2SApple OSS Distributions /* 445*19c3b8c2SApple OSS Distributions * __Verify_String(assertion, message) 446*19c3b8c2SApple OSS Distributions * 447*19c3b8c2SApple OSS Distributions * Summary: 448*19c3b8c2SApple OSS Distributions * Production builds: evaluate the assertion expression, but ignore 449*19c3b8c2SApple OSS Distributions * the result. 450*19c3b8c2SApple OSS Distributions * 451*19c3b8c2SApple OSS Distributions * Non-production builds: if the assertion expression evaluates to false, 452*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE. 453*19c3b8c2SApple OSS Distributions * 454*19c3b8c2SApple OSS Distributions * Parameters: 455*19c3b8c2SApple OSS Distributions * 456*19c3b8c2SApple OSS Distributions * assertion: 457*19c3b8c2SApple OSS Distributions * The assertion expression. 458*19c3b8c2SApple OSS Distributions * 459*19c3b8c2SApple OSS Distributions * message: 460*19c3b8c2SApple OSS Distributions * The C string to display. 461*19c3b8c2SApple OSS Distributions */ 462*19c3b8c2SApple OSS Distributions #ifndef __Verify_String 463*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 464*19c3b8c2SApple OSS Distributions #define __Verify_String(assertion, message) \ 465*19c3b8c2SApple OSS Distributions do \ 466*19c3b8c2SApple OSS Distributions { \ 467*19c3b8c2SApple OSS Distributions if ( !(assertion) ) \ 468*19c3b8c2SApple OSS Distributions { \ 469*19c3b8c2SApple OSS Distributions } \ 470*19c3b8c2SApple OSS Distributions } while ( 0 ) 471*19c3b8c2SApple OSS Distributions #else 472*19c3b8c2SApple OSS Distributions #define __Verify_String(assertion, message) \ 473*19c3b8c2SApple OSS Distributions do \ 474*19c3b8c2SApple OSS Distributions { \ 475*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) \ 476*19c3b8c2SApple OSS Distributions { \ 477*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 478*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 479*19c3b8c2SApple OSS Distributions #assertion, 0, message, __FILE__, __LINE__, 0 ); \ 480*19c3b8c2SApple OSS Distributions } \ 481*19c3b8c2SApple OSS Distributions } while ( 0 ) 482*19c3b8c2SApple OSS Distributions #endif 483*19c3b8c2SApple OSS Distributions #endif 484*19c3b8c2SApple OSS Distributions 485*19c3b8c2SApple OSS Distributions #ifndef __nVerify_String 486*19c3b8c2SApple OSS Distributions #define __nVerify_String(assertion, message) __Verify_String(!(assertion), message) 487*19c3b8c2SApple OSS Distributions #endif 488*19c3b8c2SApple OSS Distributions 489*19c3b8c2SApple OSS Distributions /* 490*19c3b8c2SApple OSS Distributions * __Verify_noErr(errorCode) 491*19c3b8c2SApple OSS Distributions * 492*19c3b8c2SApple OSS Distributions * Summary: 493*19c3b8c2SApple OSS Distributions * Production builds: evaluate the errorCode expression, but ignore 494*19c3b8c2SApple OSS Distributions * the result. 495*19c3b8c2SApple OSS Distributions * 496*19c3b8c2SApple OSS Distributions * Non-production builds: if the errorCode expression does not equal 0 (noErr), 497*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE. 498*19c3b8c2SApple OSS Distributions * 499*19c3b8c2SApple OSS Distributions * Parameters: 500*19c3b8c2SApple OSS Distributions * 501*19c3b8c2SApple OSS Distributions * errorCode: 502*19c3b8c2SApple OSS Distributions * The expression to compare to 0. 503*19c3b8c2SApple OSS Distributions */ 504*19c3b8c2SApple OSS Distributions #ifndef __Verify_noErr 505*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 506*19c3b8c2SApple OSS Distributions #define __Verify_noErr(errorCode) \ 507*19c3b8c2SApple OSS Distributions do \ 508*19c3b8c2SApple OSS Distributions { \ 509*19c3b8c2SApple OSS Distributions if ( 0 != (errorCode) ) \ 510*19c3b8c2SApple OSS Distributions { \ 511*19c3b8c2SApple OSS Distributions } \ 512*19c3b8c2SApple OSS Distributions } while ( 0 ) 513*19c3b8c2SApple OSS Distributions #else 514*19c3b8c2SApple OSS Distributions #define __Verify_noErr(errorCode) \ 515*19c3b8c2SApple OSS Distributions do \ 516*19c3b8c2SApple OSS Distributions { \ 517*19c3b8c2SApple OSS Distributions long evalOnceErrorCode = (errorCode); \ 518*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ 519*19c3b8c2SApple OSS Distributions { \ 520*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 521*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 522*19c3b8c2SApple OSS Distributions #errorCode " == 0 ", 0, 0, __FILE__, __LINE__, evalOnceErrorCode ); \ 523*19c3b8c2SApple OSS Distributions } \ 524*19c3b8c2SApple OSS Distributions } while ( 0 ) 525*19c3b8c2SApple OSS Distributions #endif 526*19c3b8c2SApple OSS Distributions #endif 527*19c3b8c2SApple OSS Distributions 528*19c3b8c2SApple OSS Distributions /* 529*19c3b8c2SApple OSS Distributions * __Verify_noErr_String(errorCode, message) 530*19c3b8c2SApple OSS Distributions * 531*19c3b8c2SApple OSS Distributions * Summary: 532*19c3b8c2SApple OSS Distributions * Production builds: evaluate the errorCode expression, but ignore 533*19c3b8c2SApple OSS Distributions * the result. 534*19c3b8c2SApple OSS Distributions * 535*19c3b8c2SApple OSS Distributions * Non-production builds: if the errorCode expression does not equal 0 (noErr), 536*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE. 537*19c3b8c2SApple OSS Distributions * 538*19c3b8c2SApple OSS Distributions * Parameters: 539*19c3b8c2SApple OSS Distributions * 540*19c3b8c2SApple OSS Distributions * errorCode: 541*19c3b8c2SApple OSS Distributions * The expression to compare to 0. 542*19c3b8c2SApple OSS Distributions * 543*19c3b8c2SApple OSS Distributions * message: 544*19c3b8c2SApple OSS Distributions * The C string to display. 545*19c3b8c2SApple OSS Distributions */ 546*19c3b8c2SApple OSS Distributions #ifndef __Verify_noErr_String 547*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 548*19c3b8c2SApple OSS Distributions #define __Verify_noErr_String(errorCode, message) \ 549*19c3b8c2SApple OSS Distributions do \ 550*19c3b8c2SApple OSS Distributions { \ 551*19c3b8c2SApple OSS Distributions if ( 0 != (errorCode) ) \ 552*19c3b8c2SApple OSS Distributions { \ 553*19c3b8c2SApple OSS Distributions } \ 554*19c3b8c2SApple OSS Distributions } while ( 0 ) 555*19c3b8c2SApple OSS Distributions #else 556*19c3b8c2SApple OSS Distributions #define __Verify_noErr_String(errorCode, message) \ 557*19c3b8c2SApple OSS Distributions do \ 558*19c3b8c2SApple OSS Distributions { \ 559*19c3b8c2SApple OSS Distributions long evalOnceErrorCode = (errorCode); \ 560*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ 561*19c3b8c2SApple OSS Distributions { \ 562*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 563*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 564*19c3b8c2SApple OSS Distributions #errorCode " == 0 ", 0, message, __FILE__, __LINE__, evalOnceErrorCode ); \ 565*19c3b8c2SApple OSS Distributions } \ 566*19c3b8c2SApple OSS Distributions } while ( 0 ) 567*19c3b8c2SApple OSS Distributions #endif 568*19c3b8c2SApple OSS Distributions #endif 569*19c3b8c2SApple OSS Distributions 570*19c3b8c2SApple OSS Distributions /* 571*19c3b8c2SApple OSS Distributions * __Verify_noErr_Action(errorCode, action) 572*19c3b8c2SApple OSS Distributions * 573*19c3b8c2SApple OSS Distributions * Summary: 574*19c3b8c2SApple OSS Distributions * Production builds: if the errorCode expression does not equal 0 (noErr), 575*19c3b8c2SApple OSS Distributions * execute the action statement or compound statement (block). 576*19c3b8c2SApple OSS Distributions * 577*19c3b8c2SApple OSS Distributions * Non-production builds: if the errorCode expression does not equal 0 (noErr), 578*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE and then execute the action statement or compound 579*19c3b8c2SApple OSS Distributions * statement (block). 580*19c3b8c2SApple OSS Distributions * 581*19c3b8c2SApple OSS Distributions * Parameters: 582*19c3b8c2SApple OSS Distributions * 583*19c3b8c2SApple OSS Distributions * errorCode: 584*19c3b8c2SApple OSS Distributions * The expression to compare to 0. 585*19c3b8c2SApple OSS Distributions * 586*19c3b8c2SApple OSS Distributions * action: 587*19c3b8c2SApple OSS Distributions * The statement or compound statement (block). 588*19c3b8c2SApple OSS Distributions */ 589*19c3b8c2SApple OSS Distributions #ifndef __Verify_noErr_Action 590*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 591*19c3b8c2SApple OSS Distributions #define __Verify_noErr_Action(errorCode, action) \ 592*19c3b8c2SApple OSS Distributions if ( 0 != (errorCode) ) { \ 593*19c3b8c2SApple OSS Distributions action; \ 594*19c3b8c2SApple OSS Distributions } \ 595*19c3b8c2SApple OSS Distributions else do {} while (0) 596*19c3b8c2SApple OSS Distributions #else 597*19c3b8c2SApple OSS Distributions #define __Verify_noErr_Action(errorCode, action) \ 598*19c3b8c2SApple OSS Distributions do { \ 599*19c3b8c2SApple OSS Distributions long evalOnceErrorCode = (errorCode); \ 600*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) { \ 601*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 602*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 603*19c3b8c2SApple OSS Distributions #errorCode " == 0 ", 0, 0, __FILE__, __LINE__, evalOnceErrorCode ); \ 604*19c3b8c2SApple OSS Distributions action; \ 605*19c3b8c2SApple OSS Distributions } \ 606*19c3b8c2SApple OSS Distributions } while (0) 607*19c3b8c2SApple OSS Distributions #endif 608*19c3b8c2SApple OSS Distributions #endif 609*19c3b8c2SApple OSS Distributions 610*19c3b8c2SApple OSS Distributions /* 611*19c3b8c2SApple OSS Distributions * __Verify_Action(assertion, action) 612*19c3b8c2SApple OSS Distributions * 613*19c3b8c2SApple OSS Distributions * Summary: 614*19c3b8c2SApple OSS Distributions * Production builds: if the assertion expression evaluates to false, 615*19c3b8c2SApple OSS Distributions * then execute the action statement or compound statement (block). 616*19c3b8c2SApple OSS Distributions * 617*19c3b8c2SApple OSS Distributions * Non-production builds: if the assertion expression evaluates to false, 618*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE and then execute the action statement or compound 619*19c3b8c2SApple OSS Distributions * statement (block). 620*19c3b8c2SApple OSS Distributions * 621*19c3b8c2SApple OSS Distributions * Parameters: 622*19c3b8c2SApple OSS Distributions * 623*19c3b8c2SApple OSS Distributions * assertion: 624*19c3b8c2SApple OSS Distributions * The assertion expression. 625*19c3b8c2SApple OSS Distributions * 626*19c3b8c2SApple OSS Distributions * action: 627*19c3b8c2SApple OSS Distributions * The statement or compound statement (block). 628*19c3b8c2SApple OSS Distributions */ 629*19c3b8c2SApple OSS Distributions #ifndef __Verify_Action 630*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 631*19c3b8c2SApple OSS Distributions #define __Verify_Action(assertion, action) \ 632*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) { \ 633*19c3b8c2SApple OSS Distributions action; \ 634*19c3b8c2SApple OSS Distributions } \ 635*19c3b8c2SApple OSS Distributions else do {} while (0) 636*19c3b8c2SApple OSS Distributions #else 637*19c3b8c2SApple OSS Distributions #define __Verify_Action(assertion, action) \ 638*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) { \ 639*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 640*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 641*19c3b8c2SApple OSS Distributions #assertion, 0, 0, __FILE__, __LINE__, 0 ); \ 642*19c3b8c2SApple OSS Distributions action; \ 643*19c3b8c2SApple OSS Distributions } \ 644*19c3b8c2SApple OSS Distributions else do {} while (0) 645*19c3b8c2SApple OSS Distributions #endif 646*19c3b8c2SApple OSS Distributions #endif 647*19c3b8c2SApple OSS Distributions 648*19c3b8c2SApple OSS Distributions /* 649*19c3b8c2SApple OSS Distributions * __Require(assertion, exceptionLabel) 650*19c3b8c2SApple OSS Distributions * 651*19c3b8c2SApple OSS Distributions * Summary: 652*19c3b8c2SApple OSS Distributions * Production builds: if the assertion expression evaluates to false, 653*19c3b8c2SApple OSS Distributions * goto exceptionLabel. 654*19c3b8c2SApple OSS Distributions * 655*19c3b8c2SApple OSS Distributions * Non-production builds: if the assertion expression evaluates to false, 656*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE and then goto exceptionLabel. 657*19c3b8c2SApple OSS Distributions * 658*19c3b8c2SApple OSS Distributions * Parameters: 659*19c3b8c2SApple OSS Distributions * 660*19c3b8c2SApple OSS Distributions * assertion: 661*19c3b8c2SApple OSS Distributions * The assertion expression. 662*19c3b8c2SApple OSS Distributions * 663*19c3b8c2SApple OSS Distributions * exceptionLabel: 664*19c3b8c2SApple OSS Distributions * The label. 665*19c3b8c2SApple OSS Distributions */ 666*19c3b8c2SApple OSS Distributions #ifndef __Require 667*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 668*19c3b8c2SApple OSS Distributions #define __Require(assertion, exceptionLabel) \ 669*19c3b8c2SApple OSS Distributions do \ 670*19c3b8c2SApple OSS Distributions { \ 671*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) \ 672*19c3b8c2SApple OSS Distributions { \ 673*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 674*19c3b8c2SApple OSS Distributions } \ 675*19c3b8c2SApple OSS Distributions } while ( 0 ) 676*19c3b8c2SApple OSS Distributions #else 677*19c3b8c2SApple OSS Distributions #define __Require(assertion, exceptionLabel) \ 678*19c3b8c2SApple OSS Distributions do \ 679*19c3b8c2SApple OSS Distributions { \ 680*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) { \ 681*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 682*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 683*19c3b8c2SApple OSS Distributions #assertion, #exceptionLabel, 0, __FILE__, __LINE__, 0); \ 684*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 685*19c3b8c2SApple OSS Distributions } \ 686*19c3b8c2SApple OSS Distributions } while ( 0 ) 687*19c3b8c2SApple OSS Distributions #endif 688*19c3b8c2SApple OSS Distributions #endif 689*19c3b8c2SApple OSS Distributions 690*19c3b8c2SApple OSS Distributions #ifndef __nRequire 691*19c3b8c2SApple OSS Distributions #define __nRequire(assertion, exceptionLabel) __Require(!(assertion), exceptionLabel) 692*19c3b8c2SApple OSS Distributions #endif 693*19c3b8c2SApple OSS Distributions 694*19c3b8c2SApple OSS Distributions /* 695*19c3b8c2SApple OSS Distributions * __Require_Action(assertion, exceptionLabel, action) 696*19c3b8c2SApple OSS Distributions * 697*19c3b8c2SApple OSS Distributions * Summary: 698*19c3b8c2SApple OSS Distributions * Production builds: if the assertion expression evaluates to false, 699*19c3b8c2SApple OSS Distributions * execute the action statement or compound statement (block) and then 700*19c3b8c2SApple OSS Distributions * goto exceptionLabel. 701*19c3b8c2SApple OSS Distributions * 702*19c3b8c2SApple OSS Distributions * Non-production builds: if the assertion expression evaluates to false, 703*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE, execute the action statement or compound 704*19c3b8c2SApple OSS Distributions * statement (block), and then goto exceptionLabel. 705*19c3b8c2SApple OSS Distributions * 706*19c3b8c2SApple OSS Distributions * Parameters: 707*19c3b8c2SApple OSS Distributions * 708*19c3b8c2SApple OSS Distributions * assertion: 709*19c3b8c2SApple OSS Distributions * The assertion expression. 710*19c3b8c2SApple OSS Distributions * 711*19c3b8c2SApple OSS Distributions * exceptionLabel: 712*19c3b8c2SApple OSS Distributions * The label. 713*19c3b8c2SApple OSS Distributions * 714*19c3b8c2SApple OSS Distributions * action: 715*19c3b8c2SApple OSS Distributions * The statement or compound statement (block). 716*19c3b8c2SApple OSS Distributions */ 717*19c3b8c2SApple OSS Distributions #ifndef __Require_Action 718*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 719*19c3b8c2SApple OSS Distributions #define __Require_Action(assertion, exceptionLabel, action) \ 720*19c3b8c2SApple OSS Distributions do \ 721*19c3b8c2SApple OSS Distributions { \ 722*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) \ 723*19c3b8c2SApple OSS Distributions { \ 724*19c3b8c2SApple OSS Distributions { \ 725*19c3b8c2SApple OSS Distributions action; \ 726*19c3b8c2SApple OSS Distributions } \ 727*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 728*19c3b8c2SApple OSS Distributions } \ 729*19c3b8c2SApple OSS Distributions } while ( 0 ) 730*19c3b8c2SApple OSS Distributions #else 731*19c3b8c2SApple OSS Distributions #define __Require_Action(assertion, exceptionLabel, action) \ 732*19c3b8c2SApple OSS Distributions do \ 733*19c3b8c2SApple OSS Distributions { \ 734*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) \ 735*19c3b8c2SApple OSS Distributions { \ 736*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 737*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 738*19c3b8c2SApple OSS Distributions #assertion, #exceptionLabel, 0, __FILE__, __LINE__, 0); \ 739*19c3b8c2SApple OSS Distributions { \ 740*19c3b8c2SApple OSS Distributions action; \ 741*19c3b8c2SApple OSS Distributions } \ 742*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 743*19c3b8c2SApple OSS Distributions } \ 744*19c3b8c2SApple OSS Distributions } while ( 0 ) 745*19c3b8c2SApple OSS Distributions #endif 746*19c3b8c2SApple OSS Distributions #endif 747*19c3b8c2SApple OSS Distributions 748*19c3b8c2SApple OSS Distributions #ifndef __nRequire_Action 749*19c3b8c2SApple OSS Distributions #define __nRequire_Action(assertion, exceptionLabel, action) \ 750*19c3b8c2SApple OSS Distributions __Require_Action(!(assertion), exceptionLabel, action) 751*19c3b8c2SApple OSS Distributions #endif 752*19c3b8c2SApple OSS Distributions 753*19c3b8c2SApple OSS Distributions /* 754*19c3b8c2SApple OSS Distributions * __Require_Quiet(assertion, exceptionLabel) 755*19c3b8c2SApple OSS Distributions * 756*19c3b8c2SApple OSS Distributions * Summary: 757*19c3b8c2SApple OSS Distributions * If the assertion expression evaluates to false, goto exceptionLabel. 758*19c3b8c2SApple OSS Distributions * 759*19c3b8c2SApple OSS Distributions * Parameters: 760*19c3b8c2SApple OSS Distributions * 761*19c3b8c2SApple OSS Distributions * assertion: 762*19c3b8c2SApple OSS Distributions * The assertion expression. 763*19c3b8c2SApple OSS Distributions * 764*19c3b8c2SApple OSS Distributions * exceptionLabel: 765*19c3b8c2SApple OSS Distributions * The label. 766*19c3b8c2SApple OSS Distributions */ 767*19c3b8c2SApple OSS Distributions #ifndef __Require_Quiet 768*19c3b8c2SApple OSS Distributions #define __Require_Quiet(assertion, exceptionLabel) \ 769*19c3b8c2SApple OSS Distributions do \ 770*19c3b8c2SApple OSS Distributions { \ 771*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) \ 772*19c3b8c2SApple OSS Distributions { \ 773*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 774*19c3b8c2SApple OSS Distributions } \ 775*19c3b8c2SApple OSS Distributions } while ( 0 ) 776*19c3b8c2SApple OSS Distributions #endif 777*19c3b8c2SApple OSS Distributions 778*19c3b8c2SApple OSS Distributions #ifndef __nRequire_Quiet 779*19c3b8c2SApple OSS Distributions #define __nRequire_Quiet(assertion, exceptionLabel) __Require_Quiet(!(assertion), exceptionLabel) 780*19c3b8c2SApple OSS Distributions #endif 781*19c3b8c2SApple OSS Distributions 782*19c3b8c2SApple OSS Distributions /* 783*19c3b8c2SApple OSS Distributions * __Require_Action_Quiet(assertion, exceptionLabel, action) 784*19c3b8c2SApple OSS Distributions * 785*19c3b8c2SApple OSS Distributions * Summary: 786*19c3b8c2SApple OSS Distributions * If the assertion expression evaluates to false, execute the action 787*19c3b8c2SApple OSS Distributions * statement or compound statement (block), and goto exceptionLabel. 788*19c3b8c2SApple OSS Distributions * 789*19c3b8c2SApple OSS Distributions * Parameters: 790*19c3b8c2SApple OSS Distributions * 791*19c3b8c2SApple OSS Distributions * assertion: 792*19c3b8c2SApple OSS Distributions * The assertion expression. 793*19c3b8c2SApple OSS Distributions * 794*19c3b8c2SApple OSS Distributions * exceptionLabel: 795*19c3b8c2SApple OSS Distributions * The label. 796*19c3b8c2SApple OSS Distributions * 797*19c3b8c2SApple OSS Distributions * action: 798*19c3b8c2SApple OSS Distributions * The statement or compound statement (block). 799*19c3b8c2SApple OSS Distributions */ 800*19c3b8c2SApple OSS Distributions #ifndef __Require_Action_Quiet 801*19c3b8c2SApple OSS Distributions #define __Require_Action_Quiet(assertion, exceptionLabel, action) \ 802*19c3b8c2SApple OSS Distributions do \ 803*19c3b8c2SApple OSS Distributions { \ 804*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) \ 805*19c3b8c2SApple OSS Distributions { \ 806*19c3b8c2SApple OSS Distributions { \ 807*19c3b8c2SApple OSS Distributions action; \ 808*19c3b8c2SApple OSS Distributions } \ 809*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 810*19c3b8c2SApple OSS Distributions } \ 811*19c3b8c2SApple OSS Distributions } while ( 0 ) 812*19c3b8c2SApple OSS Distributions #endif 813*19c3b8c2SApple OSS Distributions 814*19c3b8c2SApple OSS Distributions #ifndef __nRequire_Action_Quiet 815*19c3b8c2SApple OSS Distributions #define __nRequire_Action_Quiet(assertion, exceptionLabel, action) \ 816*19c3b8c2SApple OSS Distributions __Require_Action_Quiet(!(assertion), exceptionLabel, action) 817*19c3b8c2SApple OSS Distributions #endif 818*19c3b8c2SApple OSS Distributions 819*19c3b8c2SApple OSS Distributions /* 820*19c3b8c2SApple OSS Distributions * __Require_String(assertion, exceptionLabel, message) 821*19c3b8c2SApple OSS Distributions * 822*19c3b8c2SApple OSS Distributions * Summary: 823*19c3b8c2SApple OSS Distributions * Production builds: if the assertion expression evaluates to false, 824*19c3b8c2SApple OSS Distributions * goto exceptionLabel. 825*19c3b8c2SApple OSS Distributions * 826*19c3b8c2SApple OSS Distributions * Non-production builds: if the assertion expression evaluates to false, 827*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE, and then goto exceptionLabel. 828*19c3b8c2SApple OSS Distributions * 829*19c3b8c2SApple OSS Distributions * Parameters: 830*19c3b8c2SApple OSS Distributions * 831*19c3b8c2SApple OSS Distributions * assertion: 832*19c3b8c2SApple OSS Distributions * The assertion expression. 833*19c3b8c2SApple OSS Distributions * 834*19c3b8c2SApple OSS Distributions * exceptionLabel: 835*19c3b8c2SApple OSS Distributions * The label. 836*19c3b8c2SApple OSS Distributions * 837*19c3b8c2SApple OSS Distributions * message: 838*19c3b8c2SApple OSS Distributions * The C string to display. 839*19c3b8c2SApple OSS Distributions */ 840*19c3b8c2SApple OSS Distributions #ifndef __Require_String 841*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 842*19c3b8c2SApple OSS Distributions #define __Require_String(assertion, exceptionLabel, message) \ 843*19c3b8c2SApple OSS Distributions do \ 844*19c3b8c2SApple OSS Distributions { \ 845*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) \ 846*19c3b8c2SApple OSS Distributions { \ 847*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 848*19c3b8c2SApple OSS Distributions } \ 849*19c3b8c2SApple OSS Distributions } while ( 0 ) 850*19c3b8c2SApple OSS Distributions #else 851*19c3b8c2SApple OSS Distributions #define __Require_String(assertion, exceptionLabel, message) \ 852*19c3b8c2SApple OSS Distributions do \ 853*19c3b8c2SApple OSS Distributions { \ 854*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) \ 855*19c3b8c2SApple OSS Distributions { \ 856*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 857*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 858*19c3b8c2SApple OSS Distributions #assertion, #exceptionLabel, message, __FILE__, __LINE__, 0); \ 859*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 860*19c3b8c2SApple OSS Distributions } \ 861*19c3b8c2SApple OSS Distributions } while ( 0 ) 862*19c3b8c2SApple OSS Distributions #endif 863*19c3b8c2SApple OSS Distributions #endif 864*19c3b8c2SApple OSS Distributions 865*19c3b8c2SApple OSS Distributions #ifndef __nRequire_String 866*19c3b8c2SApple OSS Distributions #define __nRequire_String(assertion, exceptionLabel, string) \ 867*19c3b8c2SApple OSS Distributions __Require_String(!(assertion), exceptionLabel, string) 868*19c3b8c2SApple OSS Distributions #endif 869*19c3b8c2SApple OSS Distributions 870*19c3b8c2SApple OSS Distributions /* 871*19c3b8c2SApple OSS Distributions * __Require_Action_String(assertion, exceptionLabel, action, message) 872*19c3b8c2SApple OSS Distributions * 873*19c3b8c2SApple OSS Distributions * Summary: 874*19c3b8c2SApple OSS Distributions * Production builds: if the assertion expression evaluates to false, 875*19c3b8c2SApple OSS Distributions * execute the action statement or compound statement (block), and then 876*19c3b8c2SApple OSS Distributions * goto exceptionLabel. 877*19c3b8c2SApple OSS Distributions * 878*19c3b8c2SApple OSS Distributions * Non-production builds: if the assertion expression evaluates to false, 879*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE, execute the action statement or compound 880*19c3b8c2SApple OSS Distributions * statement (block), and then goto exceptionLabel. 881*19c3b8c2SApple OSS Distributions * 882*19c3b8c2SApple OSS Distributions * Parameters: 883*19c3b8c2SApple OSS Distributions * 884*19c3b8c2SApple OSS Distributions * assertion: 885*19c3b8c2SApple OSS Distributions * The assertion expression. 886*19c3b8c2SApple OSS Distributions * 887*19c3b8c2SApple OSS Distributions * exceptionLabel: 888*19c3b8c2SApple OSS Distributions * The label. 889*19c3b8c2SApple OSS Distributions * 890*19c3b8c2SApple OSS Distributions * action: 891*19c3b8c2SApple OSS Distributions * The statement or compound statement (block). 892*19c3b8c2SApple OSS Distributions * 893*19c3b8c2SApple OSS Distributions * message: 894*19c3b8c2SApple OSS Distributions * The C string to display. 895*19c3b8c2SApple OSS Distributions */ 896*19c3b8c2SApple OSS Distributions #ifndef __Require_Action_String 897*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 898*19c3b8c2SApple OSS Distributions #define __Require_Action_String(assertion, exceptionLabel, action, message) \ 899*19c3b8c2SApple OSS Distributions do \ 900*19c3b8c2SApple OSS Distributions { \ 901*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) \ 902*19c3b8c2SApple OSS Distributions { \ 903*19c3b8c2SApple OSS Distributions { \ 904*19c3b8c2SApple OSS Distributions action; \ 905*19c3b8c2SApple OSS Distributions } \ 906*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 907*19c3b8c2SApple OSS Distributions } \ 908*19c3b8c2SApple OSS Distributions } while ( 0 ) 909*19c3b8c2SApple OSS Distributions #else 910*19c3b8c2SApple OSS Distributions #define __Require_Action_String(assertion, exceptionLabel, action, message) \ 911*19c3b8c2SApple OSS Distributions do \ 912*19c3b8c2SApple OSS Distributions { \ 913*19c3b8c2SApple OSS Distributions if ( __builtin_expect(!(assertion), 0) ) \ 914*19c3b8c2SApple OSS Distributions { \ 915*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 916*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 917*19c3b8c2SApple OSS Distributions #assertion, #exceptionLabel, message, __FILE__, __LINE__, 0); \ 918*19c3b8c2SApple OSS Distributions { \ 919*19c3b8c2SApple OSS Distributions action; \ 920*19c3b8c2SApple OSS Distributions } \ 921*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 922*19c3b8c2SApple OSS Distributions } \ 923*19c3b8c2SApple OSS Distributions } while ( 0 ) 924*19c3b8c2SApple OSS Distributions #endif 925*19c3b8c2SApple OSS Distributions #endif 926*19c3b8c2SApple OSS Distributions 927*19c3b8c2SApple OSS Distributions #ifndef __nRequire_Action_String 928*19c3b8c2SApple OSS Distributions #define __nRequire_Action_String(assertion, exceptionLabel, action, message) \ 929*19c3b8c2SApple OSS Distributions __Require_Action_String(!(assertion), exceptionLabel, action, message) 930*19c3b8c2SApple OSS Distributions #endif 931*19c3b8c2SApple OSS Distributions 932*19c3b8c2SApple OSS Distributions /* 933*19c3b8c2SApple OSS Distributions * __Require_noErr(errorCode, exceptionLabel) 934*19c3b8c2SApple OSS Distributions * 935*19c3b8c2SApple OSS Distributions * Summary: 936*19c3b8c2SApple OSS Distributions * Production builds: if the errorCode expression does not equal 0 (noErr), 937*19c3b8c2SApple OSS Distributions * goto exceptionLabel. 938*19c3b8c2SApple OSS Distributions * 939*19c3b8c2SApple OSS Distributions * Non-production builds: if the errorCode expression does not equal 0 (noErr), 940*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE and then goto exceptionLabel. 941*19c3b8c2SApple OSS Distributions * 942*19c3b8c2SApple OSS Distributions * Parameters: 943*19c3b8c2SApple OSS Distributions * 944*19c3b8c2SApple OSS Distributions * errorCode: 945*19c3b8c2SApple OSS Distributions * The expression to compare to 0. 946*19c3b8c2SApple OSS Distributions * 947*19c3b8c2SApple OSS Distributions * exceptionLabel: 948*19c3b8c2SApple OSS Distributions * The label. 949*19c3b8c2SApple OSS Distributions */ 950*19c3b8c2SApple OSS Distributions #ifndef __Require_noErr 951*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 952*19c3b8c2SApple OSS Distributions #define __Require_noErr(errorCode, exceptionLabel) \ 953*19c3b8c2SApple OSS Distributions do \ 954*19c3b8c2SApple OSS Distributions { \ 955*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != (errorCode), 0) ) \ 956*19c3b8c2SApple OSS Distributions { \ 957*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 958*19c3b8c2SApple OSS Distributions } \ 959*19c3b8c2SApple OSS Distributions } while ( 0 ) 960*19c3b8c2SApple OSS Distributions #else 961*19c3b8c2SApple OSS Distributions #define __Require_noErr(errorCode, exceptionLabel) \ 962*19c3b8c2SApple OSS Distributions do \ 963*19c3b8c2SApple OSS Distributions { \ 964*19c3b8c2SApple OSS Distributions long evalOnceErrorCode = (errorCode); \ 965*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ 966*19c3b8c2SApple OSS Distributions { \ 967*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 968*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 969*19c3b8c2SApple OSS Distributions #errorCode " == 0 ", #exceptionLabel, 0, __FILE__, __LINE__, evalOnceErrorCode); \ 970*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 971*19c3b8c2SApple OSS Distributions } \ 972*19c3b8c2SApple OSS Distributions } while ( 0 ) 973*19c3b8c2SApple OSS Distributions #endif 974*19c3b8c2SApple OSS Distributions #endif 975*19c3b8c2SApple OSS Distributions 976*19c3b8c2SApple OSS Distributions /* 977*19c3b8c2SApple OSS Distributions * __Require_noErr_Action(errorCode, exceptionLabel, action) 978*19c3b8c2SApple OSS Distributions * 979*19c3b8c2SApple OSS Distributions * Summary: 980*19c3b8c2SApple OSS Distributions * Production builds: if the errorCode expression does not equal 0 (noErr), 981*19c3b8c2SApple OSS Distributions * execute the action statement or compound statement (block) and 982*19c3b8c2SApple OSS Distributions * goto exceptionLabel. 983*19c3b8c2SApple OSS Distributions * 984*19c3b8c2SApple OSS Distributions * Non-production builds: if the errorCode expression does not equal 0 (noErr), 985*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE, execute the action statement or 986*19c3b8c2SApple OSS Distributions * compound statement (block), and then goto exceptionLabel. 987*19c3b8c2SApple OSS Distributions * 988*19c3b8c2SApple OSS Distributions * Parameters: 989*19c3b8c2SApple OSS Distributions * 990*19c3b8c2SApple OSS Distributions * errorCode: 991*19c3b8c2SApple OSS Distributions * The expression to compare to 0. 992*19c3b8c2SApple OSS Distributions * 993*19c3b8c2SApple OSS Distributions * exceptionLabel: 994*19c3b8c2SApple OSS Distributions * The label. 995*19c3b8c2SApple OSS Distributions * 996*19c3b8c2SApple OSS Distributions * action: 997*19c3b8c2SApple OSS Distributions * The statement or compound statement (block). 998*19c3b8c2SApple OSS Distributions */ 999*19c3b8c2SApple OSS Distributions #ifndef __Require_noErr_Action 1000*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 1001*19c3b8c2SApple OSS Distributions #define __Require_noErr_Action(errorCode, exceptionLabel, action) \ 1002*19c3b8c2SApple OSS Distributions do \ 1003*19c3b8c2SApple OSS Distributions { \ 1004*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != (errorCode), 0) ) \ 1005*19c3b8c2SApple OSS Distributions { \ 1006*19c3b8c2SApple OSS Distributions { \ 1007*19c3b8c2SApple OSS Distributions action; \ 1008*19c3b8c2SApple OSS Distributions } \ 1009*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 1010*19c3b8c2SApple OSS Distributions } \ 1011*19c3b8c2SApple OSS Distributions } while ( 0 ) 1012*19c3b8c2SApple OSS Distributions #else 1013*19c3b8c2SApple OSS Distributions #define __Require_noErr_Action(errorCode, exceptionLabel, action) \ 1014*19c3b8c2SApple OSS Distributions do \ 1015*19c3b8c2SApple OSS Distributions { \ 1016*19c3b8c2SApple OSS Distributions long evalOnceErrorCode = (errorCode); \ 1017*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ 1018*19c3b8c2SApple OSS Distributions { \ 1019*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 1020*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 1021*19c3b8c2SApple OSS Distributions #errorCode " == 0 ", #exceptionLabel, 0, __FILE__, __LINE__, evalOnceErrorCode); \ 1022*19c3b8c2SApple OSS Distributions { \ 1023*19c3b8c2SApple OSS Distributions action; \ 1024*19c3b8c2SApple OSS Distributions } \ 1025*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 1026*19c3b8c2SApple OSS Distributions } \ 1027*19c3b8c2SApple OSS Distributions } while ( 0 ) 1028*19c3b8c2SApple OSS Distributions #endif 1029*19c3b8c2SApple OSS Distributions #endif 1030*19c3b8c2SApple OSS Distributions 1031*19c3b8c2SApple OSS Distributions /* 1032*19c3b8c2SApple OSS Distributions * __Require_noErr_Quiet(errorCode, exceptionLabel) 1033*19c3b8c2SApple OSS Distributions * 1034*19c3b8c2SApple OSS Distributions * Summary: 1035*19c3b8c2SApple OSS Distributions * If the errorCode expression does not equal 0 (noErr), 1036*19c3b8c2SApple OSS Distributions * goto exceptionLabel. 1037*19c3b8c2SApple OSS Distributions * 1038*19c3b8c2SApple OSS Distributions * Parameters: 1039*19c3b8c2SApple OSS Distributions * 1040*19c3b8c2SApple OSS Distributions * errorCode: 1041*19c3b8c2SApple OSS Distributions * The expression to compare to 0. 1042*19c3b8c2SApple OSS Distributions * 1043*19c3b8c2SApple OSS Distributions * exceptionLabel: 1044*19c3b8c2SApple OSS Distributions * The label. 1045*19c3b8c2SApple OSS Distributions */ 1046*19c3b8c2SApple OSS Distributions #ifndef __Require_noErr_Quiet 1047*19c3b8c2SApple OSS Distributions #define __Require_noErr_Quiet(errorCode, exceptionLabel) \ 1048*19c3b8c2SApple OSS Distributions do \ 1049*19c3b8c2SApple OSS Distributions { \ 1050*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != (errorCode), 0) ) \ 1051*19c3b8c2SApple OSS Distributions { \ 1052*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 1053*19c3b8c2SApple OSS Distributions } \ 1054*19c3b8c2SApple OSS Distributions } while ( 0 ) 1055*19c3b8c2SApple OSS Distributions #endif 1056*19c3b8c2SApple OSS Distributions 1057*19c3b8c2SApple OSS Distributions /* 1058*19c3b8c2SApple OSS Distributions * __Require_noErr_Action_Quiet(errorCode, exceptionLabel, action) 1059*19c3b8c2SApple OSS Distributions * 1060*19c3b8c2SApple OSS Distributions * Summary: 1061*19c3b8c2SApple OSS Distributions * If the errorCode expression does not equal 0 (noErr), 1062*19c3b8c2SApple OSS Distributions * execute the action statement or compound statement (block) and 1063*19c3b8c2SApple OSS Distributions * goto exceptionLabel. 1064*19c3b8c2SApple OSS Distributions * 1065*19c3b8c2SApple OSS Distributions * Parameters: 1066*19c3b8c2SApple OSS Distributions * 1067*19c3b8c2SApple OSS Distributions * errorCode: 1068*19c3b8c2SApple OSS Distributions * The expression to compare to 0. 1069*19c3b8c2SApple OSS Distributions * 1070*19c3b8c2SApple OSS Distributions * exceptionLabel: 1071*19c3b8c2SApple OSS Distributions * The label. 1072*19c3b8c2SApple OSS Distributions * 1073*19c3b8c2SApple OSS Distributions * action: 1074*19c3b8c2SApple OSS Distributions * The statement or compound statement (block). 1075*19c3b8c2SApple OSS Distributions */ 1076*19c3b8c2SApple OSS Distributions #ifndef __Require_noErr_Action_Quiet 1077*19c3b8c2SApple OSS Distributions #define __Require_noErr_Action_Quiet(errorCode, exceptionLabel, action) \ 1078*19c3b8c2SApple OSS Distributions do \ 1079*19c3b8c2SApple OSS Distributions { \ 1080*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != (errorCode), 0) ) \ 1081*19c3b8c2SApple OSS Distributions { \ 1082*19c3b8c2SApple OSS Distributions { \ 1083*19c3b8c2SApple OSS Distributions action; \ 1084*19c3b8c2SApple OSS Distributions } \ 1085*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 1086*19c3b8c2SApple OSS Distributions } \ 1087*19c3b8c2SApple OSS Distributions } while ( 0 ) 1088*19c3b8c2SApple OSS Distributions #endif 1089*19c3b8c2SApple OSS Distributions 1090*19c3b8c2SApple OSS Distributions /* 1091*19c3b8c2SApple OSS Distributions * __Require_noErr_String(errorCode, exceptionLabel, message) 1092*19c3b8c2SApple OSS Distributions * 1093*19c3b8c2SApple OSS Distributions * Summary: 1094*19c3b8c2SApple OSS Distributions * Production builds: if the errorCode expression does not equal 0 (noErr), 1095*19c3b8c2SApple OSS Distributions * goto exceptionLabel. 1096*19c3b8c2SApple OSS Distributions * 1097*19c3b8c2SApple OSS Distributions * Non-production builds: if the errorCode expression does not equal 0 (noErr), 1098*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE, and then goto exceptionLabel. 1099*19c3b8c2SApple OSS Distributions * 1100*19c3b8c2SApple OSS Distributions * Parameters: 1101*19c3b8c2SApple OSS Distributions * 1102*19c3b8c2SApple OSS Distributions * errorCode: 1103*19c3b8c2SApple OSS Distributions * The expression to compare to 0. 1104*19c3b8c2SApple OSS Distributions * 1105*19c3b8c2SApple OSS Distributions * exceptionLabel: 1106*19c3b8c2SApple OSS Distributions * The label. 1107*19c3b8c2SApple OSS Distributions * 1108*19c3b8c2SApple OSS Distributions * message: 1109*19c3b8c2SApple OSS Distributions * The C string to display. 1110*19c3b8c2SApple OSS Distributions */ 1111*19c3b8c2SApple OSS Distributions #ifndef __Require_noErr_String 1112*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 1113*19c3b8c2SApple OSS Distributions #define __Require_noErr_String(errorCode, exceptionLabel, message) \ 1114*19c3b8c2SApple OSS Distributions do \ 1115*19c3b8c2SApple OSS Distributions { \ 1116*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != (errorCode), 0) ) \ 1117*19c3b8c2SApple OSS Distributions { \ 1118*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 1119*19c3b8c2SApple OSS Distributions } \ 1120*19c3b8c2SApple OSS Distributions } while ( 0 ) 1121*19c3b8c2SApple OSS Distributions #else 1122*19c3b8c2SApple OSS Distributions #define __Require_noErr_String(errorCode, exceptionLabel, message) \ 1123*19c3b8c2SApple OSS Distributions do \ 1124*19c3b8c2SApple OSS Distributions { \ 1125*19c3b8c2SApple OSS Distributions long evalOnceErrorCode = (errorCode); \ 1126*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ 1127*19c3b8c2SApple OSS Distributions { \ 1128*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 1129*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 1130*19c3b8c2SApple OSS Distributions #errorCode " == 0 ", #exceptionLabel, message, __FILE__, __LINE__, evalOnceErrorCode); \ 1131*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 1132*19c3b8c2SApple OSS Distributions } \ 1133*19c3b8c2SApple OSS Distributions } while ( 0 ) 1134*19c3b8c2SApple OSS Distributions #endif 1135*19c3b8c2SApple OSS Distributions #endif 1136*19c3b8c2SApple OSS Distributions 1137*19c3b8c2SApple OSS Distributions /* 1138*19c3b8c2SApple OSS Distributions * __Require_noErr_Action_String(errorCode, exceptionLabel, action, message) 1139*19c3b8c2SApple OSS Distributions * 1140*19c3b8c2SApple OSS Distributions * Summary: 1141*19c3b8c2SApple OSS Distributions * Production builds: if the errorCode expression does not equal 0 (noErr), 1142*19c3b8c2SApple OSS Distributions * execute the action statement or compound statement (block) and 1143*19c3b8c2SApple OSS Distributions * goto exceptionLabel. 1144*19c3b8c2SApple OSS Distributions * 1145*19c3b8c2SApple OSS Distributions * Non-production builds: if the errorCode expression does not equal 0 (noErr), 1146*19c3b8c2SApple OSS Distributions * call DEBUG_ASSERT_MESSAGE, execute the action statement or compound 1147*19c3b8c2SApple OSS Distributions * statement (block), and then goto exceptionLabel. 1148*19c3b8c2SApple OSS Distributions * 1149*19c3b8c2SApple OSS Distributions * Parameters: 1150*19c3b8c2SApple OSS Distributions * 1151*19c3b8c2SApple OSS Distributions * errorCode: 1152*19c3b8c2SApple OSS Distributions * The expression to compare to 0. 1153*19c3b8c2SApple OSS Distributions * 1154*19c3b8c2SApple OSS Distributions * exceptionLabel: 1155*19c3b8c2SApple OSS Distributions * The label. 1156*19c3b8c2SApple OSS Distributions * 1157*19c3b8c2SApple OSS Distributions * action: 1158*19c3b8c2SApple OSS Distributions * The statement or compound statement (block). 1159*19c3b8c2SApple OSS Distributions * 1160*19c3b8c2SApple OSS Distributions * message: 1161*19c3b8c2SApple OSS Distributions * The C string to display. 1162*19c3b8c2SApple OSS Distributions */ 1163*19c3b8c2SApple OSS Distributions #ifndef __Require_noErr_Action_String 1164*19c3b8c2SApple OSS Distributions #if DEBUG_ASSERT_PRODUCTION_CODE 1165*19c3b8c2SApple OSS Distributions #define __Require_noErr_Action_String(errorCode, exceptionLabel, action, message) \ 1166*19c3b8c2SApple OSS Distributions do \ 1167*19c3b8c2SApple OSS Distributions { \ 1168*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != (errorCode), 0) ) \ 1169*19c3b8c2SApple OSS Distributions { \ 1170*19c3b8c2SApple OSS Distributions { \ 1171*19c3b8c2SApple OSS Distributions action; \ 1172*19c3b8c2SApple OSS Distributions } \ 1173*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 1174*19c3b8c2SApple OSS Distributions } \ 1175*19c3b8c2SApple OSS Distributions } while ( 0 ) 1176*19c3b8c2SApple OSS Distributions #else 1177*19c3b8c2SApple OSS Distributions #define __Require_noErr_Action_String(errorCode, exceptionLabel, action, message) \ 1178*19c3b8c2SApple OSS Distributions do \ 1179*19c3b8c2SApple OSS Distributions { \ 1180*19c3b8c2SApple OSS Distributions long evalOnceErrorCode = (errorCode); \ 1181*19c3b8c2SApple OSS Distributions if ( __builtin_expect(0 != evalOnceErrorCode, 0) ) \ 1182*19c3b8c2SApple OSS Distributions { \ 1183*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_MESSAGE( \ 1184*19c3b8c2SApple OSS Distributions DEBUG_ASSERT_COMPONENT_NAME_STRING, \ 1185*19c3b8c2SApple OSS Distributions #errorCode " == 0 ", #exceptionLabel, message, __FILE__, __LINE__, evalOnceErrorCode); \ 1186*19c3b8c2SApple OSS Distributions { \ 1187*19c3b8c2SApple OSS Distributions action; \ 1188*19c3b8c2SApple OSS Distributions } \ 1189*19c3b8c2SApple OSS Distributions goto exceptionLabel; \ 1190*19c3b8c2SApple OSS Distributions } \ 1191*19c3b8c2SApple OSS Distributions } while ( 0 ) 1192*19c3b8c2SApple OSS Distributions #endif 1193*19c3b8c2SApple OSS Distributions #endif 1194*19c3b8c2SApple OSS Distributions 1195*19c3b8c2SApple OSS Distributions /* 1196*19c3b8c2SApple OSS Distributions * __Check_Compile_Time(expr) 1197*19c3b8c2SApple OSS Distributions * 1198*19c3b8c2SApple OSS Distributions * Summary: 1199*19c3b8c2SApple OSS Distributions * any build: if the expression is not true, generated a compile time error. 1200*19c3b8c2SApple OSS Distributions * 1201*19c3b8c2SApple OSS Distributions * Parameters: 1202*19c3b8c2SApple OSS Distributions * 1203*19c3b8c2SApple OSS Distributions * expr: 1204*19c3b8c2SApple OSS Distributions * The compile time expression that should evaluate to non-zero. 1205*19c3b8c2SApple OSS Distributions * 1206*19c3b8c2SApple OSS Distributions * Discussion: 1207*19c3b8c2SApple OSS Distributions * This declares an array with a size that is determined by a compile-time expression. 1208*19c3b8c2SApple OSS Distributions * If false, it declares a negatively sized array, which generates a compile-time error. 1209*19c3b8c2SApple OSS Distributions * 1210*19c3b8c2SApple OSS Distributions * Examples: 1211*19c3b8c2SApple OSS Distributions * __Check_Compile_Time( sizeof( int ) == 4 ); 1212*19c3b8c2SApple OSS Distributions * __Check_Compile_Time( offsetof( MyStruct, myField ) == 4 ); 1213*19c3b8c2SApple OSS Distributions * __Check_Compile_Time( ( kMyBufferSize % 512 ) == 0 ); 1214*19c3b8c2SApple OSS Distributions * 1215*19c3b8c2SApple OSS Distributions * Note: This only works with compile-time expressions. 1216*19c3b8c2SApple OSS Distributions * Note: This only works in places where extern declarations are allowed (e.g. global scope). 1217*19c3b8c2SApple OSS Distributions */ 1218*19c3b8c2SApple OSS Distributions #ifndef __Check_Compile_Time 1219*19c3b8c2SApple OSS Distributions #ifdef __GNUC__ 1220*19c3b8c2SApple OSS Distributions #define __Check_Compile_Time( expr ) \ 1221*19c3b8c2SApple OSS Distributions extern int compile_time_assert_failed[ ( expr ) ? 1 : -1 ] __attribute__( ( unused ) ) 1222*19c3b8c2SApple OSS Distributions #else 1223*19c3b8c2SApple OSS Distributions #define __Check_Compile_Time( expr ) \ 1224*19c3b8c2SApple OSS Distributions extern int compile_time_assert_failed[ ( expr ) ? 1 : -1 ] 1225*19c3b8c2SApple OSS Distributions #endif 1226*19c3b8c2SApple OSS Distributions #endif 1227*19c3b8c2SApple OSS Distributions 1228*19c3b8c2SApple OSS Distributions /* 1229*19c3b8c2SApple OSS Distributions * For time immemorial, Mac OS X has defined version of most of these macros without the __ prefix, which 1230*19c3b8c2SApple OSS Distributions * could collide with similarly named functions or macros in user code, including new functionality in 1231*19c3b8c2SApple OSS Distributions * Boost and the C++ standard library. 1232*19c3b8c2SApple OSS Distributions * 1233*19c3b8c2SApple OSS Distributions * A future release of Mac OS X will no longer do this, and will require that clients move to the 1234*19c3b8c2SApple OSS Distributions * new macros as defined above. However, in the interim both the new and old macros will work, unless 1235*19c3b8c2SApple OSS Distributions * clients define a macro __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES before this file is included 1236*19c3b8c2SApple OSS Distributions * in their compilations. Clients who do not want the older macros defined can accomplish this by adding 1237*19c3b8c2SApple OSS Distributions * #define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 1238*19c3b8c2SApple OSS Distributions * at the top of their sources, or my adding -D__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0 to the 1239*19c3b8c2SApple OSS Distributions * gcc compilation options. 1240*19c3b8c2SApple OSS Distributions * 1241*19c3b8c2SApple OSS Distributions * To aid users of these macros in converting their sources, the following tops script will convert usages 1242*19c3b8c2SApple OSS Distributions * of the old macros into the new equivalents. To do so, in Terminal go into the directory containing the 1243*19c3b8c2SApple OSS Distributions * sources to be converted and run this command. 1244*19c3b8c2SApple OSS Distributions * 1245*19c3b8c2SApple OSS Distributions find . -name '*.[c|cc|cp|cpp|m|mm|h]' -print0 | xargs -0 tops -verbose \ 1246*19c3b8c2SApple OSS Distributions replace "check(<b args>)" with "__Check(<args>)" \ 1247*19c3b8c2SApple OSS Distributions replace "check_noerr(<b args>)" with "__Check_noErr(<args>)" \ 1248*19c3b8c2SApple OSS Distributions replace "check_noerr_string(<b args>)" with "__Check_noErr_String(<args>)" \ 1249*19c3b8c2SApple OSS Distributions replace "check_string(<b args>)" with "__Check_String(<args>)" \ 1250*19c3b8c2SApple OSS Distributions replace "require(<b args>)" with "__Require(<args>)" \ 1251*19c3b8c2SApple OSS Distributions replace "require_action(<b args>)" with "__Require_Action(<args>)" \ 1252*19c3b8c2SApple OSS Distributions replace "require_action_string(<b args>)" with "__Require_Action_String(<args>)" \ 1253*19c3b8c2SApple OSS Distributions replace "require_noerr(<b args>)" with "__Require_noErr(<args>)" \ 1254*19c3b8c2SApple OSS Distributions replace "require_noerr_action(<b args>)" with "__Require_noErr_Action(<args>)" \ 1255*19c3b8c2SApple OSS Distributions replace "require_noerr_action_string(<b args>)" with "__Require_noErr_Action_String(<args>)" \ 1256*19c3b8c2SApple OSS Distributions replace "require_noerr_string(<b args>)" with "__Require_noErr_String(<args>)" \ 1257*19c3b8c2SApple OSS Distributions replace "require_string(<b args>)" with "__Require_String(<args>)" \ 1258*19c3b8c2SApple OSS Distributions replace "verify(<b args>)" with "__Verify(<args>)" \ 1259*19c3b8c2SApple OSS Distributions replace "verify_action(<b args>)" with "__Verify_Action(<args>)" \ 1260*19c3b8c2SApple OSS Distributions replace "verify_noerr(<b args>)" with "__Verify_noErr(<args>)" \ 1261*19c3b8c2SApple OSS Distributions replace "verify_noerr_action(<b args>)" with "__Verify_noErr_Action(<args>)" \ 1262*19c3b8c2SApple OSS Distributions replace "verify_noerr_string(<b args>)" with "__Verify_noErr_String(<args>)" \ 1263*19c3b8c2SApple OSS Distributions replace "verify_string(<b args>)" with "__Verify_String(<args>)" \ 1264*19c3b8c2SApple OSS Distributions replace "ncheck(<b args>)" with "__nCheck(<args>)" \ 1265*19c3b8c2SApple OSS Distributions replace "ncheck_string(<b args>)" with "__nCheck_String(<args>)" \ 1266*19c3b8c2SApple OSS Distributions replace "nrequire(<b args>)" with "__nRequire(<args>)" \ 1267*19c3b8c2SApple OSS Distributions replace "nrequire_action(<b args>)" with "__nRequire_Action(<args>)" \ 1268*19c3b8c2SApple OSS Distributions replace "nrequire_action_quiet(<b args>)" with "__nRequire_Action_Quiet(<args>)" \ 1269*19c3b8c2SApple OSS Distributions replace "nrequire_action_string(<b args>)" with "__nRequire_Action_String(<args>)" \ 1270*19c3b8c2SApple OSS Distributions replace "nrequire_quiet(<b args>)" with "__nRequire_Quiet(<args>)" \ 1271*19c3b8c2SApple OSS Distributions replace "nrequire_string(<b args>)" with "__nRequire_String(<args>)" \ 1272*19c3b8c2SApple OSS Distributions replace "nverify(<b args>)" with "__nVerify(<args>)" \ 1273*19c3b8c2SApple OSS Distributions replace "nverify_string(<b args>)" with "__nVerify_String(<args>)" \ 1274*19c3b8c2SApple OSS Distributions replace "require_action_quiet(<b args>)" with "__Require_Action_Quiet(<args>)" \ 1275*19c3b8c2SApple OSS Distributions replace "require_noerr_action_quiet(<b args>)" with "__Require_noErr_Action_Quiet(<args>)" \ 1276*19c3b8c2SApple OSS Distributions replace "require_noerr_quiet(<b args>)" with "__Require_noErr_Quiet(<args>)" \ 1277*19c3b8c2SApple OSS Distributions replace "require_quiet(<b args>)" with "__Require_Quiet(<args>)" \ 1278*19c3b8c2SApple OSS Distributions replace "check_compile_time(<b args>)" with "__Check_Compile_Time(<args>)" \ 1279*19c3b8c2SApple OSS Distributions replace "debug_string(<b args>)" with "__Debug_String(<args>)" 1280*19c3b8c2SApple OSS Distributions * 1281*19c3b8c2SApple OSS Distributions */ 1282*19c3b8c2SApple OSS Distributions 1283*19c3b8c2SApple OSS Distributions #ifndef __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 1284*19c3b8c2SApple OSS Distributions /* If we haven't set this yet, it defaults to on. In the next release, this will default to off. */ 1285*19c3b8c2SApple OSS Distributions #define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 1 1286*19c3b8c2SApple OSS Distributions #endif 1287*19c3b8c2SApple OSS Distributions 1288*19c3b8c2SApple OSS Distributions #if __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 1289*19c3b8c2SApple OSS Distributions 1290*19c3b8c2SApple OSS Distributions #ifndef check 1291*19c3b8c2SApple OSS Distributions #define check(assertion) __Check(assertion) 1292*19c3b8c2SApple OSS Distributions #endif 1293*19c3b8c2SApple OSS Distributions 1294*19c3b8c2SApple OSS Distributions #ifndef check_noerr 1295*19c3b8c2SApple OSS Distributions #define check_noerr(errorCode) __Check_noErr(errorCode) 1296*19c3b8c2SApple OSS Distributions #endif 1297*19c3b8c2SApple OSS Distributions 1298*19c3b8c2SApple OSS Distributions #ifndef check_noerr_string 1299*19c3b8c2SApple OSS Distributions #define check_noerr_string(errorCode, message) __Check_noErr_String(errorCode, message) 1300*19c3b8c2SApple OSS Distributions #endif 1301*19c3b8c2SApple OSS Distributions 1302*19c3b8c2SApple OSS Distributions #ifndef check_string 1303*19c3b8c2SApple OSS Distributions #define check_string(assertion, message) __Check_String(assertion, message) 1304*19c3b8c2SApple OSS Distributions #endif 1305*19c3b8c2SApple OSS Distributions 1306*19c3b8c2SApple OSS Distributions #ifndef require 1307*19c3b8c2SApple OSS Distributions #define require(assertion, exceptionLabel) __Require(assertion, exceptionLabel) 1308*19c3b8c2SApple OSS Distributions #endif 1309*19c3b8c2SApple OSS Distributions 1310*19c3b8c2SApple OSS Distributions #ifndef require_action 1311*19c3b8c2SApple OSS Distributions #define require_action(assertion, exceptionLabel, action) __Require_Action(assertion, exceptionLabel, action) 1312*19c3b8c2SApple OSS Distributions #endif 1313*19c3b8c2SApple OSS Distributions 1314*19c3b8c2SApple OSS Distributions #ifndef require_action_string 1315*19c3b8c2SApple OSS Distributions #define require_action_string(assertion, exceptionLabel, action, message) __Require_Action_String(assertion, exceptionLabel, action, message) 1316*19c3b8c2SApple OSS Distributions #endif 1317*19c3b8c2SApple OSS Distributions 1318*19c3b8c2SApple OSS Distributions #ifndef require_noerr 1319*19c3b8c2SApple OSS Distributions #define require_noerr(errorCode, exceptionLabel) __Require_noErr(errorCode, exceptionLabel) 1320*19c3b8c2SApple OSS Distributions #endif 1321*19c3b8c2SApple OSS Distributions 1322*19c3b8c2SApple OSS Distributions #ifndef require_noerr_action 1323*19c3b8c2SApple OSS Distributions #define require_noerr_action(errorCode, exceptionLabel, action) __Require_noErr_Action(errorCode, exceptionLabel, action) 1324*19c3b8c2SApple OSS Distributions #endif 1325*19c3b8c2SApple OSS Distributions 1326*19c3b8c2SApple OSS Distributions #ifndef require_noerr_action_string 1327*19c3b8c2SApple OSS Distributions #define require_noerr_action_string(errorCode, exceptionLabel, action, message) __Require_noErr_Action_String(errorCode, exceptionLabel, action, message) 1328*19c3b8c2SApple OSS Distributions #endif 1329*19c3b8c2SApple OSS Distributions 1330*19c3b8c2SApple OSS Distributions #ifndef require_noerr_string 1331*19c3b8c2SApple OSS Distributions #define require_noerr_string(errorCode, exceptionLabel, message) __Require_noErr_String(errorCode, exceptionLabel, message) 1332*19c3b8c2SApple OSS Distributions #endif 1333*19c3b8c2SApple OSS Distributions 1334*19c3b8c2SApple OSS Distributions #ifndef require_string 1335*19c3b8c2SApple OSS Distributions #define require_string(assertion, exceptionLabel, message) __Require_String(assertion, exceptionLabel, message) 1336*19c3b8c2SApple OSS Distributions #endif 1337*19c3b8c2SApple OSS Distributions 1338*19c3b8c2SApple OSS Distributions #ifndef verify 1339*19c3b8c2SApple OSS Distributions #define verify(assertion) __Verify(assertion) 1340*19c3b8c2SApple OSS Distributions #endif 1341*19c3b8c2SApple OSS Distributions 1342*19c3b8c2SApple OSS Distributions #ifndef verify_action 1343*19c3b8c2SApple OSS Distributions #define verify_action(assertion, action) __Verify_Action(assertion, action) 1344*19c3b8c2SApple OSS Distributions #endif 1345*19c3b8c2SApple OSS Distributions 1346*19c3b8c2SApple OSS Distributions #ifndef verify_noerr 1347*19c3b8c2SApple OSS Distributions #define verify_noerr(errorCode) __Verify_noErr(errorCode) 1348*19c3b8c2SApple OSS Distributions #endif 1349*19c3b8c2SApple OSS Distributions 1350*19c3b8c2SApple OSS Distributions #ifndef verify_noerr_action 1351*19c3b8c2SApple OSS Distributions #define verify_noerr_action(errorCode, action) __Verify_noErr_Action(errorCode, action) 1352*19c3b8c2SApple OSS Distributions #endif 1353*19c3b8c2SApple OSS Distributions 1354*19c3b8c2SApple OSS Distributions #ifndef verify_noerr_string 1355*19c3b8c2SApple OSS Distributions #define verify_noerr_string(errorCode, message) __Verify_noErr_String(errorCode, message) 1356*19c3b8c2SApple OSS Distributions #endif 1357*19c3b8c2SApple OSS Distributions 1358*19c3b8c2SApple OSS Distributions #ifndef verify_string 1359*19c3b8c2SApple OSS Distributions #define verify_string(assertion, message) __Verify_String(assertion, message) 1360*19c3b8c2SApple OSS Distributions #endif 1361*19c3b8c2SApple OSS Distributions 1362*19c3b8c2SApple OSS Distributions #ifndef ncheck 1363*19c3b8c2SApple OSS Distributions #define ncheck(assertion) __nCheck(assertion) 1364*19c3b8c2SApple OSS Distributions #endif 1365*19c3b8c2SApple OSS Distributions 1366*19c3b8c2SApple OSS Distributions #ifndef ncheck_string 1367*19c3b8c2SApple OSS Distributions #define ncheck_string(assertion, message) __nCheck_String(assertion, message) 1368*19c3b8c2SApple OSS Distributions #endif 1369*19c3b8c2SApple OSS Distributions 1370*19c3b8c2SApple OSS Distributions #ifndef nrequire 1371*19c3b8c2SApple OSS Distributions #define nrequire(assertion, exceptionLabel) __nRequire(assertion, exceptionLabel) 1372*19c3b8c2SApple OSS Distributions #endif 1373*19c3b8c2SApple OSS Distributions 1374*19c3b8c2SApple OSS Distributions #ifndef nrequire_action 1375*19c3b8c2SApple OSS Distributions #define nrequire_action(assertion, exceptionLabel, action) __nRequire_Action(assertion, exceptionLabel, action) 1376*19c3b8c2SApple OSS Distributions #endif 1377*19c3b8c2SApple OSS Distributions 1378*19c3b8c2SApple OSS Distributions #ifndef nrequire_action_quiet 1379*19c3b8c2SApple OSS Distributions #define nrequire_action_quiet(assertion, exceptionLabel, action) __nRequire_Action_Quiet(assertion, exceptionLabel, action) 1380*19c3b8c2SApple OSS Distributions #endif 1381*19c3b8c2SApple OSS Distributions 1382*19c3b8c2SApple OSS Distributions #ifndef nrequire_action_string 1383*19c3b8c2SApple OSS Distributions #define nrequire_action_string(assertion, exceptionLabel, action, message) __nRequire_Action_String(assertion, exceptionLabel, action, message) 1384*19c3b8c2SApple OSS Distributions #endif 1385*19c3b8c2SApple OSS Distributions 1386*19c3b8c2SApple OSS Distributions #ifndef nrequire_quiet 1387*19c3b8c2SApple OSS Distributions #define nrequire_quiet(assertion, exceptionLabel) __nRequire_Quiet(assertion, exceptionLabel) 1388*19c3b8c2SApple OSS Distributions #endif 1389*19c3b8c2SApple OSS Distributions 1390*19c3b8c2SApple OSS Distributions #ifndef nrequire_string 1391*19c3b8c2SApple OSS Distributions #define nrequire_string(assertion, exceptionLabel, string) __nRequire_String(assertion, exceptionLabel, string) 1392*19c3b8c2SApple OSS Distributions #endif 1393*19c3b8c2SApple OSS Distributions 1394*19c3b8c2SApple OSS Distributions #ifndef nverify 1395*19c3b8c2SApple OSS Distributions #define nverify(assertion) __nVerify(assertion) 1396*19c3b8c2SApple OSS Distributions #endif 1397*19c3b8c2SApple OSS Distributions 1398*19c3b8c2SApple OSS Distributions #ifndef nverify_string 1399*19c3b8c2SApple OSS Distributions #define nverify_string(assertion, message) __nVerify_String(assertion, message) 1400*19c3b8c2SApple OSS Distributions #endif 1401*19c3b8c2SApple OSS Distributions 1402*19c3b8c2SApple OSS Distributions #ifndef require_action_quiet 1403*19c3b8c2SApple OSS Distributions #define require_action_quiet(assertion, exceptionLabel, action) __Require_Action_Quiet(assertion, exceptionLabel, action) 1404*19c3b8c2SApple OSS Distributions #endif 1405*19c3b8c2SApple OSS Distributions 1406*19c3b8c2SApple OSS Distributions #ifndef require_noerr_action_quiet 1407*19c3b8c2SApple OSS Distributions #define require_noerr_action_quiet(errorCode, exceptionLabel, action) __Require_noErr_Action_Quiet(errorCode, exceptionLabel, action) 1408*19c3b8c2SApple OSS Distributions #endif 1409*19c3b8c2SApple OSS Distributions 1410*19c3b8c2SApple OSS Distributions #ifndef require_noerr_quiet 1411*19c3b8c2SApple OSS Distributions #define require_noerr_quiet(errorCode, exceptionLabel) __Require_noErr_Quiet(errorCode, exceptionLabel) 1412*19c3b8c2SApple OSS Distributions #endif 1413*19c3b8c2SApple OSS Distributions 1414*19c3b8c2SApple OSS Distributions #ifndef require_quiet 1415*19c3b8c2SApple OSS Distributions #define require_quiet(assertion, exceptionLabel) __Require_Quiet(assertion, exceptionLabel) 1416*19c3b8c2SApple OSS Distributions #endif 1417*19c3b8c2SApple OSS Distributions 1418*19c3b8c2SApple OSS Distributions #ifndef check_compile_time 1419*19c3b8c2SApple OSS Distributions #define check_compile_time( expr ) __Check_Compile_Time( expr ) 1420*19c3b8c2SApple OSS Distributions #endif 1421*19c3b8c2SApple OSS Distributions 1422*19c3b8c2SApple OSS Distributions #ifndef debug_string 1423*19c3b8c2SApple OSS Distributions #define debug_string(message) __Debug_String(message) 1424*19c3b8c2SApple OSS Distributions #endif 1425*19c3b8c2SApple OSS Distributions 1426*19c3b8c2SApple OSS Distributions #endif /* ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES */ 1427*19c3b8c2SApple OSS Distributions 1428*19c3b8c2SApple OSS Distributions 1429*19c3b8c2SApple OSS Distributions #endif /* __ASSERTMACROS__ */ 1430