blob: 8878238723faafe313c4413db6a56227960be14d (
plain) (
blame)
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
|
import "map.hff";
import "all.hff";
struct StringKeyTraits {
fn hash(s *const u8) u32 { return fnv1a_s(FNV1A_INI, s); }
fn eq(a *const u8, b *const u8) bool { return streq(a, b); }
}
struct Env {
parent *Env,
alloc *Allocator,
decls Map<*const u8, *DeclList, StringKeyTraits>,
}
extern fn mkenv(parent *Env, alloc *Allocator) *Env {
let env *Env = xmalloc(sizeof Env);
*env = { parent, alloc };
return env;
}
extern fn envput(env *Env, decl *const Decl) *Decl {
let l **DeclList = env.decls->get_slot(decl.name);
let n *DeclList = env.alloc->alloc(sizeof *DeclList);
n.link = *l;
n.decl = *decl;
*l = n;
return &n.decl;
}
|