58 lines
1.1 KiB
C
58 lines
1.1 KiB
C
#ifndef MIE_VALUE_H_
|
|
#define MIE_VALUE_H_
|
|
|
|
#include <blue/core/queue.h>
|
|
#include <mie/misc.h>
|
|
#include <mie/name.h>
|
|
|
|
#define MIE_VALUE(p) ((struct mie_value *)(p))
|
|
|
|
struct mie_value;
|
|
|
|
enum mie_value_type_id {
|
|
MIE_VALUE_NONE = 0,
|
|
MIE_VALUE_MODULE,
|
|
MIE_VALUE_TYPE,
|
|
MIE_VALUE_RECORD,
|
|
MIE_VALUE_FUNC,
|
|
MIE_VALUE_ARG,
|
|
MIE_VALUE_BLOCK,
|
|
MIE_VALUE_INSTR,
|
|
MIE_VALUE_CONST,
|
|
};
|
|
|
|
enum mie_value_flags {
|
|
MIE_VALUE_F_NONE = 0x00u,
|
|
MIE_VALUE_F_STATIC = 0x01u,
|
|
};
|
|
|
|
struct mie_value_type {
|
|
enum mie_value_type_id t_id;
|
|
struct mie_type *(*t_get_type)(struct mie_value *);
|
|
void (*t_cleanup)(struct mie_value *);
|
|
};
|
|
|
|
struct mie_value {
|
|
struct mie_name v_name;
|
|
const struct mie_value_type *v_type;
|
|
enum mie_value_flags v_flags;
|
|
b_queue_entry v_entry;
|
|
};
|
|
|
|
MIE_API void mie_value_init(struct mie_value *val, enum mie_value_type_id type);
|
|
MIE_API void mie_value_destroy(struct mie_value *val);
|
|
|
|
MIE_API struct mie_type *mie_value_get_type(struct mie_value *val);
|
|
|
|
static inline bool mie_value_is(
|
|
const struct mie_value *val, enum mie_value_type_id type_id)
|
|
{
|
|
if (!val->v_type) {
|
|
return false;
|
|
}
|
|
|
|
return val->v_type->t_id == type_id;
|
|
}
|
|
|
|
#endif
|