MimIR 0.1
MimIR is my Intermediate Representation
|
#include <optional>
#include <fe/assert.h>
#include <fe/cast.h>
#include <fe/enum.h>
#include "mim/config.h"
#include "mim/util/dbg.h"
#include "mim/util/hash.h"
#include "mim/util/sets.h"
#include "mim/util/util.h"
#include "mim/util/vector.h"
Go to the source code of this file.
Classes | |
class | mim::Setters< P, D > |
CRTP-based Mixin to declare setters for Def::loc & Def::name using a covariant return type. More... | |
class | mim::Def |
Base class for all Defs. More... | |
struct | mim::DefDefHash |
struct | mim::DefDefEq |
class | mim::Var |
class | mim::Univ |
class | mim::UMax |
class | mim::UInc |
class | mim::Type |
class | mim::Lit |
class | mim::Nat |
class | mim::Idx |
A built-in constant of type Nat -> * . More... | |
class | mim::Proxy |
class | mim::Global |
Namespaces | |
namespace | mim |
Macros | |
#define | MIM_NODE(m) |
#define | MIM_PROJ(NAME, CONST) |
Use as mixin to wrap all kind of Def::proj and Def::projs variants. | |
Typedefs | |
using | mim::NormalizeFn = const Def* (*)(const Def*, const Def*, const Def*) |
Def | |
template<class To> | |
using | mim::DefMap = GIDMap<const Def*, To> |
using | mim::DefSet = GIDSet<const Def*> |
using | mim::Def2Def = DefMap<const Def*> |
using | mim::Defs = View<const Def*> |
using | mim::DefVec = Vector<const Def*> |
Def (Mutable) | |
template<class To> | |
using | mim::MutMap = GIDMap<Def*, To> |
using | mim::MutSet = GIDSet<Def*> |
using | mim::Mut2Mut = MutMap<Def*> |
using | mim::Muts = Sets<Def>::Set |
Var | |
template<class To> | |
using | mim::VarMap = GIDMap<const Var*, To> |
using | mim::VarSet = GIDSet<const Var*> |
using | mim::Var2Var = VarMap<const Var*> |
using | mim::Vars = Sets<const Var>::Set |
DefDef | |
using | mim::DefDef = std::tuple<const Def*, const Def*> |
template<class To> | |
using | mim::DefDefMap = absl::flat_hash_map<DefDef, To, DefDefHash, DefDefEq> |
using | mim::DefDefSet = absl::flat_hash_set<DefDef, DefDefHash, DefDefEq> |
Enums that classify certain aspects of Defs. | |
#define | CODE(node, name, _) |
#define | CODE(node, name, _) |
enum class | mim::Node : node_t { mim::CODE , mim::Type , mim::Univ , mim::UMax , mim::UInc , mim::Pi , mim::Lam , mim::App , mim::Sigma , mim::Tuple , mim::Extract , mim::Insert , mim::Arr , mim::Pack , mim::Join , mim::Vel , mim::Test , mim::Top , mim::Meet , mim::Ac , mim::Pick , mim::Bot , mim::Uniq , mim::Nat , mim::Idx , mim::Lit , mim::Axiom , mim::Var , mim::Global , mim::Proxy , mim::Hole } |
enum class | mim::Sort { mim::Term , mim::Type , mim::Kind , mim::Space , mim::Univ , mim::Level } |
TODO remove or fix this. More... | |
enum class | mim::Dep : unsigned { mim::None = 0 , mim::Mut = 1 << 0 , mim::Var = 1 << 1 , mim::Hole = 1 << 2 , mim::Proxy = 1 << 3 } |
Tracks a dependency to certain Defs transitively through the Def::deps() up to but excliding mutables. More... | |
enum class | mim::Judge : u32 { mim::Form = 1 << 0 , mim::Intro = 1 << 1 , mim::Elim = 1 << 2 , mim::Meta = 1 << 3 , mim::Hole = 1 << 4 } |
Judgement. More... | |
static constexpr size_t | mim::Num_Nodes = size_t(0) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) +size_t(1) |
#define MIM_NODE | ( | m | ) |
Definition at line 18 of file def.h.
Referenced by mim::Def::judge(), and mim::Def::node_name().
#define MIM_PROJ | ( | NAME, | |
CONST ) |
Use as mixin to wrap all kind of Def::proj and Def::projs variants.