ccm/lib/sym.h

47 lines
943 B
C
Raw Permalink Normal View History

2024-03-21 11:00:20 +00:00
#ifndef CCM_SYM_H
#define CCM_SYM_H
#include "commons.h"
#include "vec.h"
#include "value.h"
typedef struct {
char* name;
2024-03-22 22:01:20 +00:00
int id;
2024-03-21 11:00:20 +00:00
int local_addr;
2024-03-22 07:20:31 +00:00
int is_const;
2024-03-21 11:00:20 +00:00
} sym_entry_t;
typedef struct env {
vec_t entries;
struct env* parent;
} env_t;
typedef struct {
env_t* env;
2024-03-22 22:01:20 +00:00
int id_counter;
2024-03-21 11:00:20 +00:00
} 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,
2024-03-22 07:20:31 +00:00
char const* name,
int addr,
int is_const);
2024-03-21 11:00:20 +00:00
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);
2024-03-22 07:20:31 +00:00
sym_entry_t* sym_try_get_env_value(sym_t* self,
2024-03-21 11:00:20 +00:00
env_t* env,
char const* name);
#endif