64 lines
1.3 KiB
C
64 lines
1.3 KiB
C
#ifndef FZL_SYMTABLE_H
|
|
#define FZL_SYMTABLE_H
|
|
|
|
#include <common/fzl_types.h>
|
|
#include <compiler/fzl_parser.h>
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
typedef enum
|
|
{
|
|
FZL_SYMTABLE_RESULT_OK,
|
|
FZL_SYMTABLE_RESULT_ERR,
|
|
FZL_SYMTABLE_RESULT_EXISTS,
|
|
FZL_SYMTABLE_RESULT_NOT_OBJECT
|
|
} fzl_symtable_res_t;
|
|
|
|
// Symbols table entry descriptor
|
|
typedef struct
|
|
{
|
|
char *name;
|
|
fzl_type_t type;
|
|
fzl_node_t *node;
|
|
size_t ip;
|
|
|
|
bool slot_set;
|
|
size_t slot;
|
|
|
|
char *classname;
|
|
} fzl_sym_t;
|
|
|
|
// Symbols table descriptor
|
|
typedef struct
|
|
{
|
|
size_t size;
|
|
size_t remainder;
|
|
|
|
size_t free_slot;
|
|
|
|
fzl_sym_t *symbols;
|
|
} fzl_symtable_t;
|
|
|
|
// Allocate new symbtable
|
|
fzl_symtable_t *fzl_mksymt();
|
|
|
|
// Put new entry into symtable
|
|
fzl_symtable_res_t fzl_symt_put(fzl_symtable_t *symt, fzl_node_t *node,
|
|
char *name, fzl_type_t type, uint64_t ip);
|
|
|
|
// Assign class name to object type
|
|
fzl_symtable_res_t fzl_symt_setobjclass(fzl_symtable_t *symt, char *name,
|
|
char *classname);
|
|
|
|
// Assign a local slot to a variable
|
|
int fzl_symt_setslot(fzl_symtable_t *symt, char *name);
|
|
|
|
// Get entry from specified symtable
|
|
bool fzl_symt_get(fzl_symtable_t *symt, char *name, fzl_sym_t *res);
|
|
|
|
// Free symbtable
|
|
void fzl_freesymt(fzl_symtable_t *symt);
|
|
|
|
#endif // FZL_SYMTABLE_H
|