blob: ff09790f4ca459e260ee996535d29758907479ac [file] [log] [blame]
// Copyright (c) 2012, 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";
class A {
operator+(arg) => 42;
}
get42() => 42;
getNonInt() => new A();
use(x) => x;
void testInWhileLoop() {
var c = get42();
while (true) {
var e = getNonInt();
Expect.equals(42, e + 2);
if (e != null) break;
while (true) use(e);
}
// This is what matters: 'c' must have been saved in the
// environment.
Expect.equals(c, 42);
}
void testInNestedWhileLoop() {
var c = get42();
while (true) {
while (true) {
var e = getNonInt();
Expect.equals(42, e + 2);
if (e != null) break;
}
// This is what matters: 'c' must have been saved in the
// environment.
Expect.equals(c, 42);
if (c == 42) break;
}
}
void testInNestedWhileLoop2() {
var c = get42();
L0: while (true) {
while (true) {
var e = getNonInt();
Expect.equals(42, e + 2);
if (e != null) break L0;
while (true) use(e);
}
}
// This is what matters: 'c' must have been saved in the
// environment.
Expect.equals(c, 42);
}
void testInNestedWhileLoop3() {
var c = get42();
int index = 0;
while (index < 2) {
while (index < 2) {
var e = getNonInt();
Expect.equals(42, e + 2);
if (e != null && index++ == 0) break;
// This is what matters: 'c' must have been saved in the
// environment.
Expect.equals(c, 42);
while (e == null) use(e);
}
}
}
void testInDoWhileLoop() {
var c = get42();
do {
var e = getNonInt();
Expect.equals(42, e + 2);
if (e != null) break;
while (true) use(e);
} while (true);
// This is what matters: 'c' must have been saved in the
// environment.
Expect.equals(c, 42);
}
void testInForLoop() {
var c = get42();
for (int i = 0; i < 10; i++) {
var e = getNonInt();
Expect.equals(42, e + 2);
if (e != null) break;
while (true) use(e);
}
// This is what matters: 'c' must have been saved in the
// environment.
Expect.equals(c, 42);
}
void testLabeledIf() {
var c = get42();
L1: if (c == 42) {
var e = getNonInt();
Expect.equals(42, e + 2);
if (e == null) break L1;
// This is what matters: 'c' must have been saved in the
// environment.
Expect.equals(c, 42);
while (e == null) use(e);
}
Expect.equals(c, 42);
}
void testLabeledIf2() {
var c = get42();
L1: if (c == 42) {
var e = getNonInt();
Expect.equals(42, e + 2);
if (e == null) break L1;
Expect.equals(42, e + 1);
while (e == null) use(e);
}
Expect.equals(42, c);
}
main() {
testInWhileLoop();
testInDoWhileLoop();
testInForLoop();
testInNestedWhileLoop();
testInNestedWhileLoop2();
testInNestedWhileLoop3();
testLabeledIf();
testLabeledIf2();
}