74 lines
1.7 KiB
C
74 lines
1.7 KiB
C
#ifndef UNDAR_EMIT_H
|
|
#define UNDAR_EMIT_H
|
|
|
|
#include "libc.h"
|
|
|
|
typedef enum notation_type_e {
|
|
PREFIX,
|
|
INFIX,
|
|
POSTFIX
|
|
} NotationType;
|
|
|
|
typedef enum output_type_e {
|
|
BINARY,
|
|
TEXT
|
|
} OutputType;
|
|
|
|
typedef void (*VoidArgEmit)();
|
|
typedef void (*StrArgEmit)(const char *str, i32 length);
|
|
|
|
typedef struct emitter_s Emitter;
|
|
struct emitter_s {
|
|
NotationType notation;
|
|
OutputType output;
|
|
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;
|
|
VoidArgEmit emit_bool_type;
|
|
VoidArgEmit emit_byte_type;
|
|
VoidArgEmit emit_int_type;
|
|
VoidArgEmit emit_nat_type;
|
|
VoidArgEmit emit_real_type;
|
|
VoidArgEmit emit_str_type;
|
|
VoidArgEmit emit_u8_type;
|
|
VoidArgEmit emit_i8_type;
|
|
VoidArgEmit emit_i16_type;
|
|
VoidArgEmit emit_u16_type;
|
|
VoidArgEmit emit_i32_type;
|
|
VoidArgEmit emit_u32_type;
|
|
VoidArgEmit 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;
|
|
};
|
|
|
|
Emitter c_emitter();
|
|
Emitter uxn_emitter();
|
|
|
|
#endif |