nitmetrics: backport some code of subtype test
authorJean Privat <jean@pryen.org>
Thu, 3 Aug 2017 13:19:48 +0000 (09:19 -0400)
committerJean Privat <jean@pryen.org>
Thu, 3 Aug 2017 13:19:48 +0000 (09:19 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

src/metrics/detect_covariance.nit

index ba6a684..c80f929 100644 (file)
@@ -473,19 +473,19 @@ redef class MType
                end
                #print "4.is {sub} a {sup}? <- no more resolution"
 
-               assert sub isa MClassType # It is the only remaining type
-
-               # A unfixed formal type can only accept itself
-               if sup isa MFormalType then
-                       return false
+               if sub isa MBottomType or sub isa MErrorType then
+                       return true
                end
 
-               if sup isa MNullType then
-                       # `sup` accepts only null
+               assert sub isa MClassType else print_error "{sub} <? {sup}" # It is the only remaining type
+
+               # Handle sup-type when the sub-type is class-based (other cases must have be identified before).
+               if sup isa MFormalType or sup isa MNullType or sup isa MBottomType or sup isa MErrorType then
+                       # These types are not super-types of Class-based types.
                        return false
                end
 
-               assert sup isa MClassType # It is the only remaining type
+               assert sup isa MClassType else print_error "got {sup} {sub.inspect}" # It is the only remaining type
 
                # Now both are MClassType, we need to dig