| Index: tests/compiler/dart2js_extra/inference_super_set_call_test.dart
|
| diff --git a/tests/compiler/dart2js_extra/inference_super_set_call_test.dart b/tests/compiler/dart2js_extra/inference_super_set_call_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5a5602379271e8a018a8a84973131baa62221d5f
|
| --- /dev/null
|
| +++ b/tests/compiler/dart2js_extra/inference_super_set_call_test.dart
|
| @@ -0,0 +1,46 @@
|
| +// Copyright (c) 2013, 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.
|
| +
|
| +// Regression test for dart2js: we incorrectly modeled `super.x = rhs` as a
|
| +// call and not an assignment, so the type of the expression was incorrectly
|
| +// assumed to be the return type of the setter rather than the type of the rhs.
|
| +import 'package:expect/expect.dart';
|
| +
|
| +abstract class A {
|
| + set x(v) {}
|
| + set z(v) {}
|
| + set y(v) { return 'hi';}
|
| +}
|
| +
|
| +class S extends A {
|
| + var _x; // was bad: inferred as null, than [null | int]
|
| + var _y = ''; // was bad: inferred as String, rather than [String | int]
|
| + var _z; // was ok : inferred as [null | int]
|
| +
|
| + set x(v) {
|
| + _x = super.x = v;
|
| + }
|
| +
|
| + set z(v) {
|
| + super.z = v;
|
| + _z = v;
|
| + }
|
| +
|
| + set y(v) {
|
| + _y = super.y = v;
|
| + }
|
| +
|
| + get isXNull => _x == null;
|
| + get isZNull => _z == null;
|
| +}
|
| +
|
| +main() {
|
| + var s = new S()
|
| + ..x = 2
|
| + ..y = 2
|
| + ..z = 2;
|
| + Expect.equals(false, s.isXNull); // was incorrectly optimized to 'true'
|
| + Expect.equals(false, s._y is String); // was incorrectly optimized to 'true'
|
| + Expect.equals(false, s.isZNull); // prints false
|
| +}
|
|
|