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 | |