diff options
author | Vladimir Azarov <avm@intermediate-node.net> | 2025-08-04 22:13:17 +0200 |
---|---|---|
committer | Vladimir Azarov <avm@intermediate-node.net> | 2025-08-04 22:13:17 +0200 |
commit | a4c60603f61dd1a9f0ce420be9067965586dd694 (patch) | |
tree | c5f48221a8291b817d6eec0fd3f70eeb8c26a300 /il.fun | |
parent | 396ebf0c76153e5e1e9dc77371bdd02b4d3d85d1 (diff) |
Object assembly
Diffstat (limited to 'il.fun')
-rw-r--r-- | il.fun | 36 |
1 files changed, 36 insertions, 0 deletions
@@ -0,0 +1,36 @@ +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 |