Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /trunk/src/compiler/env/env.sml
ViewVC logotype

Annotation of /trunk/src/compiler/env/env.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 110 - (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