| 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 |