// Copyright (c) 2012, 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.
// Test megamorphic, but single target field load.
// VMOptions=--optimization-counter-threshold=10

import "package:expect/expect.dart";

class Base {
  var f;
}

class A extends Base {
  A() {
    this.f = 0;
  }
}

class B extends Base {
  B() {
    this.f = 1;
  }
}

class C extends Base {
  C() {
    this.f = 2;
  }
}

class D extends Base {
  D() {
    this.f = 3;
  }
}

class E extends Base {
  E() {
    this.f = 4;
  }
}

class F extends Base {
  F() {
    this.f = 5;
  }
}

class G extends Base {
  G() {
    this.f = 6;
  }
}

class H extends Base {
  H() {
    this.f = 7;
  }
}

class I extends Base {
  I() {
    this.f = 8;
  }
}

class J extends Base {
  J() {
    this.f = 9;
  }
}

class K extends Base {
  K() {
    this.f = 10;
  }
}

class L extends Base {
  L() {
    this.f = 11;
  }
}

class M extends Base {
  M() {
    this.f = 12;
  }
}

class N extends Base {
  N() {
    this.f = 13;
  }
}

class O extends Base {
  O() {
    this.f = 14;
  }
}

class P extends Base {
  P() {
    this.f = 15;
  }
}

class Q extends Base {
  Q() {
    this.f = 16;
  }
}

class R extends Base {
  R() {
    this.f = 17;
  }
}

class S extends Base {
  S() {
    this.f = 18;
  }
}

class T extends Base {
  T() {
    this.f = 19;
  }
}

class U extends Base {
  U() {
    this.f = 20;
  }
}

class V extends Base {
  V() {
    this.f = 21;
  }
}

class W extends Base {
  V() {
    this.f = 22;
  }
}

class X extends Base {
  V() {
    this.f = 21;
  }
}

class Y extends Base {
  V() {
    this.f = 24;
  }
}

class Z extends Base {
  V() {
    this.f = 21;
  }
}

allocateObjects() {
  var list = [];
  list.add(new A());
  list.add(new B());
  list.add(new C());
  list.add(new D());
  list.add(new E());
  list.add(new F());
  list.add(new G());
  list.add(new H());
  list.add(new I());
  list.add(new J());
  list.add(new K());
  list.add(new L());
  list.add(new M());
  list.add(new N());
  list.add(new O());
  list.add(new P());
  list.add(new Q());
  list.add(new R());
  list.add(new S());
  list.add(new T());
  list.add(new U());
  list.add(new V());
  return list;
}

callThemAll(var list) {
  for (var i = 0; i < list.length; i++) {
    Expect.equals(i, list[i].f);
  }
}

main() {
  var list = allocateObjects();
  // Make sure the optimizer triggers the compilation of callThemAll.
  for (var i = 0; i < 20; i++) {
    callThemAll(list);
  }
}
