-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathenv.h
59 lines (38 loc) · 1.15 KB
/
env.h
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
48
49
50
51
52
53
54
55
56
57
58
59
#ifndef ENV_INCLUDED
#define ENV_INCLUDED
#define OLD_ENV 0
#include "obj_binding.h"
#include "obj_pair.h"
#include "obj_record.h"
#include "obj.h"
#if OLD_ENV
/* environments */
static inline obj_t make_env(obj_t parent)
{
return CONS(EMPTY_LIST, parent);
}
#else
extern obj_t make_env(obj_t parent);
#endif
extern obj_t make_closed_env(obj_t parent, obj_t formals, obj_t actuals);
extern void env_bind (obj_t env,
obj_t name,
binding_type_t type,
mutability_t mutability,
obj_t value);
extern obj_t env_lookup(obj_t env, obj_t name);
extern obj_t env_try_lookup(obj_t env, obj_t name);
extern void env_set(obj_t env, obj_t name, obj_t value);
#if !OLD_ENV
static inline bool is_env_ref(obj_t obj)
{
extern obj_t env_ref;
return is_record(obj) && is_instance(obj, env_ref);
}
extern obj_t env_make_ref(obj_t env, obj_t var);
extern obj_t env_make_local_ref(obj_t arglist, obj_t var);
extern obj_t env_ref_lookup(obj_t env, obj_t env_ref);
extern void env_ref_set(obj_t env, obj_t env_ref, obj_t new_value);
#endif
extern obj_t root_environment(void);
#endif /* !ENV_INCLUDED */