blob: 010ffc719b3787a4ef3079e28eccbfed9fa09478 [file] [log] [blame]
// 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 =
/*@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() {
}