let compare =
if M.compare == Datatype.undefined ||
Top_Param.compare == Datatype.undefined ||
Origin.compare == Datatype.undefined
then (Kernel.debug "%s map_lattice, missing comparison function: %b %b %b"
M.name
(M.compare == Datatype.undefined)
(Top_Param.compare == Datatype.undefined)
(Origin.compare == Datatype.undefined);
Datatype.undefined)
else
fun m1 m2 ->
if m1 == m2 then 0
else match m1, m2 with
| Top _, Map _ -> -1
| Map _, Top _ -> 1
| Map m1, Map m2 -> M.compare m1 m2
| Top (s, a), Top (s', a') ->
let r = Top_Param.compare s s' in
if r = 0 then Origin.compare a a'
else r