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 | |
20 test() async { | 19 test() async { |
21 // flatten(Derived<int>) = int | 20 // flatten(Derived<int>) = int |
22 int x = await new Derived<int>(); //# 01: runtime error | 21 int x = await new Derived<int>(); //# 01: runtime error |
23 Future<int> f() async => new Derived<int>(); //# 02: ok | 22 Future<int> f() async => new Derived<int>(); //# 02: ok |
24 Future<int> f() async { return new Derived<int>(); } //# 03: ok | 23 Future<int> f() async { return new Derived<int>(); } //# 03: ok |
25 Future<int> x = (() async => new Derived<int>())(); //# 04: runtime error | 24 Future<int> x = (() async => new Derived<int>())(); //# 04: runtime error |
26 | 25 |
27 // flatten(FixedPoint<int>) = FixedPoint<int> | 26 // flatten(FixedPoint<int>) = FixedPoint<int> |
28 FixedPoint<int> x = await new FixedPoint<int>(); //# 05: runtime error | 27 FixedPoint<int> x = await new FixedPoint<int>(); //# 05: runtime error |
29 Future<FixedPoint<int>> f() async => new FixedPoint<int>(); //# 06: ok | 28 Future<FixedPoint<int>> f() async => new FixedPoint<int>(); //# 06: ok |
30 Future<FixedPoint<int>> f() async { return new FixedPoint<int>(); } //# 07: ok | 29 Future<FixedPoint<int>> f() async { return new FixedPoint<int>(); } //# 07: ok |
31 Future<FixedPoint<int>> x = (() async => new FixedPoint<int>())(); //# 08: run
time error | 30 Future<FixedPoint<int>> x = (() async => new FixedPoint<int>())(); //# 08: run
time error |
32 | 31 |
33 // flatten(Divergent<int>) = Divergent<Divergent<int>> | 32 // flatten(Divergent<int>) = Divergent<Divergent<int>> |
34 Divergent<Divergent<int>> x = await new Divergent<int>(); //# 09: runtime erro
r | 33 Divergent<Divergent<int>> x = await new Divergent<int>(); //# 09: runtime erro
r |
35 Future<Divergent<Divergent<int>>> f() async => new Divergent<int>(); //# 10: o
k | 34 Future<Divergent<Divergent<int>>> f() async => new Divergent<int>(); //# 10: o
k |
36 Future<Divergent<Divergent<int>>> f() async { return new Divergent<int>(); } /
/# 11: ok | 35 Future<Divergent<Divergent<int>>> f() async { return new Divergent<int>(); } /
/# 11: ok |
37 Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())(); //
# 12: runtime error | 36 Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())(); //
# 12: runtime error |
38 } | 37 } |
39 | 38 |
40 main() { | 39 main() { |
41 test(); | 40 test(); |
42 } | 41 } |
OLD | NEW |