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