// 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]); }