1
0
Fork 0
undar-lang-old/src/tools/compiler/compiler.h

113 lines
1.8 KiB
Objective-C

#ifndef UNDAR_COMPILER_H
#define UNDAR_COMPILER_H
#import "../../vm/common.h"
typedef enum { GLOBAL, LOCAL } ScopeType;
typedef enum {
VOID,
BOOL,
I8,
I16,
I32,
U8,
U16,
U32,
F8,
F16,
F32,
STR,
PLEX,
ARRAY,
FUNCTION
} SymbolType;
typedef struct value_type_s ValueType;
typedef struct function_def_s FunctionDef;
typedef struct function_tab_s FunctionTable;
typedef struct plex_def_s PlexDef;
typedef struct plex_tab_s PlexTable;
typedef struct array_def_s ArrayDef;
typedef struct array_tab_s ArrayTable;
typedef struct symbol_s Symbol;
typedef struct symbol_tab_s SymbolTable;
typedef struct names_tab_s NamesTable;
typedef struct plex_fields_tab_s PlexFieldsTable;
struct value_type_s {
SymbolType type;
u32 name;
u32 size;
u32 table_ref; // if it is a heap object
};
struct function_def_s {
u32 name;
ValueType args[8];
u8 arg_count;
ValueType return_type;
};
struct plex_def_s {
u32 name;
u32 size;
u32 field_ref_start;
u32 field_count;
};
struct array_def_s {
ValueType type;
u32 length;
u32 logical_size; // length of the array
u32 physical_size; // logical_size * type_size + fat pointer
};
struct symbol_s {
u32 name;
ValueType type;
ScopeType scope;
union {
u32 local; // register
u32 global; // address
} ref;
};
struct plex_fields_tab_s {
u32 *plex_refs;
ValueType *fields;
u32 count;
u32 capacity;
};
struct plex_tab_s {
PlexDef *symbols;
u32 count;
u32 capacity;
};
struct array_tab_s {
ArrayDef *symbols;
u32 count;
u32 capacity;
};
struct function_tab_s {
FunctionDef *symbols;
u32 count;
u32 capacity;
};
struct names_tab_s {
char **names;
u32 count;
u32 capacity;
};
struct symbol_tab_s {
Symbol *symbols;
u32 count;
u32 capacity;
};
#endif