blob: 12c54295ccfe41a68b95309a00f1d5a9baac19aa [file] [log] [blame]
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --allow-natives-syntax --harmony-do-expressions
(function TestDoForInDoBreak() {
function f(o, i) {
var a = "result@" + do {
var r = "(";
for (var x in o) {
var b = "end@" + do {
if (x == i) { break } else { r += o[x]; x }
}
}
r + ")";
}
return a + "," + b;
}
assertEquals("result@(3),end@0", f([3], 2));
assertEquals("result@(35),end@1", f([3,5], 2));
assertEquals("result@(35),end@1", f([3,5,7], 2));
assertEquals("result@(35),end@1", f([3,5,7,9], 2));
%OptimizeFunctionOnNextCall(f);
assertEquals("result@(3),end@0", f([3], 2));
assertEquals("result@(35),end@1", f([3,5], 2));
assertEquals("result@(35),end@1", f([3,5,7], 2));
assertEquals("result@(35),end@1", f([3,5,7,9], 2));
})();
(function TestDoForInDoContinue() {
function f(o, i) {
var a = "result@" + do {
var r = "("
for (var x in o) {
var b = "end@" + do {
if (x == i) { continue } else { r += o[x]; x }
}
}
r + ")"
}
return a + "," + b
}
assertEquals("result@(3),end@0", f([3], 2));
assertEquals("result@(35),end@1", f([3,5], 2));
assertEquals("result@(35),end@1", f([3,5,7], 2));
assertEquals("result@(359),end@3", f([3,5,7,9], 2));
%OptimizeFunctionOnNextCall(f);
assertEquals("result@(3),end@0", f([3], 2));
assertEquals("result@(35),end@1", f([3,5], 2));
assertEquals("result@(35),end@1", f([3,5,7], 2));
assertEquals("result@(359),end@3", f([3,5,7,9], 2));
})();
(function TestDoForNestedWithTargetLabels() {
function f(mode) {
var loop = true;
var head = "<";
var tail = ">";
var middle =
"1" + do { loop1: for(; loop; head += "A") {
"2" + do { loop2: for(; loop; head += "B") {
"3" + do { loop3: for(; loop; head += "C") {
"4" + do { loop4: for(; loop; head += "D") {
"5" + do { loop5: for(; loop; head += "E") {
"6" + do { loop6: for(; loop; head += "F") {
loop = false;
switch (mode) {
case "b1": break loop1;
case "b2": break loop2;
case "b3": break loop3;
case "b4": break loop4;
case "b5": break loop5;
case "b6": break loop6;
case "c1": continue loop1;
case "c2": continue loop2;
case "c3": continue loop3;
case "c4": continue loop4;
case "c5": continue loop5;
case "c6": continue loop6;
default: "7";
}
}}
}}
}}
}}
}}
}}
return head + middle + tail;
}
function test() {
assertEquals( "<1undefined>", f("b1"));
assertEquals( "<A1undefined>", f("c1"));
assertEquals( "<A12undefined>", f("b2"));
assertEquals( "<BA12undefined>", f("c2"));
assertEquals( "<BA123undefined>", f("b3"));
assertEquals( "<CBA123undefined>", f("c3"));
assertEquals( "<CBA1234undefined>", f("b4"));
assertEquals( "<DCBA1234undefined>", f("c4"));
assertEquals( "<DCBA12345undefined>", f("b5"));
assertEquals( "<EDCBA12345undefined>", f("c5"));
assertEquals( "<EDCBA123456undefined>", f("b6"));
assertEquals("<FEDCBA123456undefined>", f("c6"));
assertEquals("<FEDCBA1234567>", f("xx"));
}
test();
%OptimizeFunctionOnNextCall(f);
test();
})();