1 //===-- Symbols.def - Metadata about SymExpr kinds --------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // The list of symbols (SymExpr sub-classes) used in the Static Analyzer. 11 // In order to use this information, users of this file must define 12 // one or more of the three macros: 13 // 14 // SYMBOL(Id, Parent) - for specific SymExpr sub-classes, reserving the 15 // IdKind identifier for its kind enumeration value. 16 // 17 // ABSTRACT_SYMBOL(Id, Parent) - for abstract symbol classes, 18 // 19 // SYMBOL_RANGE(Id, First, Last) - for ranges of kind-enums, 20 // allowing to determine abstract class of a symbol 21 // based on the kind enumeration value. 22 // 23 //===----------------------------------------------------------------------===// 24 25 #ifndef SYMBOL 26 #define SYMBOL(Id, Parent) 27 #endif 28 29 #ifndef ABSTRACT_SYMBOL 30 #define ABSTRACT_SYMBOL(Id, Parent) 31 #endif 32 33 #ifndef SYMBOL_RANGE 34 #define SYMBOL_RANGE(Id, First, Last) 35 #endif 36 37 ABSTRACT_SYMBOL(BinarySymExpr, SymExpr) 38 SYMBOL(IntSymExpr, BinarySymExpr) 39 SYMBOL(SymIntExpr, BinarySymExpr) 40 SYMBOL(SymSymExpr, BinarySymExpr) 41 SYMBOL_RANGE(BINARYSYMEXPRS, IntSymExprKind, SymSymExprKind) 42 43 SYMBOL(SymbolCast, SymExpr) 44 45 ABSTRACT_SYMBOL(SymbolData, SymExpr) 46 SYMBOL(SymbolConjured, SymbolData) 47 SYMBOL(SymbolDerived, SymbolData) 48 SYMBOL(SymbolExtent, SymbolData) 49 SYMBOL(SymbolMetadata, SymbolData) 50 SYMBOL(SymbolRegionValue, SymbolData) 51 SYMBOL_RANGE(SYMBOLS, SymbolConjuredKind, SymbolRegionValueKind) 52 53 #undef SYMBOL 54 #undef ABSTRACT_SYMBOL 55 #undef SYMBOL_RANGE 56