// 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 bug that was caused by uninstantiated classes being
// added to emitted classes by runtime-type system.
// See my explanation in https://codereview.chromium.org/14018036/.
//   -- ahe

import "dart:_js_helper";

@Native("A")
class A {
  // Just making sure the field name is unique.
  var rti_only_native_test_field;
}

typedef fisk();

main() {
  void foo(A x) {}
  var map = <String, dynamic>{'a': 0, 'b': main};
  try {
    map.values.forEach((x) => x.rti_only_native_test_field);
  } finally {
    print(main is fisk);
    return;
  }
}
