| // 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. | |
| import "package:expect/expect.dart"; | |
| // Test that the return type of a method is being registered for both | |
| // its bailout and optimized version in dart2js. | |
| var a; | |
| bar() { | |
| if (a[0] == 0) { | |
| // Force bailout version. | |
| bar(); | |
| // Avoid inlining. | |
| throw 0; | |
| } | |
| for (int i = 0; i < 10; i++) { | |
| a[0] = 42; | |
| } | |
| // This return should say that bar can return an array or unknown. | |
| return a; | |
| } | |
| foo() { | |
| if (a[0] == 0) { | |
| // Avoid inlining. | |
| throw 0; | |
| } | |
| var b = bar(); | |
| // This check used to fail because dart2js was assuming [b] was an | |
| // array. | |
| Expect.equals(1, b.length); | |
| } | |
| main() { | |
| a = new Map(); | |
| bar(); | |
| foo(); | |
| } |