blob: 430aba98ad4aac191715967bbdc20c814dd4afe8 (
plain) (
tree)
|
|
definition module typeproperties
import StdInt, StdClass
import general
:: TypeClassification
EmptyTypeClassification :: TypeClassification
:: SignClassification =
{ sc_pos_vect :: !BITVECT
, sc_neg_vect :: !BITVECT
}
:: PropClassification :== BITVECT
TopSignClass :== { sc_pos_vect = bitnot 0, sc_neg_vect = bitnot 0 }
ArrowSignClass :== { sc_pos_vect = 2, sc_neg_vect = 1 }
:: Sign =
{ pos_sign :: !Bool
, neg_sign :: !Bool
}
TopSign :== { pos_sign = True, neg_sign = True }
BottomSign :== { pos_sign = False, neg_sign = False }
PositiveSign :== { pos_sign = True, neg_sign = False }
NegativeSign :== { pos_sign = False, neg_sign = True }
signClassToSign :: !SignClassification !Int -> Sign
/*
IsPositive sign_class index :== sign_class.sc_pos_vect bitand (1 << index) <> 0
IsNegative sign_class index :== sign_class.sc_neg_vect bitand (1 << index) <> 0
*/
instance <<< Sign
instance * Sign
:: TypeSign key =
{ ts_cons_var_signs :: !key
, ts_type_sign :: !SignClassification
}
:: TypeProp key =
{ ts_cons_var_props :: !key
, ts_type_prop :: !PropClassification
}
retrieveSignClassification :: ![SignClassification] !TypeClassification -> Optional (TypeSign [SignClassification])
retrievePropClassification :: ![PropClassification] !TypeClassification -> Optional (TypeProp [PropClassification])
addSignClassification :: ![SignClassification] !SignClassification !TypeClassification -> !TypeClassification
addPropClassification :: ![PropClassification] !PropClassification !TypeClassification -> !TypeClassification
|