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/compiler/TopLevel/interact/evalloop.sml
ViewVC logotype

Diff of /sml/trunk/src/compiler/TopLevel/interact/evalloop.sml

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

revision 878, Wed Jul 18 17:43:27 2001 UTC revision 879, Thu Jul 19 18:59:38 2001 UTC
# Line 6  Line 6 
6    
7  local open Environment  local open Environment
8        structure C  = Compile        structure C  = Compile
       structure CB = CompBasic  
9        structure EM = ErrorMsg        structure EM = ErrorMsg
10        structure E  = Environment        structure E  = Environment
11        structure PP = PrettyPrint        structure PP = PrettyPrint
# Line 20  Line 19 
19    
20  type interactParams =  type interactParams =
21     {compManagerHook :     {compManagerHook :
22      (CB.ast * EnvRef.envref * EnvRef.envref -> unit) option ref,         (Ast.dec * EnvRef.envref * EnvRef.envref -> unit) option ref,
23            baseEnvRef      : EnvRef.envref,            baseEnvRef      : EnvRef.envref,
24            localEnvRef     : EnvRef.envref,            localEnvRef     : EnvRef.envref,
25            transform       : CB.absyn -> CB.absyn,       transform       : Absyn.dec -> Absyn.dec,
26            instrument      : {source: CB.source,       instrument      : { source: Source.inputSource,
27                               compenv: StaticEnv.staticEnv}                               compenv: StaticEnv.staticEnv}
28                                  -> (CB.absyn -> CB.absyn),                         -> Absyn.dec -> Absyn.dec,
29            perform         : CB.executable -> CB.executable,       perform         : CodeObj.executable -> CodeObj.executable,
30            isolate         : CB.executable -> CB.executable,       isolate         : CodeObj.executable -> CodeObj.executable,
31            printer         : E.environment -> PP.ppstream            printer         : E.environment -> PP.ppstream
32                              -> (CB.absyn * lvar list) -> unit}                         -> (Absyn.dec * lvar list) -> unit }
33    
34  val stdParams : interactParams =  val stdParams : interactParams =
35        {compManagerHook = ref NONE,        {compManagerHook = ref NONE,
# Line 39  Line 38 
38         transform = (fn x => x),         transform = (fn x => x),
39         instrument = (fn _ => fn x => x),         instrument = (fn _ => fn x => x),
40         perform = (fn x => x),         perform = (fn x => x),
41         isolate = C.isolate,         isolate = Isolate.isolate,
42         printer = PPDec.ppDec}         printer = PPDec.ppDec}
43    
44  (* toplevel loop *)  (* toplevel loop *)
# Line 73  Line 72 
72                 isolate, printer, instrument, transform} : interactParams)                 isolate, printer, instrument, transform} : interactParams)
73               (source: Source.inputSource) : unit =               (source: Source.inputSource) : unit =
74    
75  let val parser = C.parseOne source  let val parser = SmlFile.parseOne source
76      val cinfo = C.mkCompInfo(source,transform)      val cinfo = C.mkCompInfo { source = source, transform = transform }
77    
78      fun checkErrors s =      fun checkErrors s =
79          if C.anyErrors cinfo then raise EM.Error else ()          if CompInfo.anyErrors cinfo then raise EM.Error else ()
80    
81      fun oneUnit () = (* perform one transaction  *)      fun oneUnit () = (* perform one transaction  *)
82        case parser ()        case parser ()
# Line 104  Line 103 
103                      fixed in the long run. (ZHONG)                      fixed in the long run. (ZHONG)
104                   *)                   *)
105    
106                  val executable = C.mkexec csegments before checkErrors ()                  val executable = Execute.mkexec csegments before checkErrors ()
107                  val executable = isolate (interruptable (perform executable))                  val executable = isolate (interruptable (perform executable))
108    
109                  val _ = (PC.current := Profile.otherIndex)                  val _ = (PC.current := Profile.otherIndex)
110                  val newdynenv =                  val newdynenv =
111                    C.execute{executable=executable, imports=imports,                    Execute.execute{executable=executable, imports=imports,
112                              exportPid=exportPid, dynenv=dynenv}                              exportPid=exportPid, dynenv=dynenv}
113                  val _ = (PC.current := Profile.compileIndex)                  val _ = (PC.current := Profile.compileIndex)
114    
115                  val newenv = E.mkenv {static=newstatenv, dynamic=newdynenv,                  val newenv =
116                                        symbolic=C.mksymenv(exportPid,inlineExp)}                      E.mkenv { static = newstatenv,
117                                  dynamic = newdynenv,
118                                  symbolic = SymbolicEnv.mk (exportPid,inlineExp) }
119                  val newLocalEnv = E.concatEnv(newenv, #get localEnvRef ())                  val newLocalEnv = E.concatEnv(newenv, #get localEnvRef ())
120                      (* refetch localEnvRef because execution may                      (* refetch localEnvRef because execution may
121                         have changed its contents *)                         have changed its contents *)
# Line 160  Line 161 
161                              say (concat["             ", s, "\n"]))                              say (concat["             ", s, "\n"]))
162           | showhist' [] = ()           | showhist' [] = ()
163    
164         fun exnMsg (Compile.Compile s) = concat["Compile: \"", s, "\""]         fun exnMsg (CompileExn.Compile s) = concat["Compile: \"", s, "\""]
165           | exnMsg (C.TopLevelException e) = exnMsg e           | exnMsg (Isolate.TopLevelException e) = exnMsg e
166           | exnMsg exn = General.exnMessage exn           | exnMsg exn = General.exnMessage exn
167    
168         fun showhist (C.TopLevelException e) = showhist e         fun showhist (Isolate.TopLevelException e) = showhist e
          | showhist C.SilentException = ()  
169           | showhist e = showhist' (edit(SMLofNJ.exnHistory e))           | showhist e = showhist' (edit(SMLofNJ.exnHistory e))
170    
171         fun loop () = let         fun loop () = let
# Line 175  Line 175 
175                   | Interrupt => (say "\nInterrupt\n";                   | Interrupt => (say "\nInterrupt\n";
176                                   flush(); loop())                                   flush(); loop())
177                   (* | EM.Error => (flush(); loop()) *)                   (* | EM.Error => (flush(); loop()) *)
178                   | C.Compile "syntax error" => (flush(); loop())                   | CompileExn.Compile "syntax error" => (flush(); loop())
179                   | C.Compile s =>                   | CompileExn.Compile s =>
180                     (say(concat["\nuncaught exception Compile: \"",                     (say(concat["\nuncaught exception Compile: \"",
181                                 s,"\"\n"]);                                 s,"\"\n"]);
182                      flush(); loop())                      flush(); loop())
183                   | C.TopLevelException C.TopLevelCallcc =>                   | Isolate.TopLevelException Isolate.TopLevelCallcc =>
184                     (say("Error: throw from one top-level expression \                     (say("Error: throw from one top-level expression \
185                          \into another\n");                          \into another\n");
186                      flush (); loop ())                      flush (); loop ())
187                   | C.TopLevelException EM.Error =>                   | Isolate.TopLevelException EM.Error =>
188                     (flush (); loop ())                     (flush (); loop ())
189                   | C.TopLevelException C.SilentException =>                   | Isolate.TopLevelException exn => let
                    (flush (); loop ())  
                  | C.TopLevelException exn => let  
190                         val msg = exnMsg exn                         val msg = exnMsg exn
191                         val name = exnName exn                         val name = exnName exn
192                     in                     in
# Line 203  Line 201 
201                         flush();                         flush();
202                         loop()                         loop()
203                     end                     end
                  | C.SilentException => (flush (); loop ())  
204                   | exn => (say (concat["\nuncaught exception ",                   | exn => (say (concat["\nuncaught exception ",
205                                         exnMsg exn, "\n"]);                                         exnMsg exn, "\n"]);
206                             showhist exn;                             showhist exn;
# Line 247  Line 244 
244           (Source.closeSource source;           (Source.closeSource source;
245            case exn            case exn
246            of EndOfFile => ()            of EndOfFile => ()
247             | C.TopLevelException e => raise e             | Isolate.TopLevelException e => raise e
248             | _ => raise exn)             | _ => raise exn)
249      end      end
250    
251  end (* top-level local *)  end (* top-level local *)
252  end (* functor EvalLoopF *)  end (* functor EvalLoopF *)
   

Legend:
Removed from v.878  
changed lines
  Added in v.879

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