| // Copyright (c) 2013, 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. |
| |
| // Regression test for a crash in dart2js. |
| |
| part of crash_6725; |
| |
| class Fisk { |
| it1(x) { |
| // "key" is unresolved and caused a crash in dart2js. |
| // This is the original example the user reported. |
| for (key in x) { |
| print(key); |
| } |
| } |
| |
| it2(x) { |
| // "length" is "intercepted" and handled differently from other |
| // names when an instance of list is observed. |
| for (length in x) { |
| print(length); |
| } |
| } |
| |
| it3(x) { |
| // We're pretty sure that there's no "fisk" that is "intercepted". |
| for (fisk in x) { |
| print(fisk); |
| } |
| } |
| } |
| |
| class SubFisk extends Fisk { |
| var key; |
| var length; |
| var fisk; |
| } |
| |
| test() { |
| Fisk f = new SubFisk(); |
| var m = (x) { |
| for (undeclared in x) { |
| print(undeclared); |
| } |
| }; |
| if (new DateTime.now().millisecondsSinceEpoch == 42) { |
| f = null; |
| m = (x) {}; |
| } |
| |
| f.it1([87, 42]); |
| if (f.key != 42) { |
| throw 'f.key != 42 (${f.key})'; |
| } |
| |
| f.it2([87, 42]); |
| if (f.length != 42) { |
| throw 'f.length != 42 (${f.length})'; |
| } |
| |
| f.it3([87, 42]); |
| if (f.fisk != 42) { |
| throw 'f.fisk != 42 (${f.fisk})'; |
| } |
| |
| try { |
| m([87, 42]); |
| throw 'NoSuchMethodError expected'; |
| } on NoSuchMethodError { |
| // Expected. |
| } |
| } |