diff options
Diffstat (limited to 'web/funnelAC/fwACsrc/as.h')
-rw-r--r-- | web/funnelAC/fwACsrc/as.h | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/web/funnelAC/fwACsrc/as.h b/web/funnelAC/fwACsrc/as.h new file mode 100644 index 0000000000..ab89d73e83 --- /dev/null +++ b/web/funnelAC/fwACsrc/as.h @@ -0,0 +1,119 @@ +/*############################################################################## + +FUNNNELWEB COPYRIGHT +==================== +FunnelWeb is a literate-programming macro preprocessor. + +Copyright (C) 1992 Ross N. Williams. + + Ross N. Williams + ross@spam.adelaide.edu.au + 16 Lerwick Avenue, Hazelwood Park 5066, Australia. + +This program is free software; you can redistribute it and/or modify +it under the terms of Version 2 of the GNU General Public License as +published by the Free Software Foundation. + +This program is distributed WITHOUT ANY WARRANTY; without even the implied +warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See Version 2 of the GNU General Public License for more details. + +You should have received a copy of Version 2 of the GNU General Public +License along with this program. If not, you can FTP the license from +prep.ai.mit.edu/pub/gnu/COPYING-2 or write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Section 2a of the license requires that all changes to this file be +recorded prominently in this file. Please record all changes here. + +Programmers: + RNW Ross N. Williams ross@spam.adelaide.edu.au + +Changes: + 07-May-1992 RNW Program prepared for release under GNU GPL V2. + +##############################################################################*/ + + +/******************************************************************************/ +/* AS.H */ +/******************************************************************************/ +/* */ +/* ASSERTION PACKAGE */ +/* ================= */ +/* This package contains macros and functions that support assertions. An */ +/* assertion is a boolean condition that is supposed always to be true at a */ +/* particular point during program execution. An assertion statement tests */ +/* such a condition and bombs the program if it is false; better to be */ +/* alerted to such a condition rather than suffer and erroneous execution. */ +/* */ +/* Standard C supports asertions with the <assert.h> header file providing */ +/* the "assert" macro. Unfortunately, this does not meet the needs of */ +/* FunnelWeb for two reasons: */ +/* */ +/* 1) Portability is emphasised in FunnelWeb and the assert macro is fairly */ +/* recent. Its only argument is the boolean condition, which means that */ +/* without the ANSI macros __FILE__ and __LINE__, the macro would be */ +/* unable to indicate where an assertion failure occurred, in a non-ANSI */ +/* environment. */ +/* */ +/* 2) There is only one assert macro and it can be either on or off, the */ +/* implication being that in production code, it should be turned off. In */ +/* contrast, the execution speed of the assert macro will usually matter */ +/* only in a small portion of the code as, in most programs, a small */ +/* portion of the code accounts for most of the execution time. By having */ +/* two categories of assertion, we can leave most of the assertions turned */ +/* on in the production program. */ +/* */ +/* This reasoning leads to the slightly different assertion facilty provided */ +/* by this package. Here, there are two assertion routines/macros, HOT */ +/* assertions for HOT code (code in a program hot spot) and COLD assertions */ +/* for COLD code (not in a hot spot). Only the HOT assertions can be turned */ +/* off. */ +/* */ +/******************************************************************************/ + +/* Ensure that the body of this header file is included at most once. */ +#ifndef DONE_AS +#define DONE_AS + +/******************************************************************************/ + +#include "style.h" + +/******************************************************************************/ + +/* The following #define determines whether hot assertions are to be turned */ +/* on or off. Set to 0 for OFF and 1 for ON. */ +/* Note: I have left hot assertions on in the production version as FunnelWeb */ +/* doesn't go slowly enough to make me want to turn it off. */ +#define AS_DOHOT 1 + +/******************************************************************************/ + +EXPORT void as_bomb P_((char *)); +/* This function writes out its argument string and then bombs the program. */ +/* It should be called at any point where it has been determined that an */ +/* illegal condition has been detected. The other assertion routines/macros */ +/* call this function. */ + +/* The following two macros define hot and cold assertions. Be sure never to */ +/* call them with arguments with side effects! */ +#define as_cold(e,s) {if (!(e)) as_bomb(s);} + +#if AS_DOHOT +#define as_hot(e,s) {if (!(e)) as_bomb(s);} +#define AS_HCODE(CODE) {CODE} +#else +#define as_hot(e,s) ((void) 0) +#define AS_HCODE(CODE) ((void) 0) +#endif + +/******************************************************************************/ + +/* For #ifndef preventing multiple inclusion of the body of this header file. */ +#endif + +/******************************************************************************/ +/* AS.H */ +/******************************************************************************/ |