From eeff5e273f22aa28e81ab080e9ffdce85ac394b8 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Fri, 22 Oct 2021 09:59:31 +0200 Subject: Prepare skeleton for bytecode interpreter --- src/treewalk/environment.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/treewalk/environment.h (limited to 'src/treewalk/environment.h') 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 @@ +#ifndef BDL_ENVIRONMENT_H +#define BDL_ENVIRONMENT_H + +#include "objects.h" + +typedef struct Environment { + struct Environment *parent; + HashTable *table; + bool marked; +} Environment; + +Environment * env_create(Environment *parent); +void env_add_symbol(Environment *env, Object *symbol, Object *value); +Object * env_lookup(Environment *env, Object *symbol); +Object * env_update(Environment *env, Object *symbol, Object *value); +ssize_t env_index_current(Environment *env, Object *symbol); +void env_add_or_update_current(Environment *env, Object *symbol, Object *value); +Environment * env_extend(Environment *parent, Environment *extra); + +#define MAKE_ENV_VAR(ENV,STR,VAR) \ + (env_add_symbol((ENV), MAKE_SYM(STR), (VAR))) +#define MAKE_ENV_PROC(ENV,STR,FUN) \ + (env_add_symbol((ENV), MAKE_SYM(STR), make_procedure(FUN))) + +#define ENV_BUF_CAP 8 + +#endif // BDL_ENVIRONMENT_H -- cgit v1.2.1