From bfb8a077e2e55964f65c3d4cb590c1e3f4ddc098 Mon Sep 17 00:00:00 2001 From: Johnni Winther Date: Fri, 20 May 2016 11:20:23 +0200 Subject: [PATCH] Fix ForwardingConstructorElementZ.computeEffectiveTargetType BUG= R=sigmund@google.com Review URL: https://codereview.chromium.org/1981313002 . --- pkg/compiler/lib/src/serialization/modelz.dart | 2 +- .../dart2js/serialization/equivalence_test.dart | 5 +++++ tests/compiler/dart2js/serialization/helper.dart | 14 ++++++++++++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/pkg/compiler/lib/src/serialization/modelz.dart b/pkg/compiler/lib/src/serialization/modelz.dart index 3c10292cf4e..9664bbde714 100644 --- a/pkg/compiler/lib/src/serialization/modelz.dart +++ b/pkg/compiler/lib/src/serialization/modelz.dart @@ -1256,7 +1256,7 @@ class ForwardingConstructorElementZ extends ElementZ @override InterfaceType computeEffectiveTargetType(InterfaceType newType) { - return enclosingClass.thisType; + return enclosingClass.thisType.substByContext(newType); } @override diff --git a/tests/compiler/dart2js/serialization/equivalence_test.dart b/tests/compiler/dart2js/serialization/equivalence_test.dart index fb1ace8a505..9629caf17ef 100644 --- a/tests/compiler/dart2js/serialization/equivalence_test.dart +++ b/tests/compiler/dart2js/serialization/equivalence_test.dart @@ -572,6 +572,11 @@ class ElementPropertyEquivalence extends BaseElementVisitor { element1.computeEffectiveTargetType(element1.enclosingClass.thisType), element2.computeEffectiveTargetType(element2.enclosingClass.thisType), areTypesEquivalent); + check( + element1, element2, 'effectiveTargetType.raw', + element1.computeEffectiveTargetType(element1.enclosingClass.rawType), + element2.computeEffectiveTargetType(element2.enclosingClass.rawType), + areTypesEquivalent); checkElementIdentities(element1, element2, 'immediateRedirectionTarget', element1.immediateRedirectionTarget, element2.immediateRedirectionTarget); diff --git a/tests/compiler/dart2js/serialization/helper.dart b/tests/compiler/dart2js/serialization/helper.dart index 1ce8c2bd1ff..cde182f22e2 100644 --- a/tests/compiler/dart2js/serialization/helper.dart +++ b/tests/compiler/dart2js/serialization/helper.dart @@ -14,6 +14,8 @@ import 'package:compiler/src/compiler.dart'; import '../memory_compiler.dart'; import 'test_data.dart'; +const String DEFAULT_DATA_FILE_NAME = 'out.data'; + class Arguments { final String filename; final int start; @@ -29,7 +31,7 @@ class Arguments { this.end, this.loadSerializedData: false, this.saveSerializedData: false, - this.serializedDataFileName: 'out.data', + this.serializedDataFileName: DEFAULT_DATA_FILE_NAME, this.verbose: false}); factory Arguments.from(List arguments) { @@ -38,7 +40,7 @@ class Arguments { int end; for (String arg in arguments) { if (!arg.startsWith('-')) { - int index = int.parse(arg); + int index = int.parse(arg, onError: (_) => null); if (index == null) { filename = arg; } else if (start == null) { @@ -51,6 +53,14 @@ class Arguments { bool verbose = arguments.contains('-v'); bool loadSerializedData = arguments.contains('-l'); bool saveSerializedData = arguments.contains('-s'); + if (arguments.contains('--auto')) { + File file = new File(DEFAULT_DATA_FILE_NAME); + if (file.existsSync()) { + loadSerializedData = true; + } else { + saveSerializedData = true; + } + } return new Arguments( filename: filename, start: start,