IR.Subtype
The Smallfoot Intermediate Language: Subtypes
include Ppx_compare_lib.Comparable.S with type t := t
val compare : t Base__Ppx_compare_lib.compare
include Ppx_compare_lib.Equal.S with type t := t
val equal : t Base__Ppx_compare_lib.equal
val pp : F.formatter -> t -> unit
val exact : t
val subtypes : t
denotes the current type only
val subtypes_cast : t
denotes the current type and any subtypes
val subtypes_instof : t
val case_analysis :
Tenv.t ->
(Typ.Name.t * t) ->
(Typ.Name.t * t) ->
t option * t option
case_analysis tenv (c1, st1) (c2, st2)
performs case analysis on c1 <: c2
according to st1
and st2
. case_analysis
returns a pair:
st1
and st2
admit c1 <: c2
, and in case returns the updated subtype st1
st1
and st2
admit not(c1 <: c2)
, and in case returns the updated subtype st1
val is_known_subtype : Tenv.t -> Typ.Name.t -> Typ.Name.t -> bool
is_known_subtype tenv c1 c2
returns true if there is enough information in tenv
to prove that c1
is a subtype of c2
. Note that not (is_known_subtype tenv c1 c2) == true
does not imply that is_known_not_subtype tenv c1 c2 == true
val is_cast : t -> bool
val is_instof : t -> bool