functor IL(P: PARSER) = struct structure P = P structure PP = P.P datatype ctx = Ctx of { objs: P.objDef list, objsZI: P.objDef list, extSyms: P.nid list, globSyms: P.nid list, funcs: P.funcInfo list, strlits: int list } fun createCtx ({ ext, glob, objsZI, objs, funcs, strlits }) = Ctx { objs, objsZI, extSyms = ext, globSyms = glob, funcs, strlits } fun updateCtx (Ctx ctx) = fn z => let fun from objs objsZI extSyms globSyms funcs strlits = { objs, objsZI, extSyms, globSyms, funcs, strlits } fun to f { objs, objsZI, extSyms, globSyms, funcs, strlits } = f objs objsZI extSyms globSyms funcs strlits in FRU.makeUpdate6 (from, from, to) ctx (fn (a, f) => z (a, Ctx o f)) end fun register ctx (P.Objects revObjs) = updateCtx ctx u#objs (fn objs => List.revAppend (revObjs, objs)) % | register ctx (P.Definition _) = ctx (* type objDef = int * P.tkPos * ctype * cini * linkage type decl = P.tkPos * declClass * ctype * linkage *) end