undar-lang/emit.h

87 lines
2.1 KiB
C

#ifndef UNDAR_EMIT_H
#define UNDAR_EMIT_H
#include "common.h"
#include "libc.h"
typedef enum notation_type_e {
PREFIX,
INFIX,
POSTFIX
} NotationType;
typedef enum output_type_e {
BINARY,
TEXT
} OutputType;
typedef void (*SymbolEmit)(Symbol *sym);
typedef void (*ErrorMsg)(const char *str, i32 length, i32 line);
typedef void (*VoidArgEmit)();
typedef void (*StrArgEmit)(const char *str, i32 length);
typedef i32 (*TypeVariableEmit)(const char *str, i32 length);
typedef struct emitter_s Emitter;
struct emitter_s {
NotationType notation;
OutputType output;
ErrorMsg error;
VoidArgEmit prolog;
VoidArgEmit epilogue;
VoidArgEmit emit_add;
VoidArgEmit emit_sub;
VoidArgEmit emit_mul;
VoidArgEmit emit_div;
VoidArgEmit emit_lt;
VoidArgEmit emit_le;
VoidArgEmit emit_gt;
VoidArgEmit emit_ge;
VoidArgEmit emit_ne;
VoidArgEmit emit_eq;
VoidArgEmit emit_false;
VoidArgEmit emit_true;
VoidArgEmit emit_nil;
VoidArgEmit emit_void;
StrArgEmit emit_int;
StrArgEmit emit_nat;
StrArgEmit emit_real;
StrArgEmit emit_byte;
StrArgEmit emit_str;
TypeVariableEmit emit_bool_type;
TypeVariableEmit emit_byte_type;
TypeVariableEmit emit_int_type;
TypeVariableEmit emit_nat_type;
TypeVariableEmit emit_real_type;
TypeVariableEmit emit_str_type;
TypeVariableEmit emit_u8_type;
TypeVariableEmit emit_i8_type;
TypeVariableEmit emit_i16_type;
TypeVariableEmit emit_u16_type;
TypeVariableEmit emit_i32_type;
TypeVariableEmit emit_u32_type;
TypeVariableEmit emit_f32_type;
VoidArgEmit emit_array;
VoidArgEmit emit_function;
VoidArgEmit emit_plex;
VoidArgEmit emit_method;
VoidArgEmit emit_trait;
VoidArgEmit emit_const;
VoidArgEmit emit_print;
VoidArgEmit emit_neg;
VoidArgEmit emit_not;
VoidArgEmit emit_open_paren;
VoidArgEmit emit_close_paren;
StrArgEmit emit_constant;
SymbolEmit emit_variable;
VoidArgEmit emit_write;
VoidArgEmit emit_read;
VoidArgEmit emit_open;
VoidArgEmit emit_close;
VoidArgEmit emit_stat;
};
Emitter c_emitter();
Emitter uxn_emitter();
#endif