| // 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. | 
 | // Test deoptimization caused by running code that did not collect type | 
 | // feedback before. | 
 | // VMOptions=--optimization-counter-threshold=10 --no-use-osr | 
 |  | 
 | import "package:expect/expect.dart"; | 
 |  | 
 | testStoreIndexed() { | 
 |   test(a, i, v, flag) { | 
 |     if (flag) { | 
 |       // No type feedback in first pass | 
 |       return a[i] = v; | 
 |     } else { | 
 |       return a[i] = i; | 
 |     } | 
 |   } | 
 |  | 
 |   var a = new List(10); | 
 |   for (var i = 0; i < 20; i++) { | 
 |     var r = test(a, 3, 888, false); | 
 |     Expect.equals(3, r); | 
 |     Expect.equals(3, a[3]); | 
 |   } | 
 |   // Deopt. | 
 |   var r = test(a, 3, 888, true); | 
 |   Expect.equals(888, r); | 
 |   Expect.equals(888, a[3]); | 
 | } | 
 |  | 
 | testIncrLocal() { | 
 |   test(a, flag) { | 
 |     if (flag) { | 
 |       a++; | 
 |       return a; | 
 |     } else { | 
 |       return -1; | 
 |     } | 
 |   } | 
 |  | 
 |   for (var i = 0; i < 20; i++) { | 
 |     var r = test(10, false); | 
 |     Expect.equals(-1, r); | 
 |   } | 
 |   // Deopt. | 
 |   var r = test(10, true); | 
 |   Expect.equals(11, r); | 
 | } | 
 |  | 
 | main() { | 
 |   for (var i = 0; i < 20; i++) {} | 
 |   testStoreIndexed(); | 
 |   testIncrLocal(); | 
 | } |