-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge dad57a4 into dev
- Loading branch information
Showing
10 changed files
with
399 additions
and
49 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
// 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. | ||
|
||
import 'dart:io'; | ||
|
||
import 'package:kernel/target/targets.dart'; | ||
import 'package:kernel/verifier.dart'; | ||
import 'package:test/test.dart'; | ||
import 'package:vm/modular/target/vm.dart' show VmTarget; | ||
import 'package:vm/transformations/mixin_deduplication.dart' | ||
show transformComponent; | ||
|
||
import '../common_test_utils.dart'; | ||
|
||
final String pkgVmDir = Platform.script.resolve('../..').toFilePath(); | ||
|
||
runTestCase(Uri source) async { | ||
final target = VmTarget(new TargetFlags(soundNullSafety: true)); | ||
final component = | ||
await compileTestCaseToKernelProgram(source, target: target); | ||
transformComponent(component); | ||
verifyComponent( | ||
target, VerificationStage.afterGlobalTransformations, component); | ||
|
||
final actual = kernelLibraryToString(component.mainMethod!.enclosingLibrary); | ||
compareResultWithExpectationsFile(source, actual); | ||
} | ||
|
||
main() { | ||
group('mixin-deduplication', () { | ||
final testCasesDir = | ||
Directory(pkgVmDir + '/testcases/transformations/mixin_deduplication'); | ||
|
||
for (var entry in testCasesDir | ||
.listSync(recursive: true, followLinks: false) | ||
.reversed) { | ||
if (entry.path.endsWith(".dart")) { | ||
test(entry.path, () => runTestCase(entry.uri)); | ||
} | ||
} | ||
}); | ||
} |
35 changes: 35 additions & 0 deletions
35
pkg/vm/testcases/transformations/mixin_deduplication/generic.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
// 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 {} | ||
|
||
mixin M1<T> {} | ||
|
||
class SA1<T> extends B1 with M1<T> {} | ||
|
||
class SA2<T> extends B1 with M1<T> {} | ||
|
||
class SA3<T> extends B1 with M1<T?> {} | ||
|
||
class B2<T> {} | ||
|
||
mixin M2 {} | ||
|
||
class SB1<T> extends B2<T> with M2 {} | ||
|
||
class SB2<T> extends B2<T> with M2 {} | ||
|
||
class SB3<T> extends B2<T?> with M2 {} | ||
|
||
class B3<T> {} | ||
|
||
mixin M3 {} | ||
|
||
class SC1<T extends Object> extends B3<T> with M2 {} | ||
|
||
class SC2<T extends Object> extends B3<T> with M2 {} | ||
|
||
class SC3<T extends Object?> extends B3<T> with M2 {} | ||
|
||
main() {} |
101 changes: 101 additions & 0 deletions
101
pkg/vm/testcases/transformations/mixin_deduplication/generic.dart.expect
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
library #lib; | ||
import self as self; | ||
import "dart:core" as core; | ||
|
||
class B1 extends core::Object { | ||
synthetic constructor •() → self::B1 | ||
: super core::Object::•() | ||
; | ||
} | ||
abstract class M1<T extends core::Object? = dynamic> extends core::Object /*isMixinDeclaration*/ { | ||
} | ||
abstract class _SA1&B1&M1<T extends core::Object? = dynamic> extends self::B1 implements self::M1<self::_SA1&B1&M1::T%> /*isAnonymousMixin,isEliminatedMixin*/ { | ||
synthetic constructor •() → self::_SA1&B1&M1<self::_SA1&B1&M1::T%> | ||
: super self::B1::•() | ||
; | ||
} | ||
class SA1<T extends core::Object? = dynamic> extends self::_SA1&B1&M1<self::SA1::T%> { | ||
synthetic constructor •() → self::SA1<self::SA1::T%> | ||
: super self::_SA1&B1&M1::•() | ||
; | ||
} | ||
class SA2<T extends core::Object? = dynamic> extends self::_SA1&B1&M1<self::SA2::T%> { | ||
synthetic constructor •() → self::SA2<self::SA2::T%> | ||
: super self::_SA1&B1&M1::•() | ||
; | ||
} | ||
abstract class _SA3&B1&M1<T extends core::Object? = dynamic> extends self::B1 implements self::M1<self::_SA3&B1&M1::T?> /*isAnonymousMixin,isEliminatedMixin*/ { | ||
synthetic constructor •() → self::_SA3&B1&M1<self::_SA3&B1&M1::T%> | ||
: super self::B1::•() | ||
; | ||
} | ||
class SA3<T extends core::Object? = dynamic> extends self::_SA3&B1&M1<self::SA3::T%> { | ||
synthetic constructor •() → self::SA3<self::SA3::T%> | ||
: super self::_SA3&B1&M1::•() | ||
; | ||
} | ||
class B2<T extends core::Object? = dynamic> extends core::Object { | ||
synthetic constructor •() → self::B2<self::B2::T%> | ||
: super core::Object::•() | ||
; | ||
} | ||
abstract class M2 extends core::Object /*isMixinDeclaration*/ { | ||
} | ||
abstract class _SB1&B2&M2<T extends core::Object? = dynamic> extends self::B2<self::_SB1&B2&M2::T%> implements self::M2 /*isAnonymousMixin,isEliminatedMixin*/ { | ||
synthetic constructor •() → self::_SB1&B2&M2<self::_SB1&B2&M2::T%> | ||
: super self::B2::•() | ||
; | ||
} | ||
class SB1<T extends core::Object? = dynamic> extends self::_SB1&B2&M2<self::SB1::T%> { | ||
synthetic constructor •() → self::SB1<self::SB1::T%> | ||
: super self::_SB1&B2&M2::•() | ||
; | ||
} | ||
class SB2<T extends core::Object? = dynamic> extends self::_SB1&B2&M2<self::SB2::T%> { | ||
synthetic constructor •() → self::SB2<self::SB2::T%> | ||
: super self::_SB1&B2&M2::•() | ||
; | ||
} | ||
abstract class _SB3&B2&M2<T extends core::Object? = dynamic> extends self::B2<self::_SB3&B2&M2::T?> implements self::M2 /*isAnonymousMixin,isEliminatedMixin*/ { | ||
synthetic constructor •() → self::_SB3&B2&M2<self::_SB3&B2&M2::T%> | ||
: super self::B2::•() | ||
; | ||
} | ||
class SB3<T extends core::Object? = dynamic> extends self::_SB3&B2&M2<self::SB3::T%> { | ||
synthetic constructor •() → self::SB3<self::SB3::T%> | ||
: super self::_SB3&B2&M2::•() | ||
; | ||
} | ||
class B3<T extends core::Object? = dynamic> extends core::Object { | ||
synthetic constructor •() → self::B3<self::B3::T%> | ||
: super core::Object::•() | ||
; | ||
} | ||
abstract class M3 extends core::Object /*isMixinDeclaration*/ { | ||
} | ||
abstract class _SC1&B3&M2<T extends core::Object> extends self::B3<self::_SC1&B3&M2::T> implements self::M2 /*isAnonymousMixin,isEliminatedMixin*/ { | ||
synthetic constructor •() → self::_SC1&B3&M2<self::_SC1&B3&M2::T> | ||
: super self::B3::•() | ||
; | ||
} | ||
class SC1<T extends core::Object> extends self::_SC1&B3&M2<self::SC1::T> { | ||
synthetic constructor •() → self::SC1<self::SC1::T> | ||
: super self::_SC1&B3&M2::•() | ||
; | ||
} | ||
class SC2<T extends core::Object> extends self::_SC1&B3&M2<self::SC2::T> { | ||
synthetic constructor •() → self::SC2<self::SC2::T> | ||
: super self::_SC1&B3&M2::•() | ||
; | ||
} | ||
abstract class _SC3&B3&M2<T extends core::Object?> extends self::B3<self::_SC3&B3&M2::T%> implements self::M2 /*isAnonymousMixin,isEliminatedMixin*/ { | ||
synthetic constructor •() → self::_SC3&B3&M2<self::_SC3&B3&M2::T%> | ||
: super self::B3::•() | ||
; | ||
} | ||
class SC3<T extends core::Object?> extends self::_SC3&B3&M2<self::SC3::T%> { | ||
synthetic constructor •() → self::SC3<self::SC3::T%> | ||
: super self::_SC3&B3&M2::•() | ||
; | ||
} | ||
static method main() → dynamic {} |
25 changes: 25 additions & 0 deletions
25
pkg/vm/testcases/transformations/mixin_deduplication/non_generic.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
// 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 {} | ||
|
||
mixin M1<T> {} | ||
|
||
class SA1 extends B1 with M1<int> {} | ||
|
||
class SA2 extends B1 with M1<int> {} | ||
|
||
class SA3 extends B1 with M1<String> {} | ||
|
||
class B2<T> {} | ||
|
||
mixin M2 {} | ||
|
||
class SB1 extends B2<int> with M2 {} | ||
|
||
class SB2 extends B2<int> with M2 {} | ||
|
||
class SB3 extends B2<String> with M2 {} | ||
|
||
main() {} |
Oops, something went wrong.