123456789101112131415161718192021222324252627282930313233343536373839404142(************************************************************************)(* * The Coq Proof Assistant / The Coq Development Team *)(* v * Copyright INRIA, CNRS and contributors *)(* <O___,, * (see version control and CREDITS file for authors & dates) *)(* VV/ **************************************************************)(* // * This file is distributed under the terms of the *)(* * GNU Lesser General Public License Version 2.1 *)(* * (see LICENSE file for the text of the license) *)(************************************************************************)(************************************************************************)(* SerAPI: Coq interaction protocol with bidirectional serialization *)(************************************************************************)(* Copyright 2016-2019 MINES ParisTech -- License LGPL 2.1+ *)(* Copyright 2019-2023 Inria -- License LGPL 2.1+ *)(* Written by: Emilio J. Gallego Arias and others *)(************************************************************************)letcheck_pending_proofs~pstate=Option.iter(fun_pstate->(* let pfs = Proof_global.get_all_proof_names pstate in *)letpfs=[]inifnotCList.(is_emptypfs)thenletmsg=letopenPpinseq[str"There are pending proofs: ";pfs|>List.rev|>prlist_with_seppr_commaNames.Id.print;str"."]inCErrors.user_errmsg)pstateletsave_vo~doc?ldir~pstate~in_file()=let_doc=Stm.join~docincheck_pending_proofs~pstate;letldir=matchldirwith|None->Stm.get_ldir~doc(* EJGA: When in interactive mode, the above won't work due to a
STM bug, we thus allow SerAPI clients to override it *)|Someldir->ldirinletout_vo=Filename.(remove_extensionin_file)^".vo"inlettodo_proofs=Library.ProofsTodoNoneinlet()=Library.save_library_totodo_proofs~output_native_objects:falseldirout_voin()