10b57cec5SDimitry Andric//===-- Symbols.def - Metadata about SymExpr kinds --------------*- C++ -*-===//
20b57cec5SDimitry Andric//
30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric//
70b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric//
90b57cec5SDimitry Andric// The list of symbols (SymExpr sub-classes) used in the Static Analyzer.
100b57cec5SDimitry Andric// In order to use this information, users of this file must define
110b57cec5SDimitry Andric// one or more of the three macros:
120b57cec5SDimitry Andric//
130b57cec5SDimitry Andric// SYMBOL(Id, Parent) - for specific SymExpr sub-classes, reserving the
140b57cec5SDimitry Andric// IdKind identifier for its kind enumeration value.
150b57cec5SDimitry Andric//
160b57cec5SDimitry Andric// ABSTRACT_SYMBOL(Id, Parent) - for abstract symbol classes,
170b57cec5SDimitry Andric//
180b57cec5SDimitry Andric// SYMBOL_RANGE(Id, First, Last) - for ranges of kind-enums,
190b57cec5SDimitry Andric// allowing to determine abstract class of a symbol
200b57cec5SDimitry Andric// based on the kind enumeration value.
210b57cec5SDimitry Andric//
220b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
230b57cec5SDimitry Andric
240b57cec5SDimitry Andric#ifndef SYMBOL
250b57cec5SDimitry Andric#define SYMBOL(Id, Parent)
260b57cec5SDimitry Andric#endif
270b57cec5SDimitry Andric
280b57cec5SDimitry Andric#ifndef ABSTRACT_SYMBOL
290b57cec5SDimitry Andric#define ABSTRACT_SYMBOL(Id, Parent)
300b57cec5SDimitry Andric#endif
310b57cec5SDimitry Andric
320b57cec5SDimitry Andric#ifndef SYMBOL_RANGE
330b57cec5SDimitry Andric#define SYMBOL_RANGE(Id, First, Last)
340b57cec5SDimitry Andric#endif
350b57cec5SDimitry Andric
3681ad6265SDimitry AndricSYMBOL(UnarySymExpr, SymExpr)
3781ad6265SDimitry Andric
380b57cec5SDimitry AndricABSTRACT_SYMBOL(BinarySymExpr, SymExpr)
390b57cec5SDimitry Andric  SYMBOL(IntSymExpr, BinarySymExpr)
400b57cec5SDimitry Andric  SYMBOL(SymIntExpr, BinarySymExpr)
410b57cec5SDimitry Andric  SYMBOL(SymSymExpr, BinarySymExpr)
420b57cec5SDimitry AndricSYMBOL_RANGE(BINARYSYMEXPRS, IntSymExprKind, SymSymExprKind)
430b57cec5SDimitry Andric
440b57cec5SDimitry AndricSYMBOL(SymbolCast, SymExpr)
450b57cec5SDimitry Andric
460b57cec5SDimitry AndricABSTRACT_SYMBOL(SymbolData, SymExpr)
470b57cec5SDimitry Andric  SYMBOL(SymbolConjured, SymbolData)
480b57cec5SDimitry Andric  SYMBOL(SymbolDerived, SymbolData)
490b57cec5SDimitry Andric  SYMBOL(SymbolExtent, SymbolData)
500b57cec5SDimitry Andric  SYMBOL(SymbolMetadata, SymbolData)
510b57cec5SDimitry Andric  SYMBOL(SymbolRegionValue, SymbolData)
520b57cec5SDimitry AndricSYMBOL_RANGE(SYMBOLS, SymbolConjuredKind, SymbolRegionValueKind)
530b57cec5SDimitry Andric
540b57cec5SDimitry Andric#undef SYMBOL
550b57cec5SDimitry Andric#undef ABSTRACT_SYMBOL
560b57cec5SDimitry Andric#undef SYMBOL_RANGE
57