| // 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. |
| |
| // @dart=2.9 |
| |
| /*@testedFeatures=inference*/ |
| library test; |
| |
| int getInt() => 0; |
| num getNum() => 0; |
| double getDouble() => 0.0; |
| |
| class Test1 { |
| int t; |
| |
| void test() { |
| var /*@type=int**/ v1 = /*@target=Test1.t*/ t = getInt(); |
| |
| var /*@type=num**/ v2 = /*@target=Test1.t*/ t = getNum(); |
| |
| var /*@type=int**/ v4 = /*@target=Test1.t*/ /*@target=Test1.t*/ t |
| ??= getInt(); |
| |
| var /*@type=num**/ v5 = /*@target=Test1.t*/ /*@target=Test1.t*/ t |
| ??= getNum(); |
| |
| var /*@type=int**/ v7 = /*@target=Test1.t*/ /*@target=Test1.t*/ t |
| /*@target=num.+*/ += getInt(); |
| |
| var /*@type=num**/ v8 = /*@target=Test1.t*/ /*@target=Test1.t*/ t |
| /*@target=num.+*/ += getNum(); |
| |
| var /*@type=int**/ v10 = /*@target=num.+*/ ++ |
| /*@target=Test1.t*/ /*@target=Test1.t*/ t; |
| |
| var /*@type=int**/ v11 = |
| /*@type=int**/ /*@target=Test1.t*/ /*@target=Test1.t*/ |
| /*@type=int**/ t /*@target=num.+*/ ++; |
| } |
| } |
| |
| class Test2 { |
| num t; |
| |
| void test() { |
| var /*@type=int**/ v1 = /*@target=Test2.t*/ t = getInt(); |
| |
| var /*@type=num**/ v2 = /*@target=Test2.t*/ t = getNum(); |
| |
| var /*@type=double**/ v3 = /*@target=Test2.t*/ t = getDouble(); |
| |
| var /*@type=num**/ v4 = /*@target=Test2.t*/ /*@target=Test2.t*/ t |
| ??= getInt(); |
| |
| var /*@type=num**/ v5 = /*@target=Test2.t*/ /*@target=Test2.t*/ t |
| ??= getNum(); |
| |
| var /*@type=num**/ v6 = /*@target=Test2.t*/ /*@target=Test2.t*/ t |
| ??= getDouble(); |
| |
| var /*@type=num**/ v7 = /*@target=Test2.t*/ /*@target=Test2.t*/ t |
| /*@target=num.+*/ += getInt(); |
| |
| var /*@type=num**/ v8 = /*@target=Test2.t*/ /*@target=Test2.t*/ t |
| /*@target=num.+*/ += getNum(); |
| |
| var /*@type=num**/ v9 = /*@target=Test2.t*/ /*@target=Test2.t*/ t |
| /*@target=num.+*/ += getDouble(); |
| |
| var /*@type=num**/ v10 = /*@target=num.+*/ ++ |
| /*@target=Test2.t*/ /*@target=Test2.t*/ t; |
| |
| var /*@type=num**/ v11 = |
| /*@type=num**/ /*@target=Test2.t*/ /*@target=Test2.t*/ |
| /*@type=num**/ t /*@target=num.+*/ ++; |
| } |
| } |
| |
| class Test3 { |
| double t; |
| |
| void test3() { |
| var /*@type=num**/ v2 = /*@target=Test3.t*/ t = getNum(); |
| |
| var /*@type=double**/ v3 = /*@target=Test3.t*/ t = getDouble(); |
| |
| var /*@type=num**/ v5 = /*@target=Test3.t*/ /*@target=Test3.t*/ t |
| ??= getNum(); |
| |
| var /*@type=double**/ v6 = /*@target=Test3.t*/ /*@target=Test3.t*/ t |
| ??= getDouble(); |
| |
| var /*@type=double**/ v7 = /*@target=Test3.t*/ /*@target=Test3.t*/ t |
| /*@target=double.+*/ += getInt(); |
| |
| var /*@type=double**/ v8 = /*@target=Test3.t*/ /*@target=Test3.t*/ t |
| /*@target=double.+*/ += getNum(); |
| |
| var /*@type=double**/ v9 = /*@target=Test3.t*/ /*@target=Test3.t*/ t |
| /*@target=double.+*/ += getDouble(); |
| |
| var /*@type=double**/ v10 = |
| /*@target=double.+*/ ++ /*@target=Test3.t*/ /*@target=Test3.t*/ t; |
| |
| var /*@type=double**/ v11 = |
| /*@type=double**/ /*@target=Test3.t*/ /*@target=Test3.t*/ |
| /*@type=double**/ t /*@target=double.+*/ ++; |
| } |
| } |
| |
| main() {} |