Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/compiler/TopLevel/environ/envref.sml
ViewVC logotype

Annotation of /sml/trunk/src/compiler/TopLevel/environ/envref.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 224 - (view) (download)

1 : monnier 16 (* COPYRIGHT (c) 1996 Bell Laboratories.*)
2 :     (* envref.sml *)
3 :    
4 :     signature ENVREF =
5 :     sig
6 :     type staticEnv = StaticEnv.staticEnv
7 : monnier 93 type CMstaticEnv = CMStaticEnv.staticEnv
8 : monnier 16 type environment = Environment.environment
9 : monnier 93 type CMenvironment = CMEnv.Env.environment
10 : monnier 16
11 :     type senvref = {get: unit -> staticEnv, set: staticEnv -> unit}
12 :     type envref = {get: unit -> environment, set: environment -> unit}
13 : monnier 93 type CMenvref = {get: unit -> CMenvironment, set: CMenvironment -> unit}
14 : monnier 16
15 :     val core: senvref
16 :     val topLevel : envref (* interactive top level env *)
17 : monnier 93 val pervasive : CMenvref (* pervasive environment *)
18 :     val unCM : CMenvref -> envref
19 :     val unCMenv : CMenvironment -> environment
20 :     val unCMstaticEnv : CMstaticEnv -> staticEnv
21 : monnier 16 val combined : unit -> environment
22 :     end
23 :    
24 :     structure EnvRef : ENVREF =
25 :     struct
26 :     type staticEnv = StaticEnv.staticEnv
27 : monnier 93 type CMstaticEnv = CMEnv.Env.staticEnv
28 : monnier 16 type environment = Environment.environment
29 : monnier 93 type CMenvironment = CMEnv.Env.environment
30 : monnier 16 type envref = {get: unit -> environment, set: environment -> unit}
31 : monnier 93 type CMenvref = {get: unit -> CMenvironment, set: CMenvironment -> unit}
32 : monnier 16 type senvref = {get: unit->StaticEnv.staticEnv, set: StaticEnv.staticEnv->unit}
33 :    
34 :     fun mkEnvRef a =
35 :     let val r = ref a
36 :     in {get=(fn()=> !r),set=(fn x=> r:=x)}
37 :     end
38 :    
39 :     val core = mkEnvRef StaticEnv.empty
40 :     val topLevel = mkEnvRef Environment.emptyEnv
41 : monnier 93 val pervasive = mkEnvRef CMEnv.Env.emptyEnv
42 : monnier 16
43 :     (* set disabled, since it is not expected to be used *)
44 : monnier 93 fun unCM ({get,set}: CMenvref) : envref =
45 :     {get = CMEnv.unCM o get,
46 :     set = (fn _ => raise Fail "EnvRef.unCM") (* set o CMEnv.CM *)}
47 : monnier 16
48 : monnier 93 val unCMenv : CMenvironment -> environment = CMEnv.unCM
49 :     val unCMstaticEnv : CMstaticEnv -> staticEnv = CMStaticEnv.unCM
50 : monnier 16
51 :     fun combined () =
52 : monnier 93 Environment.layerEnv(#get topLevel (), CMEnv.unCM(#get pervasive ()))
53 : monnier 16
54 :     end
55 : monnier 93
56 :     (*
57 : monnier 223 * $Log: envref.sml,v $
58 :     * Revision 1.1.1.1 1998/04/08 18:39:15 george
59 :     * Version 110.5
60 :     *
61 : monnier 93 *)

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0