1/* ;-*-C-*-;
2**    Copyright (c) Massachusetts Institute of Technology 1994, 1995.
3**          All Rights Reserved.
4**          Unpublished rights reserved under the copyright laws of
5**          the United States.
6**
7** THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
8** OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
9**
10** This code is distributed freely and may be used freely under the
11** following conditions:
12**
13**     1. This notice may not be removed or altered.
14**
15**     2. This code may not be re-distributed or modified
16**        without permission from MIT (contact
17**        lclint-request@larch.lcs.mit.edu.)
18**
19**        Modification and re-distribution are encouraged,
20**        but we want to keep track of changes and
21**        distribution sites.
22*/
23
24# ifndef LCLINTMACROS_H
25# define LCLINTMACROS_H
26
27
28/*
29** This file contains notfunction macros (hence, the .nf extension to
30** prevent it being skipped when +neverinclude is used.)
31*/
32
33#ifndef PARAMS
34#ifdef __STDC
35/*@notfunction@*/
36#define PARAMS(P) P
37#else
38/*@notfunction@*/
39#define PARAMS(P) ()
40#endif
41#endif /* !PARAMS */
42
43/*@notfunction@*/
44# define BADEXIT \
45 /*@notreached@*/ do { llassertprint(FALSE, ("Reached dead code!")); \
46                       exit(EXIT_FAILURE); } while (FALSE)
47
48/*@notfunction@*/
49# define BADBRANCH \
50  /*@notreached@*/ BADBRANCHCONT
51
52/*@notfunction@*/
53# define BADBRANCHNULL \
54  /*@notreached@*/ BADBRANCHCONT ; /*@notreached@*/ /*@-mustfree@*/ /*@-globstate@*/ return NULL; /*@=mustfree@*/ /*@=globstate@*/
55
56/*@notfunction@*/
57# define BADBRANCHCONT \
58  do { llassertprint (FALSE, ("Bad branch taken!")); } while (FALSE)
59
60/*@notfunction@*/
61# define BADBRANCHRET(r) \
62  /*@notreached@*/ BADBRANCHCONT ; /*@notreached@*/ /*@-mustfree@*/ /*@-globstate@*/ return (r); /*@=mustfree@*/ /*@=globstate@*/
63
64/*@notfunction@*/
65# define BADDEFAULT \
66  default: llassertprint (FALSE, ("Unexpected default case reached!")); \
67           exit (EXIT_FAILURE);
68
69/*@-namechecks@*/
70/*@notfunction@*/
71# define llassertprint(tst,p) \
72   do { \
73     if (!(tst)) { \
74      llbug (message("%q:%d: llassert failed: " #tst ": %q", \
75		     cstring_makeLiteral (__FILE__), __LINE__,\
76		     /*@-mustfree@*/ message p) /*@=mustfree@*/ ); \
77     }} while (FALSE)
78
79/*@notfunction@*/
80# define llassertprintret(tst,p,r) \
81    do { if (!(tst)) \
82         { llbug (message("%q:%d: %q", cstring_makeLiteral (__FILE__), __LINE__, message p)); \
83           /*@-unreachable@*/ return (r); /*@=unreachable@*/ \
84       } } while (FALSE)
85
86/*@notfunction@*/
87# define abst_typedef typedef /*@abstract@*/
88
89/*@notfunction@*/
90# define immut_typedef typedef /*@abstract@*/ /*@immutable@*/
91
92/*@=namechecks@*/
93
94/*
95** SunOS4 can't handle bit fields correctly.
96*/
97
98# ifdef SYSSunOS
99/*@notfunction@*/
100# define BOOLBITS
101# else
102/*@notfunction@*/
103# define BOOLBITS : 1
104# endif
105
106/*
107** some stupid proprocessors replace the s in %s...had
108** to change s to arg.
109*/
110
111/*@notfunction@*/
112# define NOALIAS(s,t) (/*@ignore@*/ (s == NULL) || (s != t) /*@end@*/)
113
114/* evans 2002-02-24: got rid of -formatconst */
115
116/*@notfunction@*/
117# define TPRINTF(arg) \
118  do { /*@-mustfree@*/ /*@-null@*/ (void) fflush (stderr); (void) fflush (stdout); \
119	printf ("%s:%d [%s]: >> ", __FILE__, __LINE__, cstring_toCharsSafe (fileloc_unparse(g_currentloc))); \
120	(void)printf arg; printf("\n"); /*@=mustfree@*/ /*@=null@*/ (void) fflush (stdout); \
121	} while (FALSE)
122
123/*
124** DPRINTF does nothing, just a marker to save TPRINTF's
125*/
126
127/*@notfunction@*/
128# define DPRINTF(s)
129
130/*@notfunction@*/
131# define INTCOMPARERETURN(x,y) \
132   do { if ((x) > (y)) { return 1; } \
133        else { if ((x) < (y)) { return -1; }}} while (FALSE);
134
135/*@notfunction@*/
136# define COMPARERETURN(z) \
137   do { if (z != 0) { return z; } } while (FALSE);
138
139# else
140# error "Multiple include"
141# endif
142
143
144