Revert "[dart2wasm] Fix runtime type tests"
This reverts commit a289c4d848.
Reason for revert: https://github.com/flutter/flutter/issues/124282
Original change's description:
> [dart2wasm] Fix runtime type tests
>
> emitTypeTest optimizes a test like `x is List<T>` where `x :
> Iterable<T>`, i.e. tested-against type is a subtype of the operand's
> static type. In these cases we can check just the class ID of the
> operand without checking the type arguments.
>
> However this optimization cannot be done when the types don't have same
> number of type arguments. Example:
>
> class H1<T> {}
>
> bool test(Object o) {
> return o is H1<num>;
> }
>
> void main() {
> print(test(H1<Object>()));
> }
>
> Here `H1<num> <: Object`, but we still need to check the type parameter.
>
> This CL checks that the types have the same number of type arguments
> before optimizing the test.
>
> Fixes #51187.
>
> This fix reveals another bug in `static_interop_test`, which is tracked
> in #51200. The test is updated to work around the bug for now.
>
> New passing tests:
>
> - co19/LanguageFeatures/Patterns/matching_cast_A01_t01
> - co19/LanguageFeatures/Patterns/matching_list_A01_t01
> - co19/LanguageFeatures/Patterns/matching_list_A01_t02
> - co19/LanguageFeatures/Patterns/matching_object_A01_t01
> - co19/LanguageFeatures/Patterns/matching_object_A01_t02
> - co19/LanguageFeatures/Patterns/record_A01_t03
> - co19/LanguageFeatures/Patterns/record_A01_t06
> - co19/LanguageFeatures/Patterns/record_A01_t07
> - co19/LanguageFeatures/Patterns/record_A01_t08
> - co19/LanguageFeatures/Patterns/record_A01_t09
> - language/generic/deep_test
> - language/generic_methods/type_expression_test
> - language/patterns/object_pattern_inference_test
>
> Change-Id: Ibd9615666b7f7538c2a3f03fb7f5ebe9b16c3d54
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/292881
> Reviewed-by: Joshua Litt <joshualitt@google.com>
> Commit-Queue: Ömer Ağacan <omersa@google.com>
Change-Id: Ieb222c086864744d33b77de69882e805981f1953
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/293891
Commit-Queue: Zach Anderson <zra@google.com>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Joshua Litt <joshualitt@google.com>
This commit is contained in:
committed by
Commit Queue
parent
822841753e
commit
dc33261641
@@ -611,23 +611,16 @@ class Types {
|
||||
}
|
||||
|
||||
if (type.typeArguments.any((t) => t is! DynamicType)) {
|
||||
// Type has at least one type argument that is not `dynamic`.
|
||||
//
|
||||
// In cases like `x is List<T>` where `x : Iterable<T>` (tested-against
|
||||
// type is a subtype of the operand's static type and the types have same
|
||||
// number of type arguments), it is not necessary to test the type
|
||||
// arguments.
|
||||
// If the tested-against type as an instance of the static operand type
|
||||
// has the same type arguments as the static operand type, it is not
|
||||
// necessary to test the type arguments.
|
||||
Class cls = translator.classForType(operandType);
|
||||
InterfaceType? base = translator.hierarchy
|
||||
.getTypeAsInstanceOf(type, cls,
|
||||
isNonNullableByDefault:
|
||||
codeGen.member.enclosingLibrary.isNonNullableByDefault)
|
||||
?.withDeclaredNullability(operandType.declaredNullability);
|
||||
|
||||
final sameNumTypeParams = operandType is InterfaceType &&
|
||||
operandType.typeArguments.length == type.typeArguments.length;
|
||||
|
||||
if (!(sameNumTypeParams && base == operandType)) {
|
||||
if (base != operandType) {
|
||||
makeType(codeGen, type);
|
||||
codeGen.call(translator.isSubtype.reference);
|
||||
_endPotentiallyNullableBlock();
|
||||
|
||||
@@ -311,7 +311,7 @@ extension AnonymousJSClassExtension on AnonymousJSClass {
|
||||
external String? get bleep;
|
||||
external int? get goo;
|
||||
external int? get ooo;
|
||||
external List<Object?>? saz;
|
||||
external List<double>? saz;
|
||||
external List<double>? zoo;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user