12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061(****************************************************************************)(* *)(* This file is part of MOPSA, a Modular Open Platform for Static Analysis. *)(* *)(* Copyright (C) 2017-2021 The MOPSA Project. *)(* *)(* This program is free software: you can redistribute it and/or modify *)(* it under the terms of the GNU Lesser General Public License as published *)(* by the Free Software Foundation, either version 3 of the License, or *)(* (at your option) any later version. *)(* *)(* This program is distributed in the hope that it will be useful, *)(* but WITHOUT ANY WARRANTY; without even the implied warranty of *)(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *)(* GNU Lesser General Public License for more details. *)(* *)(* You should have received a copy of the GNU Lesser General Public License *)(* along with this program. If not, see <http://www.gnu.org/licenses/>. *)(* *)(****************************************************************************)(** Path of domains inside the abstraction DAG *)openMopsa_utilstypeaccessor=..typepath=accessorlistletaccessor_compare_chain:accessorTypeExt.compare_chain=TypeExt.mk_compare_chain(funax1ax2->Stdlib.compareax1ax2)letaccessor_print_chain:accessorTypeExt.print_chain=TypeExt.mk_print_chain(funfmtax->Exceptions.panic"unregistered path accessor")letcompare_accessorax1ax2=TypeExt.compareaccessor_compare_chainax1ax2letpp_accessorfmtax=TypeExt.printaccessor_print_chainfmtaxletregister_accessorinfo=TypeExt.registerinfoaccessor_compare_chainaccessor_print_chainletcompare_pathp1p2=Compare.listcompare_accessorp1p2letpp_pathfmt=function|[]->Format.pp_print_stringfmt"ε"|p->Format.pp_print_list~pp_sep:(funfmt()->Format.pp_print_stringfmt"::")pp_accessorfmtpletempty_path:path=[]modulePathMap=MapExt.Make(structtypet=pathletcompare=compare_pathend)modulePathSet=SetExt.Make(structtypet=pathletcompare=compare_pathend)