diff options
Diffstat (limited to 'src/bootstrap/environment.h')
-rw-r--r-- | src/bootstrap/environment.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/bootstrap/environment.h b/src/bootstrap/environment.h new file mode 100644 index 0000000..cc13921 --- /dev/null +++ b/src/bootstrap/environment.h | |||
@@ -0,0 +1,34 @@ | |||
1 | #ifndef BDL_ENVIRONMENT_H | ||
2 | #define BDL_ENVIRONMENT_H | ||
3 | |||
4 | #include "objects.h" | ||
5 | |||
6 | typedef struct EnvEntry { | ||
7 | Object *symbol; | ||
8 | Object *value; | ||
9 | } EnvEntry; | ||
10 | |||
11 | typedef struct Environment { | ||
12 | struct Environment *parent; | ||
13 | EnvEntry *buf; | ||
14 | size_t size; | ||
15 | size_t cap; | ||
16 | bool marked; | ||
17 | } Environment; | ||
18 | |||
19 | Environment * env_create(Environment *parent); | ||
20 | void env_add_symbol(Environment *env, Object *symbol, Object *value); | ||
21 | Object * env_lookup(Environment *env, Object *symbol); | ||
22 | Object * env_update(Environment *env, Object *symbol, Object *value); | ||
23 | ssize_t env_index_current(Environment *env, Object *symbol); | ||
24 | void env_add_or_update_current(Environment *env, Object *symbol, Object *value); | ||
25 | Environment * env_extend(Environment *parent, Environment *extra); | ||
26 | |||
27 | #define MAKE_ENV_VAR(ENV,STR,VAR) \ | ||
28 | (env_add_symbol((ENV), MAKE_SYM(STR), (VAR))) | ||
29 | #define MAKE_ENV_PROC(ENV,STR,FUN) \ | ||
30 | (env_add_symbol((ENV), MAKE_SYM(STR), make_procedure(FUN))) | ||
31 | |||
32 | #define ENV_BUF_CAP 8 | ||
33 | |||
34 | #endif // BDL_ENVIRONMENT_H | ||