From 2869e985567e45e9d57fe280b8472a541a21609d Mon Sep 17 00:00:00 2001 From: Max Wash Date: Sat, 17 Jan 2026 10:25:49 +0000 Subject: [PATCH] mie: builtin: add function to get int/float value from an attribute --- mie/dialect/builtin/attribute/float.c | 22 ++++++++++++++++++++++ mie/dialect/builtin/attribute/int.c | 12 ++++++++++++ mie/include/mie/dialect/builtin.h | 2 ++ 3 files changed, 36 insertions(+) diff --git a/mie/dialect/builtin/attribute/float.c b/mie/dialect/builtin/attribute/float.c index b55874b..7eec5ff 100644 --- a/mie/dialect/builtin/attribute/float.c +++ b/mie/dialect/builtin/attribute/float.c @@ -78,6 +78,28 @@ static enum mie_status parse( return MIE_SUCCESS; } +bool mie_float_get_value(const struct mie_attribute *attrib, double *out) +{ + if (!mie_attribute_check_name(attrib, "builtin", "float")) { + return false; + } + + const struct mie_float *v = (const struct mie_float *)attrib; + + switch (mie_float_type_get_width(v->f_type)) { + case MIE_FLOAT_32: + *out = v->f_val.v_32; + break; + case MIE_FLOAT_64: + *out = v->f_val.v_64; + break; + default: + return false; + } + + return true; +} + MIE_ATTRIBUTE_DEFINITION_BEGIN(mie_builtin_float, "float") MIE_ATTRIBUTE_DEFINITION_STRUCT(struct mie_float); MIE_ATTRIBUTE_DEFINITION_PRINT(print); diff --git a/mie/dialect/builtin/attribute/int.c b/mie/dialect/builtin/attribute/int.c index 0d1ccde..39cacdb 100644 --- a/mie/dialect/builtin/attribute/int.c +++ b/mie/dialect/builtin/attribute/int.c @@ -75,6 +75,18 @@ static enum mie_status parse( return MIE_SUCCESS; } +bool mie_int_get_value(const struct mie_attribute *attrib, long long *out) +{ + if (!mie_attribute_check_name(attrib, "builtin", "int")) { + return false; + } + + const struct mie_int *v = (const struct mie_int *)attrib; + *out = v->i_val.v_small; + + return true; +} + MIE_ATTRIBUTE_DEFINITION_BEGIN(mie_builtin_int, "int") MIE_ATTRIBUTE_DEFINITION_STRUCT(struct mie_int); MIE_ATTRIBUTE_DEFINITION_PRINT(print); diff --git a/mie/include/mie/dialect/builtin.h b/mie/include/mie/dialect/builtin.h index 4350b86..f16012c 100644 --- a/mie/include/mie/dialect/builtin.h +++ b/mie/include/mie/dialect/builtin.h @@ -114,6 +114,8 @@ MIE_API struct mie_attribute *mie_ctx_get_index(struct mie_ctx *ctx, size_t val) MIE_API const char *mie_string_get_cstr(const struct mie_attribute *attrib); MIE_API const struct mie_type *mie_type_attr_get_type( const struct mie_attribute *attrib); +MIE_API bool mie_int_get_value(const struct mie_attribute *attrib, long long *out); +MIE_API bool mie_float_get_value(const struct mie_attribute *attrib, double *out); MIE_API struct mie_type *mie_ctx_get_int_type(struct mie_ctx *ctx, size_t bit_width); MIE_API struct mie_type *mie_ctx_get_float_type(