12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667(*******************************************************************************
* electrod - a model finder for relational first-order linear temporal logic
*
* Copyright (C) 2016-2020 ONERA
* Authors: Julien Brunel (ONERA), David Chemouil (ONERA)
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* SPDX-License-Identifier: MPL-2.0
* License-Filename: LICENSE.md
******************************************************************************)openContainersopenLexingtypet={begp:Lexing.position;endp:Lexing.position}letfrom_positionsbegpendp=assert(begp.pos_cnum<=endp.pos_cnum);{begp;endp}letbegl{begp;_}=begp.pos_lnumletbegc{begp;_}=begp.pos_cnum-begp.pos_bolletendl{endp;_}=endp.pos_lnumletendc{endp;_}=endp.pos_cnum-endp.pos_bolletto_intsloc=((beglloc,begcloc),(endlloc,endcloc))letspan(loc1,loc2)=letbegp=ifloc1.begp.pos_cnum<loc2.begp.pos_cnumthenloc1.begpelseloc2.begpinletendp=ifloc1.endp.pos_cnum>loc2.endp.pos_cnumthenloc1.endpelseloc2.endpinfrom_positionsbegpendpletdummy={begp=Lexing.dummy_pos;endp=Lexing.dummy_pos}type'alocated={data:'a;loc:t}letmake_locateddataloc={data;loc}letpp_locatedppout{data;_}=ppoutdataletppoutloc=Fmtc.text_locout@@to_intslocmoduleP=Intf.Print.Mixin(structtypenonrect=tletpp=ppend)includeP