ccm/lib/sym.h

45 lines
911 B
C

#ifndef CCM_SYM_H
#define CCM_SYM_H
#include "commons.h"
#include "vec.h"
#include "value.h"
typedef struct {
char* name;
int local_addr;
int is_const;
} sym_entry_t;
typedef struct env {
vec_t entries;
struct env* parent;
} env_t;
typedef struct {
env_t* env;
} sym_t;
void sym_init(sym_t* self);
void sym_free(sym_t* self);
void sym_free_env(sym_t* self, env_t* env);
void sym_open_scope(sym_t* self);
void sym_close_scope(sym_t* self);
int sym_declare(sym_t* self,
char const* name,
int addr,
int is_const);
int sym_try_assign(sym_t* self,
char const* name,
int addr);
sym_entry_t* sym_try_get_value(sym_t* self, char const* name);
sym_entry_t* sym_try_get_env_value(sym_t* self,
env_t* env,
char const* name);
#endif