|  | // Copyright (c) 2017, 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. | 
|  |  | 
|  | /*@testedFeatures=inference*/ | 
|  | library test; | 
|  |  | 
|  | int getInt() => 0; | 
|  | num getNum() => 0; | 
|  | double getDouble() => 0.0; | 
|  |  | 
|  | void test1(int t, int? t2) { | 
|  | var /*@type=int*/ v1 = t = getInt(); | 
|  |  | 
|  | var /*@type=int*/ v4 = t2  ??= getInt(); | 
|  |  | 
|  | var /*@type=int*/ v7 = t /*@target=num.+*/ += getInt(); | 
|  |  | 
|  | var /*@type=int*/ v10 = /*@target=num.+*/ ++t; | 
|  |  | 
|  | var /*@type=int*/ v11 = /*@type=int*/ t | 
|  | /*@type=int*/ /*@target=num.+*/ ++; | 
|  | } | 
|  |  | 
|  | void test2(num t, num? t2, num? t3, num? t4) { | 
|  | var /*@type=int*/ v1 = t = getInt(); | 
|  |  | 
|  | var /*@type=num*/ v2 = t = getNum(); | 
|  |  | 
|  | var /*@type=double*/ v3 = t = getDouble(); | 
|  |  | 
|  | var /*@type=num*/ v4 = t2  ??= getInt(); | 
|  |  | 
|  | var /*@type=num*/ v5 = t3  ??= getNum(); | 
|  |  | 
|  | var /*@type=num*/ v6 = t4  ??= getDouble(); | 
|  |  | 
|  | var /*@type=num*/ v7 = t /*@target=num.+*/ += getInt(); | 
|  |  | 
|  | var /*@type=num*/ v8 = t /*@target=num.+*/ += getNum(); | 
|  |  | 
|  | var /*@type=double*/ v9 = t /*@target=num.+*/ += getDouble(); | 
|  |  | 
|  | var /*@type=num*/ v10 = /*@target=num.+*/ ++t; | 
|  |  | 
|  | var /*@type=num*/ v11 = /*@type=num*/ t | 
|  | /*@type=num*/ /*@target=num.+*/ ++; | 
|  | } | 
|  |  | 
|  | void test3(double t, double? t2) { | 
|  | var /*@type=double*/ v3 = t = getDouble(); | 
|  |  | 
|  | var /*@type=double*/ v6 = t2  ??= getDouble(); | 
|  |  | 
|  | var /*@type=double*/ v7 = t /*@target=double.+*/ += getInt(); | 
|  |  | 
|  | var /*@type=double*/ v8 = t /*@target=double.+*/ += getNum(); | 
|  |  | 
|  | var /*@type=double*/ v9 = t /*@target=double.+*/ += getDouble(); | 
|  |  | 
|  | var /*@type=double*/ v10 = /*@target=double.+*/ ++t; | 
|  |  | 
|  | var /*@type=double*/ v11 = /*@type=double*/ t | 
|  | /*@type=double*/ /*@target=double.+*/ ++; | 
|  | } | 
|  |  | 
|  | main() {} |