| // 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. |
| |
| /*@testedFeatures=error,warning,context*/ |
| |
| 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 = /*@error=NamedFunctionExpression*/ T() {}; |
| } |
| { |
| /*@context=DuplicatedNamePreviouslyUsedCause*/ V v; |
| // This causes an error, V is already used in this scope. |
| var /*@error=DuplicatedNamePreviouslyUsed*/ V; |
| } |
| { |
| /*@context=DuplicatedNamePreviouslyUsedCause*/ V v; |
| // This causes an error, V is already used in this scope. |
| var /*@error=DuplicatedNamePreviouslyUsed*/ V = null; |
| } |
| { |
| // This causes a scope error as T is already used in the function-type |
| // scope (the return type). |
| var x = |
| /*@error=ReturnTypeFunctionExpression*/ |
| /*@context=DuplicatedNamePreviouslyUsedCause*/ |
| T |
| /*@error=NamedFunctionExpression*/ |
| /*@error=DuplicatedNamePreviouslyUsed*/ |
| T() {}; |
| } |
| { |
| // This causes a scope error: using the outer definition of `V` as a type |
| // when defining `V`. |
| /*@context=DuplicatedNamePreviouslyUsedCause*/ |
| V /*@error=DuplicatedNamePreviouslyUsed*/ V; |
| } |
| { |
| // This causes a scope error as T is already defined as a type variable in |
| // the function-type scope. |
| var x = |
| /*@error=NamedFunctionExpression*/ |
| /*@error=DuplicatedName*/ |
| T< /*@context=DuplicatedNameCause*/ T>() {}; |
| } |
| { |
| /*@context=DuplicatedNamePreviouslyUsedCause*/ |
| T t; |
| T /*@error=DuplicatedNamePreviouslyUsed*/ T() {} |
| } |
| { |
| /*@context=DuplicatedNamePreviouslyUsedCause*/ |
| T /*@error=DuplicatedNamePreviouslyUsed*/ T() {} |
| } |
| { |
| /*@context=DuplicatedNamePreviouslyUsedCause*/ |
| T t; |
| T /*@error=DuplicatedNamePreviouslyUsed*/ T(T t) {} |
| } |
| { |
| /*@context=DuplicatedNamePreviouslyUsedCause*/ |
| T /*@error=DuplicatedNamePreviouslyUsed*/ T(T t) {} |
| } |
| { |
| void T(/*@error=NotAType*/ T t) {} |
| } |
| } |
| |
| void main() { |
| } |