| // Copyright (c) 2018, 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. | |
| class T {} | |
| class V {} | |
| test() { | |
| T t; | |
| V v; | |
| { | |
| // This doesn't cause an error as the previous use of T is in an enclosing | |
| // scope. | |
| T() {} | |
| } | |
| { | |
| // This doesn't cause an error as the previous use of V is in an enclosing | |
| // scope. | |
| var v; | |
| } | |
| { | |
| T t; | |
| // This doesn't cause a scope error as the named function expression has | |
| // its own scope. | |
| var x = T() {}; | |
| } | |
| { | |
| V v; | |
| // This causes an error, V is already used in this scope. | |
| var V; | |
| } | |
| { | |
| V v; | |
| // This causes an error, V is already used in this scope. | |
| var V = null; | |
| } | |
| { | |
| // This causes a scope error as T is already used in the function-type | |
| // scope (the return type). | |
| var x = T T() {}; | |
| } | |
| { | |
| // This causes a scope error: using the outer definition of `V` as a type | |
| // when defining `V`. | |
| V V; | |
| } | |
| { | |
| // This causes a scope error as T is already defined as a type variable in | |
| // the function-type scope. | |
| var x = T<T>() {}; | |
| } | |
| { | |
| T t; | |
| T T() => throw ''; | |
| } | |
| { | |
| T T() => throw ''; | |
| } | |
| { | |
| T t; | |
| T T(T t) => t; | |
| } | |
| { | |
| T T(T t) => t; | |
| } | |
| { | |
| void T(T t) {} | |
| } | |
| } | |
| void main() {} |