// 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) => 'hi'; } class S extends A { var _x; // was bad: inferred as null, than [null | int] dynamic _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 }