48 lines
1.2 KiB
C
48 lines
1.2 KiB
C
#ifndef MIE_FUNC_H_
|
|
#define MIE_FUNC_H_
|
|
|
|
#define MIE_FUNC(p) ((struct mie_func *)(p))
|
|
|
|
#include <mie/ir/value.h>
|
|
|
|
struct mie_name_map;
|
|
struct mie_type;
|
|
struct mie_arg;
|
|
struct mie_block;
|
|
struct b_dict;
|
|
|
|
enum mie_func_type {
|
|
MIE_FUNC_NONE = 0x00u,
|
|
MIE_FUNC_STATIC = 0x01u,
|
|
MIE_FUNC_INSTANCE = 0x02u,
|
|
MIE_FUNC_LAMBDA = 0x03u,
|
|
};
|
|
|
|
struct mie_func {
|
|
struct mie_value f_base;
|
|
|
|
enum mie_func_type f_type;
|
|
struct mie_type *f_ret;
|
|
|
|
struct mie_name_map *f_names;
|
|
|
|
b_queue f_args;
|
|
b_queue f_blocks;
|
|
};
|
|
|
|
extern struct mie_func *mie_func_create(
|
|
enum mie_func_type type, struct mie_type *ret_type);
|
|
extern struct mie_value *mie_func_add_arg(
|
|
struct mie_func *func, struct mie_type *type, const char *name);
|
|
extern struct mie_block *mie_func_create_block(
|
|
struct mie_func *func, const char *name);
|
|
extern void mie_func_insert_block(
|
|
struct mie_func *func, struct mie_block *block, struct mie_block *after);
|
|
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
|