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/batch/binfile.sml
ViewVC logotype

Diff of /sml/trunk/src/compiler/TopLevel/batch/binfile.sml

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

revision 586, Thu Mar 30 05:08:07 2000 UTC revision 587, Thu Mar 30 09:01:52 2000 UTC
# Line 1  Line 1 
1  (* COPYRIGHT (c) 1997 Bell Labs, Lucent Technologies *)  (* COPYRIGHT (c) 1997 Bell Labs, Lucent Technologies *)
2  (* binfile.sml *)  (* binfile.sml *)
3    
4  functor BinfileFun (C : COMPILE  functor BinfileFun (C : COMPILE) : BINFILE =
                     where type newContext = ModuleId.Set.set) : BINFILE =  
5  struct  struct
6      structure Pid = PersStamps      structure Pid = PersStamps
7      structure Env = CMEnv.Env      structure Env = Environment
8      structure Err = ErrorMsg      structure Err = ErrorMsg
9      structure CB = CompBasic      structure CB = CompBasic
10    
# Line 51  Line 50 
50                  imports: C.import list,                  imports: C.import list,
51                  exportPid: pid option,                  exportPid: pid option,
52                  cmData: pid list,                  cmData: pid list,
53                  senv: { env: senv, ctxt: ModuleId.Set.set } pData,                  senv: senv pData,
54                  lambda: lambda option pData,                  lambda: lambda option pData,
55                  csegments: csegments,                  csegments: csegments,
56                  executable: executable option ref                  executable: executable option ref
# Line 380  Line 379 
379                end                end
380      in      in
381          fun read args = let          fun read args = let
382              val { name, stream = s, senv = context } = args              val { name, stream = s, senv } = args
383                val m = GenModIdMap.mkMap senv
384                fun context _ = m
385              val { nExports = ne, lambdaSz = sa2,              val { nExports = ne, lambdaSz = sa2,
386                    res1Sz, res2Sz, codeSz = cs, envSz = es,                    res1Sz, res2Sz, codeSz = cs, envSz = es,
387                    imports, exportPid, cmData,                    imports, exportPid, cmData,
# Line 398  Line 399 
399                          then () else error "non-zero reserved size"                          then () else error "non-zero reserved size"
400              val code = readCodeList (s, name, cs)              val code = readCodeList (s, name, cs)
401              val (senv, penv) =              val (senv, penv) =
402                  if es = 0 then (fn () => { env = CMStaticEnv.empty,                  if es = 0 then (fn () => StaticEnv.empty,
                                            ctxt = ModuleId.Set.empty },  
403                                  Word8Vector.fromList [])                                  Word8Vector.fromList [])
404                  else let                  else let
405                      val penv = bytesIn (s, es)                      val penv = bytesIn (s, es)
406                      val _ =                      val _ =
407                          if Word8Vector.length penv = es then ()                          if Word8Vector.length penv = es then ()
408                          else error "missing bytes in bin file"                          else error "missing bytes in bin file"
                     fun bs2es { env, ctxt } =  
                         { env = CMStaticEnv.CM env, ctxt = ctxt }  
409                      val mkSenv =                      val mkSenv =
410                          delay (fn () =>                          delay (fn () => UnpickMod.unpickleEnv
411                                 bs2es                                              context (staticPid, penv))
                                 (UnpickMod.unpickleEnv  
                                  { context = context,  
                                    hash = staticPid,  
                                    pickle = penv }))  
412                  in                  in
413                      (mkSenv, penv)                      (mkSenv, penv)
414                  end                  end
# Line 511  Line 505 
505          end          end
506    
507          fun create args = let          fun create args = let
508              val { runtimePid, splitting, cmData,              val { splitting, cmData, ast, source, corenv, senv, symenv } =
509                    ast, source, corenv, senv, symenv } = args                  args
510              val errors = Err.errors source              val errors = Err.errors source
511              fun check phase =              fun check phase =
512                  if Err.anyErrors errors then raise Compile (phase ^ " failed")                  if Err.anyErrors errors then raise Compile (phase ^ " failed")
# Line 520  Line 514 
514              val cinfo = C.mkCompInfo (source, corenv, fn x => x)              val cinfo = C.mkCompInfo (source, corenv, fn x => x)
515    
516              val { csegments=code, newstatenv, exportPid, staticPid, imports,              val { csegments=code, newstatenv, exportPid, staticPid, imports,
517                    pickle=envPickle, inlineExp, ctxt, ...} =                    pickle=envPickle, inlineExp, ...} =
518                  C.compile { source=source, ast=ast, statenv=senv,                  C.compile { source=source, ast=ast, statenv=senv,
519                              symenv=symenv, compInfo=cinfo, checkErr=check,                              symenv=symenv, compInfo=cinfo, checkErr=check,
520                              runtimePid=runtimePid, splitting=splitting}                              splitting=splitting}
521              val {hash = lambdaPid, pickle} = PickMod.pickleFLINT inlineExp              val {hash = lambdaPid, pickle} = PickMod.pickleFLINT inlineExp
522              fun pd (u, p, x) =              fun pd (u, p, x) =
523                  { unpickled = fn () => u, pid = p, pickled = x }                  { unpickled = fn () => u, pid = p, pickled = x }
# Line 531  Line 525 
525              BFC { imports = imports,              BFC { imports = imports,
526                    exportPid = exportPid,                    exportPid = exportPid,
527                    cmData = cmData,                    cmData = cmData,
528                    senv = pd ({ env = newstatenv, ctxt = ctxt },                    senv = pd (newstatenv, staticPid, envPickle),
                              staticPid, envPickle),  
529                    lambda = pd (inlineExp, lambdaPid, pickle),                    lambda = pd (inlineExp, lambdaPid, pickle),
530                    csegments = code,                    csegments = code,
531                    executable = ref NONE }                    executable = ref NONE }

Legend:
Removed from v.586  
changed lines
  Added in v.587

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