48 lines
744 B
C
48 lines
744 B
C
#ifndef UNDAR_IR_ASSEMBLER_H
|
|
#define UNDAR_IR_ASSEMBLER_H
|
|
|
|
#include "../../vm/common.h"
|
|
#include "../../vm/opcodes.h"
|
|
#include "lexer.h"
|
|
|
|
typedef enum { GLOBAL, LOCAL, VAR } ScopeType;
|
|
typedef enum {
|
|
VOID,
|
|
BOOL,
|
|
I8,
|
|
I16,
|
|
I32,
|
|
U8,
|
|
U16,
|
|
U32,
|
|
F8,
|
|
F16,
|
|
F32,
|
|
STR,
|
|
PLEX,
|
|
ARRAY,
|
|
FUNCTION
|
|
} SymbolType;
|
|
|
|
typedef struct symbol_s Symbol;
|
|
typedef struct symbol_tab_s SymbolTable;
|
|
|
|
#define MAX_SYMBOL_NAME_LENGTH 64
|
|
struct symbol_s {
|
|
char name[MAX_SYMBOL_NAME_LENGTH];
|
|
SymbolType type;
|
|
ScopeType scope;
|
|
u32 ref; // vm->mp if global, vm->pc local, register if var
|
|
u32 size; // size of symbol
|
|
};
|
|
|
|
struct symbol_tab_s {
|
|
Symbol *symbols;
|
|
u32 count;
|
|
u32 capacity;
|
|
};
|
|
|
|
void assemble(VM *vm, char *source);
|
|
|
|
#endif
|