| // 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. |
| |
| /*@testedFeatures=inference,error*/ |
| library test; |
| |
| int intValue = 0; |
| num numValue = 0; |
| double doubleValue = 0.0; |
| |
| // There's a circularity between a and b because the type of `int + x` depends |
| // on the type of x. |
| |
| var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ a = /*@returnType=num*/ () => |
| intValue /*@target=num::+*/ + b; |
| var /*@topType=dynamic*/ /*@error=CantInferTypeDueToCircularity*/ b = a(); |
| |
| // But there's no circularity between c and d because the type of `num + x` is |
| // always num. |
| |
| var /*@topType=() -> num*/ c = /*@returnType=num*/ () => |
| numValue /*@target=num::+*/ + d; |
| var /*@topType=num*/ d = c(); |
| |
| // Similar for double. |
| |
| var /*@topType=() -> double*/ e = /*@returnType=double*/ () => |
| doubleValue /*@target=double::+*/ + f; |
| var /*@topType=double*/ f = e(); |
| |
| main() {} |