 |
P4C
The P4 Compiler
|
Loading...
Searching...
No Matches
8#ifndef IR_IR_TREE_MACROS_H_
9#define IR_IR_TREE_MACROS_H_
20#include "ir/gen-tree-macro.h"
22#define IRNODE_ALL_TEMPLATES_AND_DIRECT_AND_INDIRECT_BASES(M, D, B, TDA, ...) \
23 M(Vector, D(Node), template <class T>, <T>, ##__VA_ARGS__) \
24 M(IndexedVector, D(Vector<T>) B(Node), template <class T>, <T>, ##__VA_ARGS__) \
27 template <class T, template <class, class, class, class> class MAP TDA(= std::map), \
28 class COMP TDA(= std::less<cstring>), \
29 class ALLOC TDA(= std::allocator<std::pair<cstring, const T*>>)>), \
30 IR_TREE_COPY(<T, MAP, COMP, ALLOC>), ##__VA_ARGS__)
33#define IR_TREE_COPY(...) __VA_ARGS__
34#define IR_TREE_IGNORE(...)
37#define IRNODE_ALL_CLASSES_AND_BASES(M, B, ...) \
38 M(Node, , ##__VA_ARGS__) \
39 IRNODE_ALL_SUBCLASSES_AND_DIRECT_AND_INDIRECT_BASES(M, M, B, B, ##__VA_ARGS__)
41#define IRNODE_ALL_NON_TEMPLATE_CLASSES_AND_BASES(M, B, ...) \
42 M(Node, , ##__VA_ARGS__) \
43 IRNODE_ALL_SUBCLASSES_AND_DIRECT_AND_INDIRECT_BASES(M, IR_TREE_IGNORE, B, B, ##__VA_ARGS__)
46#define IRNODE_ALL_SUBCLASSES(M, ...) \
47 IRNODE_ALL_SUBCLASSES_AND_DIRECT_AND_INDIRECT_BASES(M, M, IR_TREE_COPY, IR_TREE_IGNORE, \
49#define IRNODE_ALL_NON_TEMPLATE_SUBCLASSES(M, ...) \
50 IRNODE_ALL_SUBCLASSES_AND_DIRECT_AND_INDIRECT_BASES(M, IR_TREE_IGNORE, IR_TREE_COPY, \
51 IR_TREE_IGNORE, ##__VA_ARGS__)
52#define IRNODE_ALL_TEMPLATES_AND_BASES(M, ...) \
53 IRNODE_ALL_TEMPLATES_AND_DIRECT_AND_INDIRECT_BASES(M, IR_TREE_COPY, IR_TREE_IGNORE, \
54 IR_TREE_IGNORE, ##__VA_ARGS__)
57#define REMOVE_BASES_ARG(CLASS, BASES, M, ...) M(IR_TREE_COPY(CLASS), ##__VA_ARGS__)
58#define IRNODE_ALL_CLASSES(M, ...) \
59 IRNODE_ALL_CLASSES_AND_BASES(REMOVE_BASES_ARG, IR_TREE_IGNORE, M, ##__VA_ARGS__)
60#define IRNODE_ALL_NON_TEMPLATE_CLASSES(M, ...) \
61 IRNODE_ALL_NON_TEMPLATE_CLASSES_AND_BASES(REMOVE_BASES_ARG, IR_TREE_IGNORE, M, ##__VA_ARGS__)
63#define REMOVE_TEMPLATE_BASES_ARG(CLASS, BASES, TEMPLATE, TARGS, M, ...) \
64 M(IR_TREE_COPY(CLASS), IR_TREE_COPY(TEMPLATE), IR_TREE_COPY(TARGS), ##__VA_ARGS__)
65#define IRNODE_ALL_TEMPLATES(M, ...) \
66 IRNODE_ALL_TEMPLATES_AND_DIRECT_AND_INDIRECT_BASES(REMOVE_TEMPLATE_BASES_ARG, IR_TREE_IGNORE, \
67 IR_TREE_IGNORE, IR_TREE_IGNORE, M, \
69#define IRNODE_ALL_TEMPLATES_WITH_DEFAULTS(M, ...) \
70 IRNODE_ALL_TEMPLATES_AND_DIRECT_AND_INDIRECT_BASES( \
71 REMOVE_TEMPLATE_BASES_ARG, IR_TREE_IGNORE, IR_TREE_IGNORE, IR_TREE_COPY, M, ##__VA_ARGS__)