From 44e242615b663896df13aa1da1efb540b7250d33 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Sat, 16 Aug 2025 20:53:40 +0100 Subject: [PATCH] mie: move mie_ctx out of the ir subsystem --- mie/{ir => }/ctx.c | 9 ++------- mie/include/mie/{ir => }/ctx.h | 2 +- mie/include/mie/ir/alloca.h | 2 +- mie/include/mie/ir/builder.h | 2 +- mie/include/mie/ir/msg.h | 2 +- mie/include/mie/ir/ptr.h | 2 +- mie/include/mie/{ir => }/type.h | 7 ++++++- mie/ir/block.c | 4 ++-- mie/ir/builder.c | 4 ++-- mie/ir/convert/text-write.c | 2 +- mie/ir/data.c | 4 ++-- mie/ir/instr.c | 2 +- mie/ir/module.c | 2 +- mie/ir/type.c | 11 ----------- mie/ir/value.c | 6 ++---- mie/type.c | 27 +++++++++++++++++++++++++++ 16 files changed, 51 insertions(+), 37 deletions(-) rename mie/{ir => }/ctx.c (95%) rename mie/include/mie/{ir => }/ctx.h (97%) rename mie/include/mie/{ir => }/type.h (82%) delete mode 100644 mie/ir/type.c create mode 100644 mie/type.c diff --git a/mie/ir/ctx.c b/mie/ctx.c similarity index 95% rename from mie/ir/ctx.c rename to mie/ctx.c index 822df23..fb80aa9 100644 --- a/mie/ir/ctx.c +++ b/mie/ctx.c @@ -1,8 +1,8 @@ #include #include #include +#include #include -#include #include #include @@ -96,14 +96,11 @@ struct mie_type *mie_ctx_get_type(struct mie_ctx *ctx, enum mie_type_id type_id) return ctx->ctx_types[type_id]; } - struct mie_type *type = malloc(sizeof *type); + struct mie_type *type = mie_type_create(); if (!type) { return NULL; } - memset(type, 0x0, sizeof *type); - - mie_value_init(&type->t_base, MIE_VALUE_TYPE); type->t_id = type_id; ctx->ctx_types[type_id] = type; @@ -126,7 +123,6 @@ struct mie_type *mie_ctx_get_int_type(struct mie_ctx *ctx, unsigned int nr_bits) memset(entry, 0x0, sizeof *entry); - mie_value_init(&entry->i_type.t_base, MIE_VALUE_TYPE); entry->i_type.t_id = MIE_TYPE_INT; entry->i_type.t_width = nr_bits; @@ -153,7 +149,6 @@ struct mie_value *mie_ctx_get_int( memset(entry, 0x0, sizeof *entry); - mie_value_init(&entry->i_type.t_base, MIE_VALUE_TYPE); entry->i_type.t_id = MIE_TYPE_INT; entry->i_type.t_width = nr_bits; diff --git a/mie/include/mie/ir/ctx.h b/mie/include/mie/ctx.h similarity index 97% rename from mie/include/mie/ir/ctx.h rename to mie/include/mie/ctx.h index 005f457..5732f17 100644 --- a/mie/include/mie/ir/ctx.h +++ b/mie/include/mie/ctx.h @@ -2,7 +2,7 @@ #define MIE_CTX_H_ #include -#include +#include struct mie_ctx { struct mie_const *ctx_true, *ctx_false; diff --git a/mie/include/mie/ir/alloca.h b/mie/include/mie/ir/alloca.h index f143487..8e64f62 100644 --- a/mie/include/mie/ir/alloca.h +++ b/mie/include/mie/ir/alloca.h @@ -2,7 +2,7 @@ #define MIE_ALLOCA_H_ #include -#include +#include struct mie_alloca { struct mie_instr a_base; diff --git a/mie/include/mie/ir/builder.h b/mie/include/mie/ir/builder.h index 11bd267..a45986b 100644 --- a/mie/include/mie/ir/builder.h +++ b/mie/include/mie/ir/builder.h @@ -3,9 +3,9 @@ #include #include -#include #include #include +#include struct b_hashmap; diff --git a/mie/include/mie/ir/msg.h b/mie/include/mie/ir/msg.h index e124798..aaf429f 100644 --- a/mie/include/mie/ir/msg.h +++ b/mie/include/mie/ir/msg.h @@ -2,7 +2,7 @@ #define MIE_MSG_H_ #include -#include +#include #define MIE_MSG(p) ((struct mie_msg *)(p)) diff --git a/mie/include/mie/ir/ptr.h b/mie/include/mie/ir/ptr.h index 6e54587..412a379 100644 --- a/mie/include/mie/ir/ptr.h +++ b/mie/include/mie/ir/ptr.h @@ -2,7 +2,7 @@ #define MIE_PTR_H_ #include -#include +#include struct mie_getelementptr { struct mie_instr gep_base; diff --git a/mie/include/mie/ir/type.h b/mie/include/mie/type.h similarity index 82% rename from mie/include/mie/ir/type.h rename to mie/include/mie/type.h index 957979e..ea75b05 100644 --- a/mie/include/mie/ir/type.h +++ b/mie/include/mie/type.h @@ -17,17 +17,22 @@ enum mie_type_id { MIE_TYPE_LABEL = 0x09u, MIE_TYPE_SELECTOR = 0x0Au, MIE_TYPE_FUNC = 0x0Bu, + MIE_TYPE_GLUE = 0xFEu, + MIE_TYPE_OTHER = 0xFFu, __MIE_TYPE_COUNT, }; struct mie_type { struct mie_value t_base; - enum mie_type_id t_id; + unsigned int t_count; + union { unsigned int t_width; b_queue t_vars; }; }; +extern struct mie_type *mie_type_create(void); + #endif diff --git a/mie/ir/block.c b/mie/ir/block.c index a37b104..e8cc743 100644 --- a/mie/ir/block.c +++ b/mie/ir/block.c @@ -1,8 +1,8 @@ +#include #include -#include #include #include -#include +#include #include struct mie_block *mie_block_create(struct mie_func *parent, const char *name) diff --git a/mie/ir/builder.c b/mie/ir/builder.c index 8ac3f5e..3de017c 100644 --- a/mie/ir/builder.c +++ b/mie/ir/builder.c @@ -1,9 +1,9 @@ #include +#include #include #include #include #include -#include #include #include #include @@ -11,7 +11,7 @@ #include #include #include -#include +#include #include #include diff --git a/mie/ir/convert/text-write.c b/mie/ir/convert/text-write.c index eeeadb6..fa802e5 100644 --- a/mie/ir/convert/text-write.c +++ b/mie/ir/convert/text-write.c @@ -16,8 +16,8 @@ #include #include #include -#include #include +#include #include #define F_INCLUDE_TYPE 0x01u diff --git a/mie/ir/data.c b/mie/ir/data.c index 20243a2..667cc9b 100644 --- a/mie/ir/data.c +++ b/mie/ir/data.c @@ -1,7 +1,7 @@ #include -#include +#include #include -#include +#include #include #include diff --git a/mie/ir/instr.c b/mie/ir/instr.c index f4df4e1..df8fe71 100644 --- a/mie/ir/instr.c +++ b/mie/ir/instr.c @@ -1,4 +1,4 @@ -#include +#include #include #include #include diff --git a/mie/ir/module.c b/mie/ir/module.c index 39068a7..f487ec7 100644 --- a/mie/ir/module.c +++ b/mie/ir/module.c @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include diff --git a/mie/ir/type.c b/mie/ir/type.c deleted file mode 100644 index 3bd2592..0000000 --- a/mie/ir/type.c +++ /dev/null @@ -1,11 +0,0 @@ -#include - -static struct mie_type *get_type(struct mie_value *v, struct mie_ctx *ctx) -{ - return MIE_TYPE(v); -} - -const struct mie_value_type type_value_type = { - .t_id = MIE_VALUE_TYPE, - .t_get_type = get_type, -}; diff --git a/mie/ir/value.c b/mie/ir/value.c index a34c457..2419dd4 100644 --- a/mie/ir/value.c +++ b/mie/ir/value.c @@ -3,7 +3,6 @@ #include extern const struct mie_value_type module_value_type; -extern const struct mie_value_type type_value_type; extern const struct mie_value_type record_value_type; extern const struct mie_value_type func_value_type; extern const struct mie_value_type arg_value_type; @@ -15,7 +14,6 @@ extern const struct mie_value_type data_value_type; static const struct mie_value_type *value_types[] = { [MIE_VALUE_NONE] = NULL, [MIE_VALUE_MODULE] = &module_value_type, - [MIE_VALUE_TYPE] = &type_value_type, [MIE_VALUE_RECORD] = &record_value_type, [MIE_VALUE_FUNC] = &func_value_type, [MIE_VALUE_ARG] = &arg_value_type, @@ -39,8 +37,8 @@ void mie_value_destroy(struct mie_value *val) val->v_type->t_cleanup(val); } - if (val->v_name.n_str) { - free(val->v_name.n_str); + if (MIE_NAME_VALID(&val->v_name)) { + mie_name_destroy(&val->v_name); } free(val); diff --git a/mie/type.c b/mie/type.c new file mode 100644 index 0000000..15c0906 --- /dev/null +++ b/mie/type.c @@ -0,0 +1,27 @@ +#include +#include +#include + +static struct mie_type *get_type(struct mie_value *v, struct mie_ctx *ctx) +{ + return MIE_TYPE(v); +} + +const struct mie_value_type type_value_type = { + .t_id = MIE_VALUE_TYPE, + .t_get_type = get_type, +}; + +struct mie_type *mie_type_create(void) +{ + struct mie_type *out = malloc(sizeof *out); + if (!out) { + return NULL; + } + + memset(out, 0x0, sizeof *out); + + out->t_base.v_type = &type_value_type; + + return out; +}