SCM Repository
Annotation of /trunk/src/compiler/env/env.sml
Parent Directory
|
Revision Log
Revision 169 - (view) (download)
1 : | jhr | 71 | (* env.sml |
2 : | * | ||
3 : | * COPYRIGHT (c) 2010 The Diderot Project (http://diderot.cs.uchicago.edu) | ||
4 : | * All rights reserved. | ||
5 : | *) | ||
6 : | |||
7 : | structure Env : sig | ||
8 : | |||
9 : | type env | ||
10 : | |||
11 : | jhr | 78 | val new : unit -> env |
12 : | |||
13 : | jhr | 169 | val findFunc : env * Atom.atom -> AST.var option |
14 : | |||
15 : | jhr | 71 | val findVar : env * Atom.atom -> AST.var option |
16 : | |||
17 : | jhr | 169 | (* insert a function binding *) |
18 : | val insertFunc : env * Atom.atom * AST.var -> env | ||
19 : | |||
20 : | (* insert variable bindings *) | ||
21 : | jhr | 78 | val insertGlobal : env * Atom.atom * AST.var -> env |
22 : | val insertLocal : env * Atom.atom * AST.var -> env | ||
23 : | |||
24 : | jhr | 71 | end = struct |
25 : | |||
26 : | structure ATbl = AtomTable | ||
27 : | structure AMap = AtomMap | ||
28 : | |||
29 : | (* global environment holds global variables and actors *) | ||
30 : | datatype global_env = GE of { | ||
31 : | jhr | 169 | fEnv : AST.var ATbl.hash_table, (* functions *) |
32 : | vEnv : AST.var ATbl.hash_table (* global variable bindings *) | ||
33 : | jhr | 71 | } |
34 : | |||
35 : | datatype env = E of { | ||
36 : | g : global_env, | ||
37 : | vEnv : AST.var AMap.map | ||
38 : | } | ||
39 : | |||
40 : | jhr | 78 | fun new () = E{ |
41 : | jhr | 169 | g = GE{ |
42 : | fEnv = ATbl.mkTable(128, Fail "global function env"), | ||
43 : | vEnv = ATbl.mkTable(128, Fail "global variable env") | ||
44 : | }, | ||
45 : | jhr | 78 | vEnv = AMap.empty |
46 : | } | ||
47 : | |||
48 : | jhr | 169 | fun findFunc (E{g=GE{fEnv, ...}, ...}, x) = ATbl.find fEnv x |
49 : | |||
50 : | jhr | 71 | fun findVar (E{g=GE{vEnv=gvEnv, ...}, vEnv}, x) = (case AMap.find(vEnv, x) |
51 : | of NONE => ATbl.find gvEnv x | ||
52 : | | someVar => someVar | ||
53 : | (* end case *)) | ||
54 : | |||
55 : | jhr | 169 | fun insertFunc (env as E{g=GE{fEnv, ...}, ...}, f, f') = ( |
56 : | ATbl.insert fEnv (f, f'); | ||
57 : | env) | ||
58 : | |||
59 : | jhr | 78 | fun insertGlobal (env as E{g=GE{vEnv, ...}, ...}, x, x') = ( |
60 : | ATbl.insert vEnv (x, x'); | ||
61 : | env) | ||
62 : | jhr | 71 | |
63 : | jhr | 72 | fun insertLocal (env as E{vEnv, g}, x, x') = |
64 : | jhr | 75 | E{vEnv = AMap.insert(vEnv, x, x'), g = g} |
65 : | jhr | 72 | |
66 : | jhr | 71 | end |
root@smlnj-gforge.cs.uchicago.edu | ViewVC Help |
Powered by ViewVC 1.0.0 |