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