|  | // 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. | 
|  | // | 
|  | // Tests optimization: transform double.toInt() to DoubleToSmi | 
|  | // unless we encounter a non-Smi result, in which case we deoptimize and | 
|  | // optimize it later to DoubleToInt. | 
|  |  | 
|  | import "package:expect/expect.dart"; | 
|  |  | 
|  | main() { | 
|  | for (int i = 0; i < 600; i++) { | 
|  | Expect.equals(100, foo(100, 1.2)); | 
|  | } | 
|  | // Deoptimize 'foo', d2smi -> d2int. | 
|  | Expect.equals(36507222016 * 2, foo(2, 36507222016.6)); | 
|  | for (int i = 0; i < 600; i++) { | 
|  | Expect.equals(100, foo(100, 1.2)); | 
|  | } | 
|  | Expect.equals(36507222016 * 2, foo(2, 36507222016.6)); | 
|  | } | 
|  |  | 
|  | foo(n, a) { | 
|  | int k = 0; | 
|  | for (int i = 0; i < n; i++) { | 
|  | k += goo(a); | 
|  | } | 
|  | return k; | 
|  | } | 
|  |  | 
|  | int goo(a) { | 
|  | return a.toInt(); | 
|  | } |