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/bootstrap/build-initdg.sml
ViewVC logotype

Diff of /sml/trunk/src/cm/bootstrap/build-initdg.sml

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

revision 591, Mon Apr 3 01:19:20 2000 UTC revision 592, Mon Apr 3 07:04:12 2000 UTC
# Line 1  Line 1 
1  (*  (*
2   * Build a simple dependency graph from a direct DAG description.   * Build a simple dependency graph from a direct DAG description.
3   *   - This is used in the bootstrap compiler to establish the   *   - This is used in the bootstrap compiler to establish the
4   *     pervasive env, the core env, and the primitives which later   *     pervasive env and the primitives which later get used by
5   *     get used by the rest of the system.   *     the rest of the system.
6   *   - The DAG does not contain any BNODEs and the only PNODEs will   *   - One important job is to set up a binding to "structure _Core".
  *     be those that correspond to primitives passed via "gp".  
  *     In practice, the only PNODE will be the one for Env.primEnv.  
7   *   *
8   * (C) 1999 Lucent Technologies, Bell Laboratories   * (C) 1999 Lucent Technologies, Bell Laboratories
9   *   *
# Line 13  Line 11 
11   *)   *)
12  signature BUILD_INIT_DG = sig  signature BUILD_INIT_DG = sig
13      val build : GeneralParams.info -> SrcPath.t ->      val build : GeneralParams.info -> SrcPath.t ->
14          { core: DependencyGraph.sbnode,          { pervasive: DependencyGraph.sbnode,
           pervasive: DependencyGraph.sbnode,  
15            others: DependencyGraph.sbnode list,            others: DependencyGraph.sbnode list,
16            src: GenericVC.Source.inputSource } option            src: GenericVC.Source.inputSource } option
17  end  end
# Line 61  Line 58 
58                      NONE => (error (pos, pos) "unexpected end of file"; NONE)                      NONE => (error (pos, pos) "unexpected end of file"; NONE)
59                    | SOME (line, newpos) => let                    | SOME (line, newpos) => let
60                          val error = error (pos, newpos)                          val error = error (pos, newpos)
61                          fun sml (spec, s, xe, rts) = let                          fun sml (spec, s, xe, rts, ecs) = let
62                              val p = SrcPath.standard pcmode                              val p = SrcPath.standard pcmode
63                                  { context = context, spec = spec }                                  { context = context, spec = spec }
64                              val attribs =                              val attribs =
65                                  { split = s, is_rts = rts, extra_compenv = xe }                                  { split = s, is_rts = rts, extra_compenv = xe,
66                                      explicit_core_sym = ecs }
67                          in                          in
68                              SmlInfo.info' attribs gp                              SmlInfo.info' attribs gp
69                                { sourcepath = p,                                { sourcepath = p,
# Line 73  Line 71 
71                                  sh_spec = Sharing.DONTCARE }                                  sh_spec = Sharing.DONTCARE }
72                          end                          end
73                          fun bogus n =                          fun bogus n =
74                              DG.SNODE { smlinfo = sml (n, false, NONE, false),                              DG.SNODE { smlinfo = sml (n, false, NONE,
75                                                          false, NONE),
76                                         localimports = [], globalimports = [] }                                         localimports = [], globalimports = [] }
77                          fun look n =                          fun look n =
78                              case StringMap.find (m, n) of                              case StringMap.find (m, n) of
79                                  SOME x => x                                  SOME x => x
80                                | NONE => (error ("undefined: " ^ n); bogus n)                                | NONE => (error ("undefined: " ^ n); bogus n)
81                          fun node (name, file, args, is_rts) = let                          fun node (name, file, args, is_rts, ecs) = let
82                              fun one (arg, (li, needs_primenv)) =                              fun one (arg, (li, needs_primenv)) =
83                                  if arg = "primitive" then (li, true)                                  if arg = "primitive" then (li, true)
84                                  else (look arg :: li, needs_primenv)                                  else (look arg :: li, needs_primenv)
# Line 89  Line 88 
88                                  if needs_primenv then                                  if needs_primenv then
89                                      SOME (GenericVC.Environment.primEnv)                                      SOME (GenericVC.Environment.primEnv)
90                                  else NONE                                  else NONE
91                              val i = sml (file, split, xe, is_rts)                              val i = sml (file, split, xe, is_rts, ecs)
92                              val n = DG.SNODE { smlinfo = i,                              val n = DG.SNODE { smlinfo = i,
93                                                 localimports = li,                                                 localimports = li,
94                                                 globalimports = [] }                                                 globalimports = [] }
# Line 103  Line 102 
102                            | ["split"] => loop (true, m, newpos)                            | ["split"] => loop (true, m, newpos)
103                            | ["nosplit"] => loop (false, m, newpos)                            | ["nosplit"] => loop (false, m, newpos)
104                            | ("bind" :: name :: file :: args)  =>                            | ("bind" :: name :: file :: args)  =>
105                                  node (name, file, args, false)                                  node (name, file, args, false, NONE)
106                            | ("rts-placeholder" :: name :: file :: args) =>                            | ("rts-placeholder" :: name :: file :: args) =>
107                                  node (name, file, args, true)                                  node (name, file, args, true, NONE)
108                            | ("return" :: core :: pervasive :: prims) =>                            | ("bind-core" :: ecs :: name :: file :: args) =>
109                                  SOME { core = looksb core,                                  node (name, file, args, false,
110                                         pervasive = looksb pervasive,                                        SOME (Symbol.strSymbol ecs))
111                              | ("return" :: pervasive :: prims) =>
112                                    SOME { pervasive = looksb pervasive,
113                                         others = map looksb prims,                                         others = map looksb prims,
114                                         src = source }                                         src = source }
115                            | _ => (error "malformed line"; NONE)                            | _ => (error "malformed line"; NONE)

Legend:
Removed from v.591  
changed lines
  Added in v.592

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