// Copyright (c) 2011, 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. // VMOptions=--optimization-counter-threshold=10 --no-use-osr --no-background-compilation import "package:expect/expect.dart"; // Check correct deoptimization of instance field increment. main() { var a = new A(); var aa = new A(); for (int i = 0; i < 20; i++) { a.Incr(); myIncr(aa); conditionalIncr(false, a); } Expect.equals(20, a.f); Expect.equals(20, aa.f); a.f = 1.0; // Deoptimize ++ part of instance increment. a.Incr(); Expect.equals(2.0, a.f); var b = new B(); // Deoptimize getfield part of instance increment. myIncr(b); Expect.equals(1.0, b.f); // Deoptimize since no type feedback was collected. var old = a.f; conditionalIncr(true, a); Expect.equals(old + 1, a.f); } myIncr(var a) { a.f++; } conditionalIncr(var f, var a) { if (f) { a.f++; } } class A { A() : f = 0; Incr() { f++; } var f; } class B { B() : f = 0; var f; }