| // 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(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); | |
| } | |
| } |