Index: test/mjsunit/harmony/do-expressions-control.js |
diff --git a/test/mjsunit/harmony/do-expressions-control.js b/test/mjsunit/harmony/do-expressions-control.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..12c54295ccfe41a68b95309a00f1d5a9baac19aa |
--- /dev/null |
+++ b/test/mjsunit/harmony/do-expressions-control.js |
@@ -0,0 +1,109 @@ |
+// 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(); |
+})(); |