//===-- Symbols.def - Metadata about SymExpr kinds --------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// The list of symbols (SymExpr sub-classes) used in the Static Analyzer.
// In order to use this information, users of this file must define
// one or more of the three macros:
//
// SYMBOL(Id, Parent) - for specific SymExpr sub-classes, reserving the
// IdKind identifier for its kind enumeration value.
//
// ABSTRACT_SYMBOL(Id, Parent) - for abstract symbol classes,
//
// SYMBOL_RANGE(Id, First, Last) - for ranges of kind-enums,
// allowing to determine abstract class of a symbol
// based on the kind enumeration value.
//
//===----------------------------------------------------------------------===//

#ifndef SYMBOL
#define SYMBOL(Id, Parent)
#endif

#ifndef ABSTRACT_SYMBOL
#define ABSTRACT_SYMBOL(Id, Parent)
#endif

#ifndef SYMBOL_RANGE
#define SYMBOL_RANGE(Id, First, Last)
#endif

ABSTRACT_SYMBOL(BinarySymExpr, SymExpr)
  SYMBOL(IntSymExpr, BinarySymExpr)
  SYMBOL(SymIntExpr, BinarySymExpr)
  SYMBOL(SymSymExpr, BinarySymExpr)
SYMBOL_RANGE(BINARYSYMEXPRS, IntSymExprKind, SymSymExprKind)

SYMBOL(SymbolCast, SymExpr)

ABSTRACT_SYMBOL(SymbolData, SymExpr)
  SYMBOL(SymbolConjured, SymbolData)
  SYMBOL(SymbolDerived, SymbolData)
  SYMBOL(SymbolExtent, SymbolData)
  SYMBOL(SymbolMetadata, SymbolData)
  SYMBOL(SymbolRegionValue, SymbolData)
SYMBOL_RANGE(SYMBOLS, SymbolConjuredKind, SymbolRegionValueKind)

#undef SYMBOL
#undef ABSTRACT_SYMBOL
#undef SYMBOL_RANGE
