[vm] Add recursive bounds mixin deduplication transformer test
TEST=pkg/vm/testcases/transformations/mixin_deduplication/generic_recursive_bounds.dart Change-Id: I39ae0ab13ec171a161c74ea310437b5eae233616 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/356501 Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com>
This commit is contained in:
committed by
Commit Queue
parent
dad57a4ced
commit
8d47263f60
@@ -0,0 +1,17 @@
|
||||
// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
class B1<T> {}
|
||||
|
||||
mixin M1 {}
|
||||
|
||||
class SC1<A extends B, B extends List<A>> extends B1<A> with M1 {}
|
||||
|
||||
class SC2<A extends B, B extends List<A>> extends B1<A> with M1 {}
|
||||
|
||||
class SC3<A extends B, B extends List<A?>> extends B1<A> with M1 {}
|
||||
|
||||
class SC4<A extends B, B extends List<A>?> extends B1<A> with M1 {}
|
||||
|
||||
main() {}
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
library #lib;
|
||||
import self as self;
|
||||
import "dart:core" as core;
|
||||
|
||||
class B1<T extends core::Object? = dynamic> extends core::Object {
|
||||
synthetic constructor •() → self::B1<self::B1::T%>
|
||||
: super core::Object::•()
|
||||
;
|
||||
}
|
||||
abstract class M1 extends core::Object /*isMixinDeclaration*/ {
|
||||
}
|
||||
abstract class _SC1&B1&M1<A extends self::_SC1&B1&M1::B = dynamic, B extends core::List<self::_SC1&B1&M1::A> = core::List<dynamic>> extends self::B1<self::_SC1&B1&M1::A> implements self::M1 /*isAnonymousMixin,isEliminatedMixin*/ {
|
||||
synthetic constructor •() → self::_SC1&B1&M1<self::_SC1&B1&M1::A, self::_SC1&B1&M1::B>
|
||||
: super self::B1::•()
|
||||
;
|
||||
}
|
||||
class SC1<A extends self::SC1::B = dynamic, B extends core::List<self::SC1::A> = core::List<dynamic>> extends self::_SC1&B1&M1<self::SC1::A, self::SC1::B> {
|
||||
synthetic constructor •() → self::SC1<self::SC1::A, self::SC1::B>
|
||||
: super self::_SC1&B1&M1::•()
|
||||
;
|
||||
}
|
||||
class SC2<A extends self::SC2::B = dynamic, B extends core::List<self::SC2::A> = core::List<dynamic>> extends self::_SC1&B1&M1<self::SC2::A, self::SC2::B> {
|
||||
synthetic constructor •() → self::SC2<self::SC2::A, self::SC2::B>
|
||||
: super self::_SC1&B1&M1::•()
|
||||
;
|
||||
}
|
||||
abstract class _SC3&B1&M1<A extends self::_SC3&B1&M1::B = dynamic, B extends core::List<self::_SC3&B1&M1::A?> = core::List<dynamic>> extends self::B1<self::_SC3&B1&M1::A> implements self::M1 /*isAnonymousMixin,isEliminatedMixin*/ {
|
||||
synthetic constructor •() → self::_SC3&B1&M1<self::_SC3&B1&M1::A, self::_SC3&B1&M1::B>
|
||||
: super self::B1::•()
|
||||
;
|
||||
}
|
||||
class SC3<A extends self::SC3::B = dynamic, B extends core::List<self::SC3::A?> = core::List<dynamic>> extends self::_SC3&B1&M1<self::SC3::A, self::SC3::B> {
|
||||
synthetic constructor •() → self::SC3<self::SC3::A, self::SC3::B>
|
||||
: super self::_SC3&B1&M1::•()
|
||||
;
|
||||
}
|
||||
abstract class _SC4&B1&M1<A extends self::_SC4&B1&M1::B% = dynamic, B extends core::List<self::_SC4&B1&M1::A%>? = core::List<dynamic>?> extends self::B1<self::_SC4&B1&M1::A%> implements self::M1 /*isAnonymousMixin,isEliminatedMixin*/ {
|
||||
synthetic constructor •() → self::_SC4&B1&M1<self::_SC4&B1&M1::A%, self::_SC4&B1&M1::B%>
|
||||
: super self::B1::•()
|
||||
;
|
||||
}
|
||||
class SC4<A extends self::SC4::B% = dynamic, B extends core::List<self::SC4::A%>? = core::List<dynamic>?> extends self::_SC4&B1&M1<self::SC4::A%, self::SC4::B%> {
|
||||
synthetic constructor •() → self::SC4<self::SC4::A%, self::SC4::B%>
|
||||
: super self::_SC4&B1&M1::•()
|
||||
;
|
||||
}
|
||||
static method main() → dynamic {}
|
||||
Reference in New Issue
Block a user