MimIR 0.1
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
autogen.h
Go to the documentation of this file.
1#pragma once
2
3#include <mim/axm.h>
4#include <mim/plugin.h>
5
6/// @namespace mim::plug::tuple @ref tuple
7namespace mim {
8namespace plug::tuple {
9
10static constexpr plugin_t Plugin_Id = 0x55644d1800000000;
11
12/// @name %%tuple.cat
13///@{
14enum class cat : flags_t {
15};
16
17const Def* normalize_cat(const Def*, const Def*, const Def*);
18///@}
19
20/// @name %%tuple.cat_uniform
21///@{
22enum class cat_uniform : flags_t {
23};
24
25const Def* normalize_cat_uniform(const Def*, const Def*, const Def*);
26///@}
27
28/// @name %%tuple.append
29///@{
30enum class append : flags_t {
31};
32
33///@}
34
35/// @name %%tuple.prepend
36///@{
37enum class prepend : flags_t {
38};
39
40///@}
41
42/// @name %%tuple.contains
43///@{
44enum class contains : flags_t {
45};
46
47const Def* normalize_contains(const Def*, const Def*, const Def*);
48///@}
49
50/// @name %%tuple.zip
51///@{
52enum class zip : flags_t {
53};
54
55const Def* normalize_zip(const Def*, const Def*, const Def*);
56///@}
57
59
60#define MIM_tuple_NORMALIZER_IMPL \
61 void register_normalizers(Normalizers& normalizers) {\
62 normalizers[flags_t(Annex::Base<cat>)] = &normalize_cat; \
63 normalizers[flags_t(Annex::Base<cat_uniform>)] = &normalize_cat_uniform; \
64 normalizers[flags_t(Annex::Base<contains>)] = &normalize_contains; \
65 normalizers[flags_t(Annex::Base<zip>)] = &normalize_zip; \
66 }
67} // namespace plug::tuple
68
69#ifndef DOXYGEN // don't include in Doxygen documentation
70
71template<> constexpr flags_t Annex::Base<plug::tuple::cat> = 0x55644d1800000000;
72template<> constexpr size_t Annex::Num<plug::tuple::cat> = 0;
73template<> constexpr flags_t Annex::Base<plug::tuple::cat_uniform> = 0x55644d1800000100;
74template<> constexpr size_t Annex::Num<plug::tuple::cat_uniform> = 0;
75template<> constexpr flags_t Annex::Base<plug::tuple::append> = 0x55644d1800000200;
76template<> constexpr size_t Annex::Num<plug::tuple::append> = 0;
77template<> constexpr flags_t Annex::Base<plug::tuple::prepend> = 0x55644d1800000300;
78template<> constexpr size_t Annex::Num<plug::tuple::prepend> = 0;
79template<> constexpr flags_t Annex::Base<plug::tuple::contains> = 0x55644d1800000400;
80template<> constexpr size_t Annex::Num<plug::tuple::contains> = 0;
81template<> constexpr flags_t Annex::Base<plug::tuple::zip> = 0x55644d1800000500;
82template<> constexpr size_t Annex::Num<plug::tuple::zip> = 0;
83
84template<> struct Axm::IsANode<plug::tuple::append> { using type = Axm; };
85template<> struct Axm::IsANode<plug::tuple::prepend> { using type = Axm; };
86
87#endif
88} // namespace mim
89
90#ifndef DOXYGEN // don't include in Doxygen documentation
91
92
93#endif
Base class for all Defs.
Definition def.h:203
The tuple Plugin
static constexpr plugin_t Plugin_Id
Definition autogen.h:10
const Def * normalize_cat_uniform(const Def *type, const Def *callee, const Def *arg)
void register_normalizers(Normalizers &normalizers)
const Def * normalize_cat(const Def *type, const Def *callee, const Def *arg)
const Def * normalize_zip(const Def *type, const Def *c, const Def *arg)
const Def * normalize_contains(const Def *type, const Def *, const Def *arg)
Definition ast.h:14
u64 flags_t
Definition types.h:45
absl::flat_hash_map< flags_t, NormalizeFn > Normalizers
Definition plugin.h:19
u64 plugin_t
Definition types.h:46
@ Axm
Definition def.h:85
static constexpr size_t Num
Definition plugin.h:115
static constexpr flags_t Base
Definition plugin.h:118