From 95ef8bb59ab875dbcbbc6866bc25684b6dcced57 Mon Sep 17 00:00:00 2001 From: Jennifer Messerly Date: Thu, 20 Oct 2016 16:31:06 -0700 Subject: [PATCH] fix #27643, failed to virtualize fields if an abstract one is mixed in R=vsm@google.com Review URL: https://codereview.chromium.org/2441693003 . --- .../lib/src/compiler/js_field_storage.dart | 4 -- .../language/mixin_abstract_getter_test.dart | 43 +++++++++++++++++++ .../lib/math/implement_rectangle_test.dart | 4 ++ 3 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 pkg/dev_compiler/test/codegen/language/mixin_abstract_getter_test.dart diff --git a/pkg/dev_compiler/lib/src/compiler/js_field_storage.dart b/pkg/dev_compiler/lib/src/compiler/js_field_storage.dart index decef3b8a89..13d598024f4 100644 --- a/pkg/dev_compiler/lib/src/compiler/js_field_storage.dart +++ b/pkg/dev_compiler/lib/src/compiler/js_field_storage.dart @@ -30,10 +30,6 @@ PropertyOverrideResult checkForPropertyOverride( var setter = superprop.setter; bool hasSetter = setter != null && !setter.isAbstract; if (hasSetter) foundSetter = true; - - // Stop if this is an abstract getter/setter - // TODO(jmesserly): why were we doing this? - if (!hasGetter && !hasSetter) break; } return new PropertyOverrideResult(foundGetter, foundSetter); diff --git a/pkg/dev_compiler/test/codegen/language/mixin_abstract_getter_test.dart b/pkg/dev_compiler/test/codegen/language/mixin_abstract_getter_test.dart new file mode 100644 index 00000000000..98ee18c6bcf --- /dev/null +++ b/pkg/dev_compiler/test/codegen/language/mixin_abstract_getter_test.dart @@ -0,0 +1,43 @@ +// Copyright (c) 2016, 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 'package:expect/expect.dart'; + +abstract class B { + int get x; +} + +class C { + int get x => 42; +} + +class D extends C with B { + final int x; + + D(this.x); +} + + +class C2 { + int get x => 42; +} + +abstract class B2 extends C2 { + int get x; +} + +class D2 extends B2 { + final int x; + + D2(this.x); +} + + +void main() { + var d = new D(17); + Expect.equals(d.x, 17); + + var d2 = new D2(17); + Expect.equals(d.x, 17); +} diff --git a/pkg/dev_compiler/test/codegen/lib/math/implement_rectangle_test.dart b/pkg/dev_compiler/test/codegen/lib/math/implement_rectangle_test.dart index ce93360e77f..3a31ed84331 100644 --- a/pkg/dev_compiler/test/codegen/lib/math/implement_rectangle_test.dart +++ b/pkg/dev_compiler/test/codegen/lib/math/implement_rectangle_test.dart @@ -1,3 +1,7 @@ +// Copyright (c) 2016, 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:math' hide Rectangle; import 'dart:math' as math show Point, Rectangle, MutableRectangle; import 'package:expect/expect.dart' show Expect;