diff options
Diffstat (limited to 'src/bootstrap/environment.c')
-rw-r--r-- | src/bootstrap/environment.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/bootstrap/environment.c b/src/bootstrap/environment.c index 4eda2ad..fca2449 100644 --- a/src/bootstrap/environment.c +++ b/src/bootstrap/environment.c | |||
@@ -7,17 +7,36 @@ typedef struct EnvSymbol { | |||
7 | Object *value; | 7 | Object *value; |
8 | } EnvSymbol; | 8 | } EnvSymbol; |
9 | 9 | ||
10 | typedef struct Environment { | ||
11 | struct Environment *parent; | ||
12 | EnvSymbol *memory; | ||
13 | size_t size; | ||
14 | size_t capacity; | ||
15 | } Environment; | ||
16 | |||
10 | #define ENV_SIZE 256 | 17 | #define ENV_SIZE 256 |
11 | static EnvSymbol environment[ENV_SIZE]; | 18 | static EnvSymbol environment[ENV_SIZE]; |
12 | static size_t env_n = 0; | 19 | static size_t env_n = 0; |
13 | 20 | ||
14 | Object * | 21 | Object * |
15 | find_environment_symbol(Object *symbol) { | 22 | env_find_symbol(Object *symbol) { |
16 | for (size_t i = 0; i < env_n; i++) { | 23 | for (size_t i = 0; i < env_n; i++) { |
17 | if (symbol_eq(environment[i].symbol, symbol)) { | 24 | if (symbol_eq(environment[i].symbol, symbol)) { |
18 | return environment[i].value; | 25 | return environment[i].value; |
19 | } | 26 | } |
20 | } | 27 | } |
28 | return obj_nil; | ||
29 | } | ||
30 | |||
31 | Environment * | ||
32 | env_create(Environment *parent) { | ||
33 | // TODO: calloc env and assign parent. | ||
21 | return NULL; | 34 | return NULL; |
22 | } | 35 | } |
23 | 36 | ||
37 | void | ||
38 | env_add_symbol(EnvSymbol symbol, Environment *env) { | ||
39 | // TODO: If empty allocate enough for one object. | ||
40 | // TODO: If full double the capacity and realloc. | ||
41 | // TODO: Put the symbol on the next slot available. | ||
42 | } | ||