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/FLINT/kernel/lambdavar.sml
ViewVC logotype

Annotation of /sml/trunk/src/compiler/FLINT/kernel/lambdavar.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 246 - (view) (download)

1 : monnier 245 (* Copyright 1996 by AT&T Bell Laboratories *)
2 :     (* lambdavar.sml *)
3 :    
4 :     structure LambdaVar : LAMBDA_VAR =
5 :     struct
6 :    
7 :     local
8 :    
9 :     structure S = Symbol
10 :     structure IM = Intmap
11 :    
12 :     in
13 :    
14 :     fun inc r = r := !r + 1
15 :     fun newLvar r () = (inc r; !r)
16 :     val varcount = ref 0
17 :    
18 :     exception NoLvarName
19 :     val lvarNames : string IM.intmap = IM.new(32, NoLvarName)
20 :     val name = IM.map lvarNames
21 :     val giveLvarName = IM.add lvarNames
22 :    
23 :     type lvar = int (* lambda variable id number *)
24 :    
25 :     val saveLvarNames = Control.saveLvarNames
26 :     fun lvarIsNamed lv = (name lv; true) handle NoLvarName => false
27 :     fun prLvar(lvar:lvar) = Int.toString(lvar)
28 :    
29 :     fun sameName(v,w) =
30 :     if !saveLvarNames
31 :     then giveLvarName(v,name w) handle NoLvarName =>
32 :     (giveLvarName(w, name v) handle NoLvarName => ())
33 :     else ()
34 :    
35 :     val mkLvar = newLvar varcount
36 :    
37 :     fun clear () = (varcount := 0; IM.clear lvarNames)
38 :    
39 :     fun dupLvar v =
40 :     let val nv = mkLvar()
41 :     in if !saveLvarNames then
42 :     (giveLvarName(nv,name v) handle NoLvarName => ())
43 :     else ();
44 :     nv
45 :     end
46 :    
47 :     fun namedLvar(id: S.symbol) =
48 :     let val nv = mkLvar()
49 :     in if !saveLvarNames then giveLvarName(nv,S.name id) else ();
50 :     nv
51 :     end
52 :    
53 :     fun lvarSym(lv : lvar) : S.symbol option
54 :     = SOME (S.varSymbol (name lv)) handle NoLvarName => NONE
55 :    
56 :     fun lvarName(lv : lvar) : string =
57 :     let val s = Int.toString lv
58 :     in (name lv ^ s) handle NoLvarName => ("v" ^ s)
59 :     end
60 :    
61 :     end (* local *)
62 :    
63 :     end (* structure LambdaVar *)
64 :    
65 :     (*
66 :     * $Log$
67 :     *)

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