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 435 - (view) (download)

1 : jhr 71 (* env.sml
2 :     *
3 : jhr 435 * COPYRIGHT (c) 2010 The Diderot Project (http://diderot-language.cs.uchicago.edu)
4 : jhr 71 * 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