45 lines
911 B
C
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
|