// 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 Base {
  int intProp;
  num numProp;
  double doubleProp;
}

class Test1 extends Base {
  void test() {
    var /*@ type=int* */ v1 = super. /*@target=Base::intProp*/ intProp = getInt();
    var /*@ type=num* */ v2 = super. /*@target=Base::intProp*/ intProp = getNum();
    var /*@ type=int* */ v4 =
        super. /*@target=Base::intProp*/ intProp ??= getInt();
    var /*@ type=num* */ v5 =
        super. /*@target=Base::intProp*/ intProp ??= getNum();
    var /*@ type=int* */ v7 = super. /*@target=Base::intProp*/ intProp += getInt();
    var /*@ type=num* */ v8 = super. /*@target=Base::intProp*/ intProp += getNum();
    var /*@ type=int* */ v10 = ++super. /*@target=Base::intProp*/ intProp;
    var /*@ type=int* */ v11 = super. /*@target=Base::intProp*/ intProp++;
  }
}

class Test2 extends Base {
  void test() {
    var /*@ type=int* */ v1 = super. /*@target=Base::numProp*/ numProp = getInt();
    var /*@ type=num* */ v2 = super. /*@target=Base::numProp*/ numProp = getNum();
    var /*@ type=double* */ v3 =
        super. /*@target=Base::numProp*/ numProp = getDouble();
    var /*@ type=num* */ v4 =
        super. /*@target=Base::numProp*/ numProp ??= getInt();
    var /*@ type=num* */ v5 =
        super. /*@target=Base::numProp*/ numProp ??= getNum();
    var /*@ type=num* */ v6 =
        super. /*@target=Base::numProp*/ numProp ??= getDouble();
    var /*@ type=num* */ v7 = super. /*@target=Base::numProp*/ numProp += getInt();
    var /*@ type=num* */ v8 = super. /*@target=Base::numProp*/ numProp += getNum();
    var /*@ type=num* */ v9 =
        super. /*@target=Base::numProp*/ numProp += getDouble();
    var /*@ type=num* */ v10 = ++super. /*@target=Base::numProp*/ numProp;
    var /*@ type=num* */ v11 = super. /*@target=Base::numProp*/ numProp++;
  }
}

class Test3 extends Base {
  void test3() {
    var /*@ type=num* */ v2 =
        super. /*@target=Base::doubleProp*/ doubleProp = getNum();
    var /*@ type=double* */ v3 =
        super. /*@target=Base::doubleProp*/ doubleProp = getDouble();
    var /*@ type=num* */ v5 =
        super. /*@target=Base::doubleProp*/ doubleProp ??= getNum();
    var /*@ type=double* */ v6 =
        super. /*@target=Base::doubleProp*/ doubleProp ??= getDouble();
    var /*@ type=double* */ v7 =
        super. /*@target=Base::doubleProp*/ doubleProp += getInt();
    var /*@ type=double* */ v8 =
        super. /*@target=Base::doubleProp*/ doubleProp += getNum();
    var /*@ type=double* */ v9 =
        super. /*@target=Base::doubleProp*/ doubleProp += getDouble();
    var /*@ type=double* */ v10 = ++super. /*@target=Base::doubleProp*/ doubleProp;
    var /*@ type=double* */ v11 = super. /*@target=Base::doubleProp*/ doubleProp++;
  }
}

main() {}
