1 /* 2 ** Copyright (C) University of Virginia, Massachusetts Institue of Technology 1994-2003. 3 ** See ../LICENSE for license information. 4 ** 5 */ 6 /* 7 ** qual.h 8 ** 9 ** representation of type qualifiers 10 */ 11 12 # ifndef QUALH 13 # define QUALH 14 15 /* 16 ** just use tokens to represent type qualifiers 17 ** (tokens are defined in cgrammar.y) 18 */ 19 20 typedef enum { 21 QU_UNKNOWN = 0, 22 QU_CONST, QU_VOLATILE, QU_RESTRICT, 23 QU_INLINE, QU_EXTERN, QU_STATIC, 24 QU_AUTO, QU_REGISTER, 25 QU_SHORT, QU_LONG, QU_SIGNED, QU_UNSIGNED, 26 QU_OUT, QU_IN, 27 QU_ONLY, QU_IMPONLY, 28 QU_TEMP, QU_SHARED, QU_KEEP, QU_KEPT, QU_PARTIAL, QU_SPECIAL, 29 QU_NULL, QU_RELNULL, QU_ISNULL, 30 QU_NULLTERMINATED, 31 QU_SETBUFFERSIZE, 32 QU_EXPOSED, QU_RETURNED, QU_OBSERVER, QU_UNIQUE, 33 QU_OWNED, QU_DEPENDENT, QU_RELDEF, 34 QU_YIELD, 35 QU_NEVEREXIT, QU_EXITS, QU_MAYEXIT, QU_TRUEEXIT, QU_FALSEEXIT, 36 QU_UNUSED, QU_EXTERNAL, QU_SEF, 37 QU_NOTNULL, 38 QU_ABSTRACT, QU_NUMABSTRACT, QU_CONCRETE, 39 QU_MUTABLE, QU_IMMUTABLE, 40 QU_REFCOUNTED, QU_REFS, QU_NEWREF, QU_KILLREF, QU_TEMPREF, 41 QU_TRUENULL, QU_FALSENULL, 42 QU_CHECKED, QU_UNCHECKED, QU_CHECKEDSTRICT, QU_CHECKMOD, 43 QU_UNDEF, QU_KILLED, 44 QU_PRINTFLIKE, QU_SCANFLIKE, QU_MESSAGELIKE, 45 QU_USERANNOT, 46 QU_LAST 47 } quenum; 48 49 immut_typedef struct { 50 quenum kind; 51 /*@observer@*/ /*@null@*/ annotationInfo info; /* for QU_USERANNOT only */ 52 } *qual; 53 54 extern /*@only@*/ cstring qual_dump (qual) ; 55 extern qual qual_undump (char **p_s) /*@modifies *p_s@*/ ; 56 57 58 /* 59 ** qualifiers correspond to tokens in the grammar: 60 ** 61 ** standard C qualifiers: 62 ** QCONST QVOLATILE QINLINE QEXTERN QSTATIC QAUTO QREGISTER 63 ** QSHORT QLONG QSIGNED QUNSIGNED 64 ** augmented LCL qualifiers: 65 ** QOUT QONLY QTEMP QSHARED QUNIQUE QYIELD 66 ** QEXITS QMAYEXIT QNULLTERMINATED 67 */ 68 69 extern qual qual_fromInt (int p_q) /*@*/ ; 70 extern /*@observer@*/ cstring qual_unparse (qual p_q) /*@*/ ; 71 72 extern bool qual_match (qual p_q1, qual p_q2) /*@*/ ; 73 74 extern bool qual_isUnknown (qual) /*@*/ ; 75 extern bool qual_isTrueNull (qual) /*@*/ ; 76 extern bool qual_isFalseNull (qual) /*@*/ ; 77 extern bool qual_isOwned (qual) /*@*/ ; 78 extern bool qual_isDependent (qual) /*@*/ ; 79 extern bool qual_isRefCounted (qual) /*@*/ ; 80 extern bool qual_isRefs (qual) /*@*/ ; 81 extern bool qual_isNewRef (qual) /*@*/ ; 82 extern bool qual_isKillRef (qual) /*@*/ ; 83 extern bool qual_isTempRef (qual) /*@*/ ; 84 extern bool qual_isLong (qual) /*@*/ ; 85 extern bool qual_isShort (qual) /*@*/ ; 86 extern bool qual_isSigned (qual) /*@*/ ; 87 extern bool qual_isUnsigned (qual) /*@*/ ; 88 extern bool qual_isUnique (qual) /*@*/ ; 89 extern bool qual_isExits (qual) /*@*/ ; 90 extern bool qual_isMayExit (qual) /*@*/ ; 91 extern bool qual_isNeverExit (qual) /*@*/ ; 92 extern bool qual_isTrueExit (qual) /*@*/ ; 93 extern bool qual_isFalseExit (qual) /*@*/ ; 94 extern bool qual_isConst (qual) /*@*/ ; 95 extern bool qual_isRestrict (qual) /*@*/ ; 96 extern bool qual_isVolatile (qual) /*@*/ ; 97 extern bool qual_isInline (qual) /*@*/ ; 98 extern bool qual_isExtern (qual) /*@*/ ; 99 extern bool qual_isStatic (qual) /*@*/ ; 100 extern bool qual_isAuto (qual) /*@*/ ; 101 extern bool qual_isRegister (qual) /*@*/ ; 102 extern bool qual_isOut (qual) /*@*/ ; 103 extern bool qual_isIn (qual) /*@*/ ; 104 extern bool qual_isYield (qual) /*@*/ ; 105 extern bool qual_isOnly (qual) /*@*/ ; 106 extern bool qual_isImpOnly (qual) /*@*/ ; 107 extern bool qual_isPartial (qual) /*@*/ ; 108 extern bool qual_isSpecial (qual) /*@*/ ; 109 extern bool qual_isKeep (qual) /*@*/ ; 110 extern bool qual_isKept (qual) /*@*/ ; 111 extern bool qual_isTemp (qual) /*@*/ ; 112 extern bool qual_isShared (qual) /*@*/ ; 113 extern bool qual_isRelDef (qual) /*@*/ ; 114 extern bool qual_isChecked (qual) /*@*/ ; 115 extern bool qual_isCheckMod (qual) /*@*/ ; 116 extern bool qual_isCheckedStrict (qual) /*@*/ ; 117 extern bool qual_isUnchecked (qual) /*@*/ ; 118 extern bool qual_isNull (qual) /*@*/ ; 119 extern bool qual_isIsNull (qual) /*@*/ ; 120 extern bool qual_isRelNull (qual) /*@*/ ; 121 extern bool qual_isNotNull (qual) /*@*/ ; 122 extern bool qual_isReturned (qual) /*@*/ ; 123 extern bool qual_isExposed (qual) /*@*/ ; 124 extern bool qual_isObserver (qual) /*@*/ ; 125 extern bool qual_isUnused (qual) /*@*/ ; 126 extern bool qual_isExternal (qual) /*@*/ ; 127 extern bool qual_isSef (qual) /*@*/ ; 128 extern bool qual_isAbstract (qual) /*@*/ ; 129 extern bool qual_isNumAbstract (qual) /*@*/ ; 130 extern bool qual_isEitherAbstract (/*@sef@*/ qual) /*@*/ ; 131 extern bool qual_isConcrete (qual) /*@*/ ; 132 extern bool qual_isMutable (qual) /*@*/ ; 133 extern bool qual_isImmutable (qual) /*@*/ ; 134 extern bool qual_isNullPred (/*@sef@*/ qual) /*@*/ ; 135 extern bool qual_isRefQual (/*@sef@*/ qual) /*@*/ ; 136 extern bool qual_isUndef (/*@sef@*/ qual) /*@*/ ; 137 extern bool qual_isKilled (/*@sef@*/ qual) /*@*/ ; 138 extern /*@unused@*/ bool qual_isTypeQual (/*@sef@*/ qual) /*@*/ ; 139 extern /*@unused@*/ bool qual_isControlQual (/*@sef@*/ qual) /*@*/ ; 140 extern /*@unused@*/ bool qual_isStorageClass (/*@sef@*/ qual) /*@*/ ; 141 extern bool qual_isCQual (/*@sef@*/ qual) /*@*/ ; 142 extern bool qual_isAllocQual (/*@sef@*/ qual) /*@*/ ; 143 extern bool qual_isGlobalQual (/*@sef@*/ qual) /*@*/ ; 144 extern bool qual_isImplied (/*@sef@*/ qual) /*@*/ ; 145 extern bool qual_isExQual (/*@sef@*/ qual) /*@*/ ; 146 extern bool qual_isAliasQual (/*@sef@*/ qual) /*@*/ ; 147 extern bool qual_isPrintfLike (/*@sef@*/ qual) /*@*/ ; 148 extern bool qual_isScanfLike (/*@sef@*/ qual) /*@*/ ; 149 extern bool qual_isMessageLike (/*@sef@*/ qual) /*@*/ ; 150 extern bool qual_isMetaState (/*@sef@*/ qual) /*@*/ ; 151 extern bool qual_isNullTerminated( /*@sef@*/ qual ) /*@*/ ; 152 153 extern bool qual_isMemoryAllocation (/*@sef@*/ qual) /*@*/ ; 154 # define qual_isMemoryAllocation(q) \ 155 (qual_isOnly (q) || qual_isShared (q) || \ 156 qual_isDependent (q) || qual_isOwned (q)) 157 158 extern bool qual_isSharing (/*@sef@*/ qual) /*@*/ ; 159 # define qual_isSharing(q) \ 160 (qual_isObserver (q) || qual_isExposed (q)) 161 162 extern /*@observer@*/ annotationInfo qual_getAnnotationInfo (qual) /*@*/ ; 163 164 extern void qual_initMod (void) /*@modifies internalState@*/ ; 165 extern void qual_destroyMod (void) /*@modifies internalState@*/ ; 166 167 # define qual_isUnknown(q) ((q)->kind == QU_UNKNOWN) 168 # define qual_isTrueNull(q) ((q)->kind == QU_TRUENULL) 169 # define qual_isFalseNull(q) ((q)->kind == QU_FALSENULL) 170 # define qual_isOwned(q) ((q)->kind == QU_OWNED) 171 # define qual_isDependent(q) ((q)->kind == QU_DEPENDENT) 172 # define qual_isRefCounted(q) ((q)->kind == QU_REFCOUNTED) 173 # define qual_isRefs(q) ((q)->kind == QU_REFS) 174 # define qual_isNewRef(q) ((q)->kind == QU_NEWREF) 175 # define qual_isKillRef(q) ((q)->kind == QU_KILLREF) 176 # define qual_isTempRef(q) ((q)->kind == QU_TEMPREF) 177 # define qual_isLong(q) ((q)->kind == QU_LONG) 178 # define qual_isShort(q) ((q)->kind == QU_SHORT) 179 # define qual_isSigned(q) ((q)->kind == QU_SIGNED) 180 # define qual_isUnsigned(q) ((q)->kind == QU_UNSIGNED) 181 # define qual_isUnique(q) ((q)->kind == QU_UNIQUE) 182 # define qual_isExits(q) ((q)->kind == QU_EXITS) 183 # define qual_isMayExit(q) ((q)->kind == QU_MAYEXIT) 184 # define qual_isNeverExit(q) ((q)->kind == QU_NEVEREXIT) 185 # define qual_isTrueExit(q) ((q)->kind == QU_TRUEEXIT) 186 # define qual_isFalseExit(q) ((q)->kind == QU_FALSEEXIT) 187 # define qual_isConst(q) ((q)->kind == QU_CONST) 188 # define qual_isRestrict(q) ((q)->kind == QU_RESTRICT) 189 # define qual_isVolatile(q) ((q)->kind == QU_VOLATILE) 190 # define qual_isInline(q) ((q)->kind == QU_INLINE) 191 # define qual_isExtern(q) ((q)->kind == QU_EXTERN) 192 # define qual_isStatic(q) ((q)->kind == QU_STATIC) 193 # define qual_isAuto(q) ((q)->kind == QU_AUTO) 194 # define qual_isRegister(q) ((q)->kind == QU_REGISTER) 195 # define qual_isOut(q) ((q)->kind == QU_OUT) 196 # define qual_isIn(q) ((q)->kind == QU_IN) 197 # define qual_isYield(q) ((q)->kind == QU_YIELD) 198 # define qual_isOnly(q) ((q)->kind == QU_ONLY) 199 # define qual_isImpOnly(q) ((q)->kind == QU_IMPONLY) 200 # define qual_isPartial(q) ((q)->kind == QU_PARTIAL) 201 # define qual_isSpecial(q) ((q)->kind == QU_SPECIAL) 202 # define qual_isKeep(q) ((q)->kind == QU_KEEP) 203 # define qual_isKept(q) ((q)->kind == QU_KEPT) 204 # define qual_isTemp(q) ((q)->kind == QU_TEMP) 205 # define qual_isShared(q) ((q)->kind == QU_SHARED) 206 # define qual_isRelDef(q) ((q)->kind == QU_RELDEF) 207 # define qual_isNull(q) ((q)->kind == QU_NULL) 208 # define qual_isIsNull(q) ((q)->kind == QU_ISNULL) 209 # define qual_isRelNull(q) ((q)->kind == QU_RELNULL) 210 # define qual_isNotNull(q) ((q)->kind == QU_NOTNULL) 211 # define qual_isReturned(q) ((q)->kind == QU_RETURNED) 212 # define qual_isExposed(q) ((q)->kind == QU_EXPOSED) 213 # define qual_isObserver(q) ((q)->kind == QU_OBSERVER) 214 # define qual_isUnused(q) ((q)->kind == QU_UNUSED) 215 # define qual_isExternal(q) ((q)->kind == QU_EXTERNAL) 216 # define qual_isSef(q) ((q)->kind == QU_SEF) 217 # define qual_isAbstract(q) ((q)->kind == QU_ABSTRACT) 218 # define qual_isNumAbstract(q) ((q)->kind == QU_NUMABSTRACT) 219 # define qual_isConcrete(q) ((q)->kind == QU_CONCRETE) 220 # define qual_isMutable(q) ((q)->kind == QU_MUTABLE) 221 # define qual_isImmutable(q) ((q)->kind == QU_IMMUTABLE) 222 # define qual_isChecked(q) ((q)->kind == QU_CHECKED) 223 # define qual_isCheckMod(q) ((q)->kind == QU_CHECKMOD) 224 # define qual_isCheckedStrict(q) ((q)->kind == QU_CHECKEDSTRICT) 225 # define qual_isUnchecked(q) ((q)->kind == QU_UNCHECKED) 226 # define qual_isUndef(q) ((q)->kind == QU_UNDEF) 227 # define qual_isKilled(q) ((q)->kind == QU_KILLED) 228 # define qual_isPrintfLike(q) ((q)->kind == QU_PRINTFLIKE) 229 # define qual_isScanfLike(q) ((q)->kind == QU_SCANFLIKE) 230 # define qual_isMessageLike(q) ((q)->kind == QU_MESSAGELIKE) 231 # define qual_isMetaState(q) ((q)->kind == QU_USERANNOT) 232 # define qual_isNullTerminated(q) ((q)->kind == QU_NULLTERMINATED) 233 234 extern qual qual_createPlain (quenum) /*@*/ ; 235 extern qual qual_createMetaState (/*@observer@*/ annotationInfo) /*@*/ ; 236 extern qual qual_createTrueNull (void) /*@*/ ; 237 extern qual qual_createFalseNull (void) /*@*/ ; 238 extern qual qual_createRefCounted (void) /*@*/ ; 239 extern qual qual_createRefs (void) /*@*/ ; 240 extern qual qual_createNewRef (void) /*@*/ ; 241 extern qual qual_createKillRef (void) /*@*/ ; 242 extern qual qual_createTempRef (void) /*@*/ ; 243 extern qual qual_createNotNull (void) /*@*/ ; 244 extern qual qual_createAbstract (void) /*@*/ ; 245 extern qual qual_createNumAbstract (void) /*@*/ ; 246 extern qual qual_createConcrete (void) /*@*/ ; 247 extern qual qual_createMutable (void) /*@*/ ; 248 extern qual qual_createImmutable (void) /*@*/ ; 249 extern qual qual_createShort (void) /*@*/ ; 250 extern qual qual_createLong (void) /*@*/ ; 251 extern qual qual_createSigned (void) /*@*/ ; 252 extern qual qual_createUnsigned (void) /*@*/ ; 253 extern qual qual_createUnique (void) /*@*/ ; 254 extern qual qual_createMayExit (void) /*@*/ ; 255 extern qual qual_createExits (void) /*@*/ ; 256 extern qual qual_createNeverExit (void) /*@*/ ; 257 extern qual qual_createFalseExit (void) /*@*/ ; 258 extern qual qual_createTrueExit (void) /*@*/ ; 259 extern qual qual_createConst (void) /*@*/ ; 260 extern qual qual_createRestrict (void) /*@*/ ; 261 extern qual qual_createVolatile (void) /*@*/ ; 262 extern qual qual_createInline (void) /*@*/ ; 263 extern qual qual_createExtern (void) /*@*/ ; 264 extern qual qual_createStatic (void) /*@*/ ; 265 extern qual qual_createAuto (void) /*@*/ ; 266 extern qual qual_createRegister (void) /*@*/ ; 267 extern qual qual_createOut (void) /*@*/ ; 268 extern qual qual_createIn (void) /*@*/ ; 269 extern qual qual_createYield (void) /*@*/ ; 270 extern qual qual_createOnly (void) /*@*/ ; 271 extern qual qual_createOwned (void) /*@*/ ; 272 extern qual qual_createDependent (void) /*@*/ ; 273 extern qual qual_createRelDef (void) /*@*/ ; 274 extern qual qual_createImpOnly (void) /*@*/ ; 275 extern qual qual_createPartial (void) /*@*/ ; 276 extern qual qual_createSpecial (void) /*@*/ ; 277 extern qual qual_createKeep (void) /*@*/ ; 278 extern qual qual_createKept (void) /*@*/ ; 279 extern qual qual_createTemp (void) /*@*/ ; 280 extern qual qual_createShared (void) /*@*/ ; 281 extern qual qual_createNull (void) /*@*/ ; 282 extern qual qual_createIsNull (void) /*@*/ ; 283 extern qual qual_createRelNull (void) /*@*/ ; 284 extern qual qual_createReturned (void) /*@*/ ; 285 extern qual qual_createExposed (void) /*@*/ ; 286 extern qual qual_createObserver (void) /*@*/ ; 287 extern qual qual_createUnused (void) /*@*/ ; 288 extern qual qual_createExternal (void) /*@*/ ; 289 extern qual qual_createSef (void) /*@*/ ; 290 extern qual qual_createChecked (void) /*@*/ ; 291 extern qual qual_createCheckMod (void) /*@*/ ; 292 extern qual qual_createUnchecked (void) /*@*/ ; 293 extern qual qual_createCheckedStrict (void) /*@*/ ; 294 extern qual qual_createUndef (void) /*@*/ ; 295 extern qual qual_createKilled (void) /*@*/ ; 296 extern qual qual_createNullTerminated (void) /*@*/ ; 297 298 extern qual qual_createUnknown (void) /*@*/ ; 299 # define qual_createUnknown() (qual_createPlain (QU_UNKNOWN)) 300 301 extern qual qual_createPrintfLike (void) /*@*/ ; 302 extern qual qual_createScanfLike (void) /*@*/ ; 303 extern qual qual_createMessageLike (void) /*@*/ ; 304 305 # define qual_createPrintfLike() (qual_createPlain (QU_PRINTFLIKE)) 306 # define qual_createScanfLike() (qual_createPlain (QU_SCANFLIKE)) 307 # define qual_createMessageLike() (qual_createPlain (QU_MESSAGELIKE)) 308 309 # define qual_createTrueNull() qual_createPlain (QU_TRUENULL) 310 # define qual_createFalseNull() qual_createPlain (QU_FALSENULL) 311 # define qual_createRefCounted() qual_createPlain (QU_REFCOUNTED) 312 # define qual_createRefs() qual_createPlain (QU_REFS) 313 # define qual_createNewRef() qual_createPlain (QU_NEWREF) 314 # define qual_createKillRef() qual_createPlain (QU_KILLREF) 315 # define qual_createTempRef() qual_createPlain (QU_TEMPREF) 316 # define qual_createNotNull() qual_createPlain (QU_NOTNULL) 317 # define qual_createAbstract() qual_createPlain (QU_ABSTRACT) 318 # define qual_createNumAbstract() qual_createPlain (QU_NUMABSTRACT) 319 # define qual_createConcrete() qual_createPlain (QU_CONCRETE) 320 # define qual_createMutable() qual_createPlain (QU_MUTABLE) 321 # define qual_createImmutable() qual_createPlain (QU_IMMUTABLE) 322 # define qual_createShort() qual_createPlain (QU_SHORT) 323 # define qual_createLong() qual_createPlain (QU_LONG) 324 # define qual_createSigned() qual_createPlain (QU_SIGNED) 325 # define qual_createUnsigned() qual_createPlain (QU_UNSIGNED) 326 # define qual_createUnique() qual_createPlain (QU_UNIQUE) 327 # define qual_createMayExit() qual_createPlain (QU_MAYEXIT) 328 # define qual_createExits() qual_createPlain (QU_EXITS) 329 # define qual_createNeverExit() qual_createPlain (QU_NEVEREXIT) 330 # define qual_createTrueExit() qual_createPlain (QU_TRUEEXIT) 331 # define qual_createFalseExit() qual_createPlain (QU_FALSEEXIT) 332 # define qual_createConst() qual_createPlain (QU_CONST) 333 # define qual_createRestrict() qual_createPlain (QU_RESTRICT) 334 # define qual_createVolatile() qual_createPlain (QU_VOLATILE) 335 # define qual_createInline() qual_createPlain (QU_INLINE) 336 # define qual_createExtern() qual_createPlain (QU_EXTERN) 337 # define qual_createStatic() qual_createPlain (QU_STATIC) 338 # define qual_createAuto() qual_createPlain (QU_AUTO) 339 # define qual_createRegister() qual_createPlain (QU_REGISTER) 340 # define qual_createOut() qual_createPlain (QU_OUT) 341 # define qual_createIn() qual_createPlain (QU_IN) 342 # define qual_createYield() qual_createPlain (QU_YIELD) 343 # define qual_createOnly() qual_createPlain (QU_ONLY) 344 # define qual_createOwned() qual_createPlain (QU_OWNED) 345 # define qual_createDependent() qual_createPlain (QU_DEPENDENT) 346 # define qual_createRelDef() qual_createPlain (QU_RELDEF) 347 # define qual_createImpOnly() qual_createPlain (QU_IMPONLY) 348 # define qual_createPartial() qual_createPlain (QU_PARTIAL) 349 # define qual_createSpecial() qual_createPlain (QU_SPECIAL) 350 # define qual_createKeep() qual_createPlain (QU_KEEP) 351 # define qual_createKept() qual_createPlain (QU_KEPT) 352 # define qual_createTemp() qual_createPlain (QU_TEMP) 353 # define qual_createShared() qual_createPlain (QU_SHARED) 354 # define qual_createNull() qual_createPlain (QU_NULL) 355 # define qual_createIsNull() qual_createPlain (QU_ISNULL) 356 # define qual_createRelNull() qual_createPlain (QU_RELNULL) 357 # define qual_createReturned() qual_createPlain (QU_RETURNED) 358 # define qual_createExposed() qual_createPlain (QU_EXPOSED) 359 # define qual_createObserver() qual_createPlain (QU_OBSERVER) 360 # define qual_createUnused() qual_createPlain (QU_UNUSED) 361 # define qual_createExternal() qual_createPlain (QU_EXTERNAL) 362 # define qual_createSef() qual_createPlain (QU_SEF) 363 # define qual_createChecked() qual_createPlain (QU_CHECKED) 364 # define qual_createCheckMod() qual_createPlain (QU_CHECKMOD) 365 # define qual_createCheckedStrict() qual_createPlain (QU_CHECKEDSTRICT) 366 # define qual_createUnchecked() qual_createPlain (QU_UNCHECKED) 367 # define qual_createUndef() qual_createPlain (QU_UNDEF) 368 # define qual_createKilled() qual_createPlain (QU_KILLED) 369 370 371 # define qual_createNullTerminated() qual_createPlain (QU_NULLTERMINATED) 372 373 /* start modifications */ 374 /* This is used to check if we the qualifier matches any of the 375 len/size/nullterminated types */ 376 377 extern bool qual_isBufQualifier(/*@sef@*/ qual) /*@*/; 378 379 # define qual_isBufQualifier(q) \ 380 (qual_isNullTerminated(q)) 381 382 /* end of modification/s */ 383 384 extern bool qual_isGlobCheck (/*@sef@*/ qual p_q) /*@*/ ; 385 # define qual_isGlobCheck(q) \ 386 (qual_isChecked (q) || qual_isCheckMod (q) \ 387 || qual_isUnchecked (q) || qual_isCheckedStrict (q)) 388 389 # define qual_isNullPred(q) \ 390 (qual_isTrueNull (q) || qual_isFalseNull (q)) 391 392 # define qual_isRefQual(q) \ 393 (qual_isRefCounted(q) || qual_isRefs(q) || qual_isNewRef (q) || \ 394 qual_isKillRef (q) || qual_isTempRef (q)) 395 396 extern bool qual_isNullStateQual (/*@sef@*/ qual) /*@*/ ; 397 # define qual_isNullStateQual(q) \ 398 (qual_isNull (q) || qual_isIsNull (q) || qual_isRelNull (q) \ 399 || qual_isNotNull (q)) 400 401 # define qual_isTypeQual(q) \ 402 (qual_isAbstract(q) || qual_isNumAbstract(q) || qual_isConcrete(q) \ 403 || qual_isMutable(q) || qual_isImmutable(q)) 404 405 # define qual_isEitherAbstract(q) \ 406 (qual_isAbstract(q) || qual_isNumAbstract(q)) 407 408 # define qual_isControlQual(q) (qual_isExits(q) || qual_isMayExit (q)) 409 # define qual_isStorageClass(q) (qual_isExtern(q) || qual_isStatic(q)) 410 # define qual_isCQual(q) \ 411 (qual_isAuto(q) || qual_isRegister(q) || qual_isInline(q) \ 412 || qual_isConst(q) || qual_isVolatile(q) || qual_isShort(q) \ 413 || qual_isLong (q) || qual_isSigned (q) || qual_isUnsigned (q)) 414 415 # define qual_isAllocQual(q) \ 416 (qual_isOut (q) || qual_isIn (q) || qual_isSpecial (q) \ 417 || qual_isPartial (q) || qual_isRelDef (q)) 418 419 # define qual_isGlobalQual(q) \ 420 (qual_isUndef(q) || qual_isKilled (q)) 421 422 # define qual_isImplied(q) (qual_isImpOnly(q)) 423 # define qual_isExQual(q) (qual_isExposed (q) || qual_isObserver (q)) 424 425 # define qual_isAliasQual(q) \ 426 (qual_isOnly(q) || qual_isImpOnly(q) || qual_isTemp(q) \ 427 || qual_isOwned (q) || qual_isShared (q) || qual_isUnique (q) \ 428 || qual_isDependent (q) || qual_isKeep (q) || qual_isKept (q)) 429 430 extern bool qual_isExitQual (/*@sef@*/ qual p_q) /*@*/ ; 431 # define qual_isExitQual(q) \ 432 (qual_isExits (q) || qual_isNeverExit (q) || qual_isMayExit (q) \ 433 || qual_isTrueExit (q) || qual_isFalseExit (q)) 434 435 extern char qual_abstractCode (qual) /*@*/ ; 436 extern qual qual_abstractFromCodeChar (char) /*@*/ ; 437 438 # else 439 # error "Multiple include" 440 # endif 441 442 443 444 445 446