let object_body _loc decls = let sub_objects = List.fold_right (fun idat lst -> match idat.sub_obj with | None -> lst | Some so -> Ast.CrSem (_loc, so, lst)) decls (Ast.CrNil _loc) and accessors = List.fold_right (fun idat lst -> match idat.setter with | None -> Ast.CrSem (_loc, idat.getter, lst) | Some so -> Ast.CrSem (_loc, idat.getter, Ast.CrSem (_loc, se, lst))) decls (Ast.CrNil _loc) in (sub_objects, accessors) let subconf_csi _loc key decls = let (sub_objects, accessors) = object_body loc decls in Ast.CrVal (_loc, oname, Ast.BFalse, Ast.ExLet (_loc, Ast.BFalse, Ast.BiEq (_loc, Ast.PaId (_loc, Ast.IdLid (_loc, "path")), Ast.ExApp (_loc, Ast.ExApp (_loc, Ast.ExId (_loc, Ast.IdLid (_loc, "@")), Ast.ExId (_loc, Ast.IdLid (_loc, "path"))), Ast.ExApp (_loc, Ast.ExApp (_loc, Ast.ExId (_loc, Ast.IdUid (_loc, "::")), Ast.ExStr (_loc, key)), Ast.ExId (_loc, Ast.IdUid (_loc, "[]"))))), Ast.ExObj (_loc, Ast.PaId (_loc, Ast.IdLid (_loc, "self")), Ast.CrSem (_loc, Ast.CrInh (_loc, Ast.CeApp (_loc, Ast.CeApp (_loc, Ast.CeApp (_loc, Ast.CeCon (_loc, Ast.BFalse, Ast.IdLid (_loc, "sub_config"), Ast.TyNil _loc), Ast.ExId (_loc, Ast.IdLid (_loc, "data"))), Ast.ExId (_loc, Ast.IdLid (_loc, "defaults"))), Ast.ExId (_loc, Ast.IdLid (_loc, "path"))), "super"), Ast.CrSem (_loc, sub_objects, accessors))))) let rootconf_si _loc cname decls = let (sub_objects, accessors) = object_body loc decls in Ast.StVal (_loc, Ast.BFalse, Ast.BiEq (_loc, Ast.PaId (_loc, Ast.IdLid (_loc, cname)), Ast.ExFun (_loc, Ast.McArr (_loc, Ast.PaId (_loc, Ast.IdLid (_loc, "srcs")), Ast.ExNil _loc, Ast.ExFun (_loc, Ast.McArr (_loc, Ast.PaId (_loc, Ast.IdLid (_loc, "dest")), Ast.ExNil _loc, Ast.ExLet (_loc, Ast.BFalse, Ast.BiAnd (_loc, Ast.BiEq (_loc, Ast.PaId (_loc, Ast.IdLid (_loc, "data")), Ast.ExApp (_loc, Ast.ExId (_loc, Ast.IdAcc (_loc, Ast.IdUid (_loc, "Dict"), Ast.IdLid (_loc, "create"))), Ast.ExId (_loc, Ast.IdUid (_loc, "()")))), Ast.BiEq (_loc, Ast.PaId (_loc, Ast.IdLid (_loc, "path")), Ast.ExId (_loc, Ast.IdUid (_loc, "[]")))), Ast.ExObj (_loc, Ast.PaId (_loc, Ast.IdLid (_loc, "self")), Ast.CrSem (_loc, Ast.CrInh (_loc, Ast.CeApp (_loc, Ast.CeApp (_loc, Ast.CeApp (_loc, Ast.CeApp (_loc, Ast.CeCon (_loc, Ast.BFalse, Ast.IdLid (_loc, "root_config"), Ast.TyNil _loc), Ast.ExId (_loc, Ast.IdLid (_loc, "srcs"))), Ast.ExId (_loc, Ast.IdLid (_loc, "dest"))), Ast.ExId (_loc, Ast.IdLid (_loc, "data"))), Ast.ExId (_loc, Ast.IdLid (_loc, "defaults"))), "super"), Ast.CrSem (_loc, sub_objects, accessors)))))))))) let main_si _loc cname decls = Ast.StSem (_loc, Ast.StOpn (_loc, Ast.IdUid (_loc, "Rascl")), Ast.StSem (_loc, Ast.StOpn (_loc, Ast.IdUid (_loc, "ConfigObject")), Ast.StSem (_loc, Ast.StOpn (_loc, Ast.IdUid (_loc, "Dict")), Ast.StSem (_loc, Ast.StVal (_loc, Ast.BFalse, Ast.BiEq (_loc, Ast.PaId (_loc, Ast.IdLid (_loc, "defaults")), Ast.ExApp (_loc, Ast.ExId (_loc, Ast.IdLid (_loc, "create")), Ast.ExId (_loc, Ast.IdUid (_loc, "()"))))), Ast.StSem (_loc, Ast.StExp (_loc, top_doin_expr _loc [] decls), rootconf_si loc cname decls)))))