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

SCM Repository

[smlnj] Diff of /sml/trunk/src/cm/smlfile/smlinfo.sml
ViewVC logotype

Diff of /sml/trunk/src/cm/smlfile/smlinfo.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 294, Tue May 25 09:06:06 1999 UTC revision 295, Wed May 26 09:20:25 1999 UTC
# Line 11  Line 11 
11    
12      type info      type info
13    
14      type complainer = string -> (PrettyPrint.ppstream -> unit) -> unit      type complainer = GenericVC.ErrorMsg.complainer
15      type parsetree = GenericVC.Ast.dec      type parsetree = GenericVC.Ast.dec
16    
17      val resync : unit -> unit           (* rebuild internal table *)      val resync : unit -> unit           (* rebuild internal table *)
# Line 33  Line 33 
33      val parsetree : info -> parsetree option      val parsetree : info -> parsetree option
34      val exports : info  -> SymbolSet.set      val exports : info  -> SymbolSet.set
35      val skeleton : info -> Skeleton.decl      val skeleton : info -> Skeleton.decl
36        val share : info -> bool option
37    
38      (* different ways of describing an sml file using group and source *)      (* different ways of describing an sml file using group and source *)
39      val spec : info -> string           (* sspec *)      val spec : info -> string           (* sspec *)
# Line 52  Line 53 
53      type source = Source.inputSource      type source = Source.inputSource
54      type parsetree = GenericVC.Ast.dec      type parsetree = GenericVC.Ast.dec
55    
56      type complainer = string -> (PrettyPrint.ppstream -> unit) -> unit      type complainer = EM.complainer
57    
58      datatype info =      datatype info =
59          INFO of {          INFO of {
# Line 62  Line 63 
63                   lastseen: TStamp.t ref,                   lastseen: TStamp.t ref,
64                   parsetree: { tree: parsetree, source: source } option ref,                   parsetree: { tree: parsetree, source: source } option ref,
65                   skelpath: AbsPath.t,                   skelpath: AbsPath.t,
66                   skeleton: Skeleton.decl option ref                   skeleton: Skeleton.decl option ref,
67                     share: bool option
68                   (* to be extended *)                   (* to be extended *)
69                  }                  }
70    
71      fun sourcepath (INFO { sourcepath = sp, ... }) = sp      fun sourcepath (INFO { sourcepath = sp, ... }) = sp
72      fun error (INFO { error = e, ... }) = e      fun error (INFO { error = e, ... }) = e
73        fun share (INFO { share = s, ... }) = s
74    
75      fun compare (INFO { sourcepath = p, ... }, INFO { sourcepath = p', ... }) =      fun compare (INFO { sourcepath = p, ... }, INFO { sourcepath = p', ... }) =
76          AbsPath.compare (p, p')          AbsPath.compare (p, p')
# Line 87  Line 90 
90          knownInfo := foldl AbsPathMap.insert' AbsPathMap.empty l          knownInfo := foldl AbsPathMap.insert' AbsPathMap.empty l
91      end      end
92    
93      fun info params arg = let      fun info (params: GeneralParams.params) arg = let
94          val { fnpolicy, groupreg, primconf } = params          val fnpolicy = #fnpolicy params
95            val groupreg = #groupreg params
96          val { sourcepath, group, error, history, share } = arg          val { sourcepath, group, error, history, share } = arg
97          fun newinfo () = let          fun newinfo () = let
98              val i = INFO {              val i = INFO {
# Line 98  Line 102 
102                            lastseen = ref TStamp.NOTSTAMP,                            lastseen = ref TStamp.NOTSTAMP,
103                            parsetree = ref NONE,                            parsetree = ref NONE,
104                            skelpath = FNP.mkSkelPath fnpolicy sourcepath,                            skelpath = FNP.mkSkelPath fnpolicy sourcepath,
105                            skeleton = ref NONE                            skeleton = ref NONE,
106                              share = share
107                           }                           }
108          in          in
109              knownInfo := AbsPathMap.insert (!knownInfo, sourcepath, i);              knownInfo := AbsPathMap.insert (!knownInfo, sourcepath, i);
# Line 111  Line 116 
116                      (if GroupReg.registered groupreg g then                      (if GroupReg.registered groupreg g then
117                           let val n = AbsPath.name sourcepath                           let val n = AbsPath.name sourcepath
118                           in                           in
119                               error (concat ["ML source file ", n,                               error EM.COMPLAIN
120                                      (concat ["ML source file ", n,
121                                              " appears in more than one group"])                                              " appears in more than one group"])
122                                     EM.nullErrorBody;                                     EM.nullErrorBody;
123                               e (concat ["(previous occurence of ", n, ")"])                               e EM.COMPLAIN
124                                   (concat ["(previous occurence of ", n, ")"])
125                                 EM.nullErrorBody                                 EM.nullErrorBody
126                           end                           end
127                       else ();                       else ();
# Line 128  Line 135 
135          (* don't use "..." pattern to have the compiler catch later          (* don't use "..." pattern to have the compiler catch later
136           * additions to the type! *)           * additions to the type! *)
137          val { sourcepath, group, error, lastseen,          val { sourcepath, group, error, lastseen,
138                parsetree, skelpath, skeleton } = ir                parsetree, skelpath, skeleton, share } = ir
139          val ts = !lastseen          val ts = !lastseen
140          val nts = AbsPath.tstamp sourcepath          val nts = AbsPath.tstamp sourcepath
141      in      in
# Line 145  Line 152 
152          val { sourcepath, parsetree, error, ... } = ir          val { sourcepath, parsetree, error, ... } = ir
153          val name = AbsPath.name sourcepath          val name = AbsPath.name sourcepath
154          val err = if noerrors then (fn m => ())          val err = if noerrors then (fn m => ())
155                    else (fn m => error m EM.nullErrorBody)                    else (fn m => error EM.COMPLAIN m EM.nullErrorBody)
156      in      in
157          case !parsetree of          case !parsetree of
158              SOME pt => SOME pt              SOME pt => SOME pt
# Line 195  Line 202 
202                                    if noerrors then () else complain ();                                    if noerrors then () else complain ();
203                                    if EM.anyErrors (EM.errors source) then                                    if EM.anyErrors (EM.errors source) then
204                                        if noerrors then ()                                        if noerrors then ()
205                                        else error "error(s) in ML source file"                                        else error EM.COMPLAIN
206                                                     "error(s) in ML source file"
207                                                   EM.nullErrorBody                                                   EM.nullErrorBody
208                                    else (SkelIO.write (skelpath, sk);                                    else (SkelIO.write (skelpath, sk);
209                                          skeleton := SOME sk);                                          skeleton := SOME sk);

Legend:
Removed from v.294  
changed lines
  Added in v.295

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