/**
* 5.1.6: Narrowing Reference Conversions
*
* @author Martin Bravenboer <martin@cs.uu.nl>
*/
module dryad/jls/conversions/NarrowingReference
imports dryad/util/jtree-overlays
strategies
/**
* Checks if the type (current term) is convertable to type to by a
* narrowing reference conversion.
*
* @param t Type
* @type Type -> Type
*/
strategies
is-narrowing-reference-convertable(|t) =
is-reference-type; ?s
; where(
<is-reference-type> t
; <is-proper-supertype(|t)> s
)
/**
* @todo Implement class type C to non-param interface K
*/
is-narrowing-reference-convertable(|to) =
fail
/**
* @todo Implement interface type J to non-param class K
*/
is-narrowing-reference-convertable(|to) =
fail
is-narrowing-reference-convertable(|to) =
?TypeCloneable()
; where(!to => ArrayType(_))
is-narrowing-reference-convertable(|to) =
?TypeSerializable()
; where(!to => ArrayType(_))
/**
* @todo Implement interface type J to non-param interface K
*/
is-narrowing-reference-convertable(|to) =
fail
is-narrowing-reference-convertable(|to) =
?ArrayType(sc)
; where(
!to => ArrayType(tc)
; <is-reference-type> sc
; <is-reference-type> tc
; <is-narrowing-reference-convertable(|tc)> sc
)