cc35b9bcda
This updates the exhaustiveness implementation to have specific static built-in types for nullableObject (the top) and its underlying nonNullableObject, nullType and its underlying neverType. In the previous encoding, the top wasn't nullable (if you queried the isNullable property) but was still assumed to contain `Null` in other parts of the code. With this change, the top space is now an ExtractSpace based on StaticType.nullableObject, the empty space is an ExtractSpace based on StaticType.neverType and record spaces are based on StaticType.nonNullableObject. The StaticType is now split into a StaticType interface and a StaticTypeImpl implementation class for the non-built-in types. This prepares for integrating the exhaustiveness checking with the analyzer and CFE where the properties of the sub/supertype relation and fields of the StaticType needs to be computed lazily. Change-Id: I5a6919d7cba356f9bc8ac3f69fd3ac2b41319e9b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/274020 Reviewed-by: Bob Nystrom <rnystrom@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com>