OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 import 'dart:async'; | 5 import 'dart:async'; |
6 | 6 |
7 class Derived<T> implements Future<T> { | 7 class Derived<T> implements Future<T> { |
8 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 8 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
9 } | 9 } |
10 | 10 |
11 class FixedPoint<T> implements Future<FixedPoint<T>> { | 11 class FixedPoint<T> implements Future<FixedPoint<T>> { |
12 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 12 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
13 } | 13 } |
14 | 14 |
15 class Divergent<T> implements Future<Divergent<Divergent<T>>> { | 15 class Divergent<T> implements Future<Divergent<Divergent<T>>> { |
16 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 16 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
17 } | 17 } |
18 | 18 |
| 19 |
19 test() async { | 20 test() async { |
20 // flatten(Derived<int>) = int | 21 // flatten(Derived<int>) = int |
21 int x = await new Derived<int>(); //# 01: runtime error | 22 int x = await new Derived<int>(); //# 01: runtime error |
22 Future<int> f() async => new Derived<int>(); //# 02: ok | 23 Future<int> f() async => new Derived<int>(); //# 02: ok |
23 Future<int> f() async { return new Derived<int>(); } //# 03: ok | 24 Future<int> f() async { return new Derived<int>(); } //# 03: ok |
24 Future<int> x = (() async => new Derived<int>())(); //# 04: runtime error | 25 Future<int> x = (() async => new Derived<int>())(); //# 04: runtime error |
25 | 26 |
26 // flatten(FixedPoint<int>) = FixedPoint<int> | 27 // flatten(FixedPoint<int>) = FixedPoint<int> |
27 FixedPoint<int> x = await new FixedPoint<int>(); //# 05: runtime error | 28 FixedPoint<int> x = await new FixedPoint<int>(); //# 05: runtime error |
28 Future<FixedPoint<int>> f() async => new FixedPoint<int>(); //# 06: ok | 29 Future<FixedPoint<int>> f() async => new FixedPoint<int>(); //# 06: ok |
29 Future<FixedPoint<int>> f() async { return new FixedPoint<int>(); } //# 07: ok | 30 Future<FixedPoint<int>> f() async { return new FixedPoint<int>(); } //# 07: ok |
30 Future<FixedPoint<int>> x = (() async => new FixedPoint<int>())(); //# 08: run
time error | 31 Future<FixedPoint<int>> x = (() async => new FixedPoint<int>())(); //# 08: run
time error |
31 | 32 |
32 // flatten(Divergent<int>) = Divergent<Divergent<int>> | 33 // flatten(Divergent<int>) = Divergent<Divergent<int>> |
33 Divergent<Divergent<int>> x = await new Divergent<int>(); //# 09: runtime erro
r | 34 Divergent<Divergent<int>> x = await new Divergent<int>(); //# 09: runtime erro
r |
34 Future<Divergent<Divergent<int>>> f() async => new Divergent<int>(); //# 10: o
k | 35 Future<Divergent<Divergent<int>>> f() async => new Divergent<int>(); //# 10: o
k |
35 Future<Divergent<Divergent<int>>> f() async { return new Divergent<int>(); } /
/# 11: ok | 36 Future<Divergent<Divergent<int>>> f() async { return new Divergent<int>(); } /
/# 11: ok |
36 Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())(); //
# 12: runtime error | 37 Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())(); //
# 12: runtime error |
37 } | 38 } |
38 | 39 |
39 main() { | 40 main() { |
40 test(); | 41 test(); |
41 } | 42 } |
OLD | NEW |