diff --git a/mie/func.c b/mie/func.c index 7d975dc..0b60e53 100644 --- a/mie/func.c +++ b/mie/func.c @@ -80,6 +80,26 @@ struct mie_value *mie_func_generate_value_name( return b_unbox(struct mie_value, name, v_name); } +struct mie_block *mie_func_get_first_block(struct mie_func *func) +{ + b_queue_entry *entry = b_queue_first(&func->f_blocks); + if (!entry) { + return NULL; + } + + return (struct mie_block *)b_unbox(struct mie_value, entry, v_entry); +} + +struct mie_block *mie_func_get_last_block(struct mie_func *func) +{ + b_queue_entry *entry = b_queue_last(&func->f_blocks); + if (!entry) { + return NULL; + } + + return (struct mie_block *)b_unbox(struct mie_value, entry, v_entry); +} + static struct mie_type *get_type(struct mie_value *v) { struct mie_func *f = MIE_FUNC(v); diff --git a/mie/include/mie/block.h b/mie/include/mie/block.h index 0db719a..15afee7 100644 --- a/mie/include/mie/block.h +++ b/mie/include/mie/block.h @@ -22,4 +22,9 @@ MIE_API struct mie_block *mie_block_create( struct mie_func *parent, const char *name); MIE_API bool mie_block_add_instr(struct mie_block *block, struct mie_instr *instr); +static inline bool mie_block_is_terminated(const struct mie_block *block) +{ + return block->b_terminator != NULL; +} + #endif diff --git a/mie/include/mie/builder.h b/mie/include/mie/builder.h index ad257c5..2bc5684 100644 --- a/mie/include/mie/builder.h +++ b/mie/include/mie/builder.h @@ -43,6 +43,8 @@ extern struct mie_builder *mie_builder_create( struct mie_ctx *ctx, struct mie_module *mod); extern void mie_builder_destroy(struct mie_builder *builder); +extern struct mie_func *mie_builder_get_current_func(struct mie_builder *builder); + extern void mie_builder_put_record( struct mie_builder *builder, struct mie_const *val, const char *name); extern void mie_builder_put_data(struct mie_builder *builder, struct mie_data *data); diff --git a/mie/include/mie/func.h b/mie/include/mie/func.h index cebe9c1..2f39ce4 100644 --- a/mie/include/mie/func.h +++ b/mie/include/mie/func.h @@ -40,4 +40,7 @@ extern void mie_func_insert_block( extern struct mie_value *mie_func_generate_value_name( struct mie_func *func, struct mie_value *val, const char *hint); +extern struct mie_block *mie_func_get_first_block(struct mie_func *func); +extern struct mie_block *mie_func_get_last_block(struct mie_func *func); + #endif