From c014895051336f3a244b69ae1dcf17e9c3a60f9b Mon Sep 17 00:00:00 2001 From: Max Wash Date: Sat, 17 Jan 2026 10:31:52 +0000 Subject: [PATCH] mie: func: add return op --- mie/dialect/func/func.c | 1 + mie/dialect/func/op/return.c | 49 ++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 mie/dialect/func/op/return.c diff --git a/mie/dialect/func/func.c b/mie/dialect/func/func.c index ff3f881..8ebd12a 100644 --- a/mie/dialect/func/func.c +++ b/mie/dialect/func/func.c @@ -4,4 +4,5 @@ MIE_DIALECT_BEGIN(mie_func, struct mie_dialect, "func") MIE_DIALECT_ADD_OP(mie_func_func); + MIE_DIALECT_ADD_OP(mie_func_return); MIE_DIALECT_END() diff --git a/mie/dialect/func/op/return.c b/mie/dialect/func/op/return.c new file mode 100644 index 0000000..2599635 --- /dev/null +++ b/mie/dialect/func/op/return.c @@ -0,0 +1,49 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static enum mie_status print(struct mie_printer *printer, const struct mie_op *op) +{ + b_stream_write_char(printer->p_stream, ' '); + + for (size_t i = 0; i < MIE_VECTOR_COUNT(op->op_args); i++) { + if (i > 0) { + b_stream_write_string(printer->p_stream, ", ", NULL); + } + + mie_printer_print_op_arg(printer, &op->op_args.items[i], false); + } + + b_stream_write_string(printer->p_stream, " : ", NULL); + + for (size_t i = 0; i < MIE_VECTOR_COUNT(op->op_args); i++) { + if (i > 0) { + b_stream_write_string(printer->p_stream, ", ", NULL); + } + + mie_printer_print_type( + printer, mie_op_arg_get_type(&op->op_args.items[i])); + } + + return MIE_SUCCESS; +} + +static enum mie_status parse(struct mie_parser *parser, struct mie_op *out) +{ + return MIE_SUCCESS; +} + +MIE_OP_DEFINITION_BEGIN(mie_func_return, "return") + MIE_OP_DEFINITION_PRINT(print); + MIE_OP_DEFINITION_PARSE(parse); +MIE_OP_DEFINITION_END()