SCM Repository
Annotation of /trunk/src/env/env.sml
Parent Directory
|
Revision Log
Revision 78 - (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 | 71 | val findVar : env * Atom.atom -> AST.var option |
14 : | |||
15 : | jhr | 78 | val insertGlobal : env * Atom.atom * AST.var -> env |
16 : | val insertLocal : env * Atom.atom * AST.var -> env | ||
17 : | |||
18 : | jhr | 71 | end = struct |
19 : | |||
20 : | structure ATbl = AtomTable | ||
21 : | structure AMap = AtomMap | ||
22 : | |||
23 : | (* global environment holds global variables and actors *) | ||
24 : | datatype global_env = GE of { | ||
25 : | vEnv : AST.var ATbl.hash_table | ||
26 : | } | ||
27 : | |||
28 : | datatype env = E of { | ||
29 : | g : global_env, | ||
30 : | vEnv : AST.var AMap.map | ||
31 : | } | ||
32 : | |||
33 : | jhr | 78 | fun new () = E{ |
34 : | g = GE{vEnv = ATbl.mkTable(128, Fail "global env")}, | ||
35 : | vEnv = AMap.empty | ||
36 : | } | ||
37 : | |||
38 : | jhr | 71 | fun findVar (E{g=GE{vEnv=gvEnv, ...}, vEnv}, x) = (case AMap.find(vEnv, x) |
39 : | of NONE => ATbl.find gvEnv x | ||
40 : | | someVar => someVar | ||
41 : | (* end case *)) | ||
42 : | |||
43 : | jhr | 78 | fun insertGlobal (env as E{g=GE{vEnv, ...}, ...}, x, x') = ( |
44 : | ATbl.insert vEnv (x, x'); | ||
45 : | env) | ||
46 : | jhr | 71 | |
47 : | jhr | 72 | fun insertLocal (env as E{vEnv, g}, x, x') = |
48 : | jhr | 75 | E{vEnv = AMap.insert(vEnv, x, x'), g = g} |
49 : | jhr | 72 | |
50 : | jhr | 71 | end |
root@smlnj-gforge.cs.uchicago.edu | ViewVC Help |
Powered by ViewVC 1.0.0 |