1//===- llvm/Metadata.def - Metadata definitions -----------------*- 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// Macros for running through all types of metadata.
11//
12//===----------------------------------------------------------------------===//
13
14#if !(defined HANDLE_METADATA || defined HANDLE_METADATA_LEAF ||               \
15      defined HANDLE_METADATA_BRANCH || defined HANDLE_UNIQUABLE_LEAF ||       \
16      defined HANDLE_UNIQUABLE_BRANCH)
17#error "Missing macro definition of HANDLE_METADATA*"
18#endif
19
20// Handler for all types of metadata.
21#ifndef HANDLE_METADATA
22#define HANDLE_METADATA(CLASS)
23#endif
24
25// Handler for leaf nodes in the class hierarchy.
26#ifndef HANDLE_METADATA_LEAF
27#define HANDLE_METADATA_LEAF(CLASS) HANDLE_METADATA(CLASS)
28#endif
29
30// Handler for non-leaf nodes in the class hierarchy.
31#ifndef HANDLE_METADATA_BRANCH
32#define HANDLE_METADATA_BRANCH(CLASS) HANDLE_METADATA(CLASS)
33#endif
34
35// Handler for leaf nodes under UniquableMDNode.
36#ifndef HANDLE_UNIQUABLE_LEAF
37#define HANDLE_UNIQUABLE_LEAF(CLASS) HANDLE_METADATA_LEAF(CLASS)
38#endif
39
40// Handler for non-leaf nodes under UniquableMDNode.
41#ifndef HANDLE_UNIQUABLE_BRANCH
42#define HANDLE_UNIQUABLE_BRANCH(CLASS) HANDLE_METADATA_BRANCH(CLASS)
43#endif
44
45HANDLE_METADATA_LEAF(MDString)
46HANDLE_METADATA_BRANCH(ValueAsMetadata)
47HANDLE_METADATA_LEAF(ConstantAsMetadata)
48HANDLE_METADATA_LEAF(LocalAsMetadata)
49HANDLE_METADATA_BRANCH(MDNode)
50HANDLE_METADATA_LEAF(MDNodeFwdDecl)
51HANDLE_UNIQUABLE_BRANCH(UniquableMDNode)
52HANDLE_UNIQUABLE_LEAF(MDTuple)
53HANDLE_UNIQUABLE_LEAF(MDLocation)
54
55#undef HANDLE_METADATA
56#undef HANDLE_METADATA_LEAF
57#undef HANDLE_METADATA_BRANCH
58#undef HANDLE_UNIQUABLE_LEAF
59#undef HANDLE_UNIQUABLE_BRANCH
60