|  | // 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 | 
|  | } |