| Index: tests/compiler/dart2js_extra/deferred_inheritance_test.dart
|
| diff --git a/tests/compiler/dart2js_extra/deferred_inheritance_test.dart b/tests/compiler/dart2js_extra/deferred_inheritance_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bbc51555ad70387d8d9192785caf55e65ed06320
|
| --- /dev/null
|
| +++ b/tests/compiler/dart2js_extra/deferred_inheritance_test.dart
|
| @@ -0,0 +1,30 @@
|
| +// Copyright (c) 2016, 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 --fast-startup. The compiler used to emit inherit calls
|
| +/// on each fragment even for classes that were already loaded on a different
|
| +/// fragment. As a result, the inheritance chain was overwritten in non-chrome
|
| +/// browsers (by using __proto__, we evaded this issue in Chrome).
|
| +library deferred_inheritance_test;
|
| +
|
| +import 'deferred_inheritance_lib2.dart';
|
| +import 'deferred_inheritance_lib1.dart' deferred as d;
|
| +
|
| +import 'package:expect/expect.dart';
|
| +
|
| +class B extends A {}
|
| +
|
| +/// If the check `y is A` is generated as `y.$isA` then the issue is not
|
| +/// exposed. We use `AssumeDynamic` to ensure that we generate as `y instanceof
|
| +/// A` in JS.
|
| +@NoInline() @AssumeDynamic()
|
| +check(y) => Expect.isTrue(y is A);
|
| +
|
| +main() {
|
| + check(new B());
|
| + d.loadLibrary().then((_) {
|
| + check(new d.C());
|
| + check(new B()); // This fails if we overwrite the inheritance chain.
|
| + });
|
| +}
|
|
|