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

abstract class Test1 {
  int operator [](String s);
  void operator []=(String s, int v);

  void test() {
    var /*@ type=int* */ v1 = this /*@target=Test1.[]=*/ ['x'] = getInt();

    var /*@ type=num* */ v2 = this /*@target=Test1.[]=*/ ['x'] = getNum();

    var /*@ type=int* */ v4 = this
            /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
         ??= getInt();

    var /*@ type=num* */ v5 = this
            /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
         ??= getNum();

    var /*@ type=int* */ v7 = this
            /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
        /*@target=num.+*/ += getInt();

    var /*@ type=num* */ v8 = this
            /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
        /*@target=num.+*/ += getNum();

    var /*@ type=int* */ v10 = /*@target=num.+*/ ++this
        /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x'];

    var /*@ type=int* */ v11 = this
            /*@target=Test1.[]*/ /*@target=Test1.[]=*/ ['x']
        /*@target=num.+*/ ++;
  }
}

abstract class Test2 {
  int operator [](String s);
  void operator []=(String s, num v);

  void test() {
    var /*@ type=int* */ v1 = this /*@target=Test2.[]=*/ ['x'] = getInt();

    var /*@ type=num* */ v2 = this /*@target=Test2.[]=*/ ['x'] = getNum();

    var /*@ type=double* */ v3 = this /*@target=Test2.[]=*/ ['x'] = getDouble();

    var /*@ type=int* */ v4 = this
            /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
         ??= getInt();

    var /*@ type=num* */ v5 = this
            /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
         ??= getNum();

    var /*@ type=num* */ v6 = this
            /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
         ??= getDouble();

    var /*@ type=int* */ v7 = this
            /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
        /*@target=num.+*/ += getInt();

    var /*@ type=num* */ v8 = this
            /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
        /*@target=num.+*/ += getNum();

    var /*@ type=double* */ v9 = this
            /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
        /*@target=num.+*/ += getDouble();

    var /*@ type=int* */ v10 = /*@target=num.+*/ ++this
        /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x'];

    var /*@ type=int* */ v11 = this
            /*@target=Test2.[]*/ /*@target=Test2.[]=*/ ['x']
        /*@target=num.+*/ ++;
  }
}

abstract class Test3 {
  int operator [](String s);
  void operator []=(String s, double v);

  void test() {
    var /*@ type=num* */ v2 = this /*@target=Test3.[]=*/ ['x'] = getNum();

    var /*@ type=double* */ v3 = this /*@target=Test3.[]=*/ ['x'] = getDouble();

    var /*@ type=num* */ v5 = this
            /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
         ??= getNum();

    var /*@ type=num* */ v6 = this
            /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
         ??= getDouble();

    var /*@ type=int* */ v7 = this
            /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
        /*@target=num.+*/ += getInt();

    var /*@ type=num* */ v8 = this
            /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
        /*@target=num.+*/ += getNum();

    var /*@ type=double* */ v9 = this
            /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
        /*@target=num.+*/ += getDouble();

    var /*@ type=int* */ v10 = /*@target=num.+*/ ++this
        /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x'];

    var /*@ type=int* */ v11 = this
            /*@target=Test3.[]*/ /*@target=Test3.[]=*/ ['x']
        /*@target=num.+*/ ++;
  }
}

abstract class Test4 {
  num operator [](String s);
  void operator []=(String s, int v);

  void test() {
    var /*@ type=int* */ v1 = this /*@target=Test4.[]=*/ ['x'] = getInt();

    var /*@ type=num* */ v2 = this /*@target=Test4.[]=*/ ['x'] = getNum();

    var /*@ type=num* */ v4 = this
            /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
         ??= getInt();

    var /*@ type=num* */ v5 = this
            /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
         ??= getNum();

    var /*@ type=num* */ v7 = this
            /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
        /*@target=num.+*/ += getInt();

    var /*@ type=num* */ v8 = this
            /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
        /*@target=num.+*/ += getNum();

    var /*@ type=num* */ v10 = /*@target=num.+*/ ++this
        /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x'];

    var /*@ type=num* */ v11 = this
            /*@target=Test4.[]*/ /*@target=Test4.[]=*/ ['x']
        /*@target=num.+*/ ++;
  }
}

abstract class Test5 {
  num operator [](String s);
  void operator []=(String s, num v);

  void test() {
    var /*@ type=int* */ v1 = this /*@target=Test5.[]=*/ ['x'] = getInt();

    var /*@ type=num* */ v2 = this /*@target=Test5.[]=*/ ['x'] = getNum();

    var /*@ type=double* */ v3 = this /*@target=Test5.[]=*/ ['x'] = getDouble();

    var /*@ type=num* */ v4 = this
            /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
         ??= getInt();

    var /*@ type=num* */ v5 = this
            /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
         ??= getNum();

    var /*@ type=num* */ v6 = this
            /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
         ??= getDouble();

    var /*@ type=num* */ v7 = this
            /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
        /*@target=num.+*/ += getInt();

    var /*@ type=num* */ v8 = this
            /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
        /*@target=num.+*/ += getNum();

    var /*@ type=num* */ v9 = this
            /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
        /*@target=num.+*/ += getDouble();

    var /*@ type=num* */ v10 = /*@target=num.+*/ ++this
        /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x'];

    var /*@ type=num* */ v11 = this
            /*@target=Test5.[]*/ /*@target=Test5.[]=*/ ['x']
        /*@target=num.+*/ ++;
  }
}

abstract class Test6 {
  num operator [](String s);
  void operator []=(String s, double v);

  void test() {
    var /*@ type=num* */ v2 = this /*@target=Test6.[]=*/ ['x'] = getNum();

    var /*@ type=double* */ v3 = this /*@target=Test6.[]=*/ ['x'] = getDouble();

    var /*@ type=num* */ v5 = this
            /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
         ??= getNum();

    var /*@ type=num* */ v6 = this
            /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
         ??= getDouble();

    var /*@ type=num* */ v7 = this
            /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
        /*@target=num.+*/ += getInt();

    var /*@ type=num* */ v8 = this
            /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
        /*@target=num.+*/ += getNum();

    var /*@ type=num* */ v9 = this
            /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
        /*@target=num.+*/ += getDouble();

    var /*@ type=num* */ v10 = /*@target=num.+*/ ++this
        /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x'];

    var /*@ type=num* */ v11 = this
            /*@target=Test6.[]*/ /*@target=Test6.[]=*/ ['x']
        /*@target=num.+*/ ++;
  }
}

abstract class Test7 {
  double operator [](String s);
  void operator []=(String s, int v);

  void test() {
    var /*@ type=int* */ v1 = this /*@target=Test7.[]=*/ ['x'] = getInt();

    var /*@ type=num* */ v2 = this
        /*@target=Test7.[]=*/ ['x'] = getNum();

    var /*@ type=num* */ v4 = this
            /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
         ??= getInt();

    var /*@ type=num* */ v5 = this
            /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
         ??= getNum();

    var /*@ type=double* */ v7 = this
            /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
        /*@target=double.+*/ += getInt();

    var /*@ type=double* */ v8 = this
            /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
        /*@target=double.+*/ += getNum();

    var /*@ type=double* */ v10 = /*@target=double.+*/ ++this
        /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x'];

    var /*@ type=double* */ v11 = this
            /*@target=Test7.[]*/ /*@target=Test7.[]=*/ ['x']
        /*@target=double.+*/ ++;
  }
}

abstract class Test8 {
  double operator [](String s);
  void operator []=(String s, num v);

  void test() {
    var /*@ type=int* */ v1 = this /*@target=Test8.[]=*/ ['x'] = getInt();

    var /*@ type=num* */ v2 = this
        /*@target=Test8.[]=*/ ['x'] = getNum();

    var /*@ type=double* */ v3 = this
        /*@target=Test8.[]=*/ ['x'] = getDouble();

    var /*@ type=num* */ v4 = this
            /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
         ??= getInt();

    var /*@ type=num* */ v5 = this
            /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
         ??= getNum();

    var /*@ type=double* */ v6 = this
            /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
         ??= getDouble();

    var /*@ type=double* */ v7 = this
            /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
        /*@target=double.+*/ += getInt();

    var /*@ type=double* */ v8 = this
            /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
        /*@target=double.+*/ += getNum();

    var /*@ type=double* */ v9 = this
            /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x']
        /*@target=double.+*/ += getDouble();

    var /*@ type=double* */ v10 = /*@target=double.+*/ ++this
        /*@target=Test8.[]*/ /*@target=Test8.[]=*/ ['x'];

    var /*@ type=double* */ v11 = this
        /*@target=Test8.[]*/ /*@target=Test8.[]=*/ [
        'x'] /*@target=double.+*/ ++;
  }
}

abstract class Test9 {
  double operator [](String s);
  void operator []=(String s, double v);

  void test() {
    var /*@ type=num* */ v2 = this /*@target=Test9.[]=*/ ['x'] = getNum();

    var /*@ type=double* */ v3 = this
        /*@target=Test9.[]=*/ ['x'] = getDouble();

    var /*@ type=num* */ v5 = this
            /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
         ??= getNum();

    var /*@ type=double* */ v6 = this
            /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
         ??= getDouble();

    var /*@ type=double* */ v7 = this
            /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
        /*@target=double.+*/ += getInt();

    var /*@ type=double* */ v8 = this
            /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
        /*@target=double.+*/ += getNum();

    var /*@ type=double* */ v9 = this
            /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
        /*@target=double.+*/ += getDouble();

    var /*@ type=double* */ v10 = /*@target=double.+*/ ++this
        /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x'];

    var /*@ type=double* */ v11 = this
            /*@target=Test9.[]*/ /*@target=Test9.[]=*/ ['x']
        /*@target=double.+*/ ++;
  }
}

main() {}
