dart-sdk/tests/language/deferred_regression_28678_test.dart
Florian Schneider 67a93da99e Handle type literals correctly with deferred loading and await.
When referring to constants via a deferred prefix in an await expression
the transformation must make sure that the generated code before and after
the deferred load agree on the number of captured variables. (i.e. the number
of await-temp variables introduced by the await-transformer is the same)

This CL uses a temporary in the case of compile-time constants, because before
the deferred load, a reference lib.C is translated into a static getter which
also requires a temporary.

Fixes #28678

R=hausner@google.com

Review-Url: https://codereview.chromium.org/2683973002 .
2017-02-08 15:37:39 -08:00

29 lines
685 B
Dart

// Copyright (c) 2017, 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.
// Test that await after deferred loading works as expected.
import 'dart:async';
import "package:expect/expect.dart";
import 'deferred_regression_28678_lib.dart' deferred as lib;
class A {
m() => "here";
}
f(a, b) => new Future.microtask(() {});
class R {
Future test_deferred() async {
var a = new A();
await lib.loadLibrary();
await f(lib.Clazz, lib.v);
Expect.equals("here", a.m());
}
}
main() async {
await new R().test_deferred();
}