mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 02:47:36 +00:00
40611dd611
TBR=kustermann@google.com BUG= Review URL: https://codereview.chromium.org/2454993003 .
48 lines
1.4 KiB
Dart
48 lines
1.4 KiB
Dart
// Copyright (c) 2016, 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';
|
|
|
|
// Test that the context depth is correct in the presence of control flow,
|
|
// specifically branching and joining in the presence of break. The
|
|
// implementation uses the context depth after the else block of an if/then/else
|
|
// as the context depth at the join point. This test has an extra context
|
|
// allocated in the (untaken) else branch so it tests that compiling the
|
|
// (untaken) break properly tracks the context depth.
|
|
|
|
test(list) {
|
|
// The loops force creation of a new context, otherwise context allocated
|
|
// variables might be hoisted to an outer context.
|
|
do {
|
|
if (list.length > 1) {
|
|
do {
|
|
var sum = 0;
|
|
addem() {
|
|
for (var x in list) sum += x;
|
|
}
|
|
addem();
|
|
Expect.isTrue(sum == 15);
|
|
L: if (sum != 15) {
|
|
// Unreachable.
|
|
do {
|
|
var product = 1;
|
|
multiplyem() {
|
|
for (var x in list) product *= x;
|
|
}
|
|
multiplyem();
|
|
Expect.isTrue(false);
|
|
break L;
|
|
} while (false);
|
|
}
|
|
} while (false);
|
|
}
|
|
} while (false);
|
|
Expect.isTrue(list.length == 5);
|
|
}
|
|
|
|
|
|
main() {
|
|
test([1, 2, 3, 4, 5]);
|
|
}
|