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