12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273(****************************************************************************)(* *)(* This file is part of MOPSA, a Modular Open Platform for Static Analysis. *)(* *)(* Copyright (C) 2017-2019 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/>. *)(* *)(****************************************************************************)openMopsaopenSig.Abstraction.Simplifiedletopt_numeric=ref"polyhedra"moduletypeRELATIONAL=sigincludeSig.Abstraction.Simplified.SIMPLIFIEDvalnumeric_name:stringvalbound_var:var->t->Intervals.Integer.Value.tvalassume:stmt->(('a,bool)Core.Query.query->bool)->t->toptionvalrelated_vars:var->t->varlistvalvars:t->varlistendletnumeric_domains:(moduleRELATIONAL)listref=ref[]letregister_instance(moduleM:RELATIONAL)=numeric_domains:=(moduleM)::!numeric_domainsletget_instances_names()=List.map(fun(moduleM:RELATIONAL)->M.numeric_name)!numeric_domainsmoduleOctagon=Domain.Make(structtypet=Oct.tletname="universal.numeric.relational"letnumeric_name="octagon"letman=Oct.manager_alloc()end)let()=register_instance(moduleOctagon:RELATIONAL)modulePolyhedra=Domain.Make(structtypet=Polka.loosePolka.tletname="universal.numeric.relational"letnumeric_name="polyhedra"letman=Polka.manager_alloc_loose()end)let()=register_instance(modulePolyhedra:RELATIONAL)moduleLinEqualities=Domain.Make(structtypet=Polka.equalitiesPolka.tletname="universal.numeric.relational"letnumeric_name="lineq"letman=Polka.manager_alloc_equalities()end)let()=register_instance(moduleLinEqualities:RELATIONAL)