blob: c6cf014ca720ce86e164dc4e40fc1e70744e2841 [file] [log] [blame]
// Copyright (c) 2022, 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.
import "package:expect/expect.dart";
main() {
switchStatementBodyScope();
ifCaseThenScope();
unsharedPatternVariableShadows();
sharedPatternVariableShadows(0);
sharedPatternVariableShadows(1);
}
var topLevel = 'top-level';
/// Pattern variables are in a scope surrounding the body scope.
void switchStatementBodyScope() {
switch ('pattern') {
case var x:
// Not a collision:
var x = 'local';
Expect.equals('local', x);
default:
Expect.fail('Should not reach this.');
}
}
/// Pattern variables are in a scope surrounding the if-case then scope.
void ifCaseThenScope() {
// Not an error: Then statement is in separate scope.
if ('pattern' case var x) var x = 'local';
}
/// Unshared variables shadow variables in outer scopes.
void unsharedPatternVariableShadows() {
var local = 'local';
switch (('pat', 'tern')) {
case (String topLevel, String local):
Expect.equals('pat tern', '$topLevel $local');
// Assign to pattern variable.
local = 'assigned';
default:
Expect.fail('Should not reach this.');
}
// Outer local is not assigned.
Expect.equals('local', local);
}
/// Shared variables shadow variables in outer scopes.
void sharedPatternVariableShadows(Object value) {
var local = 'local';
switch (('pat', 'tern')) {
case (String topLevel, String local) when value == 0:
case (String topLevel, String local) when value == 1:
Expect.equals('pat tern', '$topLevel $local');
// Assign to pattern variable.
local = 'assigned';
default:
Expect.fail('Should not reach this.');
}
// Outer local is not assigned.
Expect.equals('local', local);
}