(* * ElabMain.elabMain reads an expression from stdIn and returns * a new static environment and Absyn.dec. *) signature ELABMAIN = sig exception BadParseResult of MLParser.parseResult val elabMain : string option -> Absyn.dec * StaticEnv.staticEnv end (* sig *) structure ElabMain : ELABMAIN = struct local structure Instantiate = InstantiateFn (InstantiateParam) structure EvalEntity = EvalEntityFn (structure I = Instantiate) structure SigMatch = SigMatchFn (structure EV = EvalEntity) structure Typecheck = TypecheckFn (fun ii_ispure _ = true val ii2ty = InstantiateParam.ii2ty) structure ElabMod = ElabModFn (structure SM = SigMatch structure Typecheck = Typecheck) structure ElabTop = ElabTopFn (structure ElabMod = ElabMod) in exception BadParseResult of MLParser.parseResult val {exportLvars=_,exportPid=_,newenv=theBaseEnv,pickle=_,pid=_} = Pup.pickBase(SavedEnv.makeSavedEnv ()) fun elabMain (filenameOpt) = let val source = case filenameOpt of NONE => Source.newSource ("stdIn", 1, TextIO.stdIn, true, ErrorMsg.defaultConsumer()) | SOME(fname) => let val sourcestream = TextIO.openIn(fname) handle x => raise x in Source.newSource(fname, 1, sourcestream, false, ErrorMsg.defaultConsumer()) end fun gettree (MLParser.PARSE(t)) = t | gettree x = raise BadParseResult x val astdec = gettree (MLParser.parse source ()) val cinfo = CompInfo.mkCompInfo {source = source, transform = fn x : Absyn.dec => x, mkMkStamp = Stamps.newGenerator} in ElabTop.elabTop (astdec, theBaseEnv, cinfo) before Source.closeSource source end end (* local *) end (* struct *)