1//===-- TypeLocNodes.def - Metadata about TypeLoc wrappers ------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file defines the TypeLoc info database. Each node is
10// enumerated by providing its core name (e.g., "Pointer" for "PointerTypeLoc")
11// and base class (e.g., "DeclaratorLoc"). All nodes except QualifiedTypeLoc
12// are associated
13//
14// TYPELOC(Class, Base) - A TypeLoc subclass. If UNQUAL_TYPELOC is
15// provided, there will be exactly one of these, Qualified.
16//
17// UNQUAL_TYPELOC(Class, Base, Type) - An UnqualTypeLoc subclass.
18//
19// ABSTRACT_TYPELOC(Class) - Refers to TypeSpecLoc and DeclaratorLoc.
20//
21//===----------------------------------------------------------------------===//
22
23#ifndef UNQUAL_TYPELOC
24# define UNQUAL_TYPELOC(Class, Base) TYPELOC(Class, Base)
25#endif
26
27#ifndef ABSTRACT_TYPELOC
28# define ABSTRACT_TYPELOC(Class, Base) UNQUAL_TYPELOC(Class, Base)
29#endif
30
31TYPELOC(Qualified, TypeLoc)
32#define TYPE(Class, Base) UNQUAL_TYPELOC(Class, Base##Loc)
33#define ABSTRACT_TYPE(Class, Base) ABSTRACT_TYPELOC(Class, Base##Loc)
34#include "clang/AST/TypeNodes.inc"
35
36#undef DECLARATOR_TYPELOC
37#undef TYPESPEC_TYPELOC
38#undef ABSTRACT_TYPELOC
39#undef UNQUAL_TYPELOC
40#undef TYPELOC
41