| // 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. | 
 |  | 
 | // @dart = 2.7 | 
 |  | 
 | // 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 | 
 | } |