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

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*/ t ??= getInt();
    var /*@type=num*/ v5 = /*@target=Test1::t*/ t ??= getNum();
    var /*@type=int*/ v7 = /*@target=Test1::t*/ t += getInt();
    var /*@type=num*/ v8 = /*@target=Test1::t*/ t += getNum();
    var /*@type=int*/ v10 = ++ /*@target=Test1::t*/ t;
    var /*@type=int*/ v11 = /*@target=Test1::t*/ t++;
  }
}

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*/ t ??= getInt();
    var /*@type=num*/ v5 = /*@target=Test2::t*/ t ??= getNum();
    var /*@type=num*/ v6 = /*@target=Test2::t*/ t ??= getDouble();
    var /*@type=num*/ v7 = /*@target=Test2::t*/ t += getInt();
    var /*@type=num*/ v8 = /*@target=Test2::t*/ t += getNum();
    var /*@type=num*/ v9 = /*@target=Test2::t*/ t += getDouble();
    var /*@type=num*/ v10 = ++ /*@target=Test2::t*/ t;
    var /*@type=num*/ v11 = /*@target=Test2::t*/ t++;
  }
}

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*/ t ??= getNum();
    var /*@type=double*/ v6 = /*@target=Test3::t*/ t ??= getDouble();
    var /*@type=double*/ v7 = /*@target=Test3::t*/ t += getInt();
    var /*@type=double*/ v8 = /*@target=Test3::t*/ t += getNum();
    var /*@type=double*/ v9 = /*@target=Test3::t*/ t += getDouble();
    var /*@type=double*/ v10 = ++ /*@target=Test3::t*/ t;
    var /*@type=double*/ v11 = /*@target=Test3::t*/ t++;
  }
}

main() {}
