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