forked from MetalOxideSemi/EJack
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathenvironment.c
47 lines (40 loc) · 1.02 KB
/
environment.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "environment.h"
void new_env(Environment *env)
{
env->head = 0;
for (int i = 0; i < VAR_NUM; i++)
{
env->var[i].value = NULL;
memset(env->var[i].name, 0, sizeof(env->var[i].name));
}
env->var[env->head].value =&PI;
strcpy(env->var[env->head].name,"PI");
++env->head;
}
Environment *ext_env_letrec(char *name, void *value, Environment *env)
{
strcpy(env->var[env->head].name, name);
env->var[env->head].value = value;
++env->head;
return env;
}
Environment* ext_env(char *name, void *value, Environment *env)
{
Environment* lenv = malloc(sizeof(Environment));
memcpy(lenv, env, sizeof(Environment));
strcpy(lenv->var[lenv->head].name, name);
lenv->var[lenv->head].value = value;
++lenv->head;
return lenv;
}
void *lookup_env(char *name, Environment *env)
{
for (int i = env->head - 1; i >= 0; i--)
{
if (!strcmp(env->var[i].name, name))
{
return env->var[i].value;
}
}
return NULL;
}