aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/test/cctest/interpreter/test-bytecode-generator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/cctest/interpreter/test-bytecode-generator.cc')
-rw-r--r--deps/v8/test/cctest/interpreter/test-bytecode-generator.cc102
1 files changed, 102 insertions, 0 deletions
diff --git a/deps/v8/test/cctest/interpreter/test-bytecode-generator.cc b/deps/v8/test/cctest/interpreter/test-bytecode-generator.cc
index b249799f6c..6b6227e96e 100644
--- a/deps/v8/test/cctest/interpreter/test-bytecode-generator.cc
+++ b/deps/v8/test/cctest/interpreter/test-bytecode-generator.cc
@@ -2507,6 +2507,108 @@ TEST(ForAwaitOf) {
i::FLAG_harmony_async_iteration = old_flag;
}
+TEST(StandardForLoop) {
+ InitializedIgnitionHandleScope scope;
+ BytecodeExpectationsPrinter printer(CcTest::isolate());
+ printer.set_wrap(false);
+ printer.set_test_function_name("f");
+
+ const char* snippets[] = {
+ "function f() {\n"
+ " for (let x = 0; x < 10; ++x) { let y = x; }\n"
+ "}\n"
+ "f();\n",
+
+ "function f() {\n"
+ " for (let x = 0; x < 10; ++x) { eval('1'); }\n"
+ "}\n"
+ "f();\n",
+
+ "function f() {\n"
+ " for (let x = 0; x < 10; ++x) { (function() { return x; })(); }\n"
+ "}\n"
+ "f();\n",
+
+ "function f() {\n"
+ " for (let { x, y } = { x: 0, y: 3 }; y > 0; --y) { let z = x + y; }\n"
+ "}\n"
+ "f();\n",
+
+ "function* f() {\n"
+ " for (let x = 0; x < 10; ++x) { let y = x; }\n"
+ "}\n"
+ "f();\n",
+
+ "function* f() {\n"
+ " for (let x = 0; x < 10; ++x) yield x;\n"
+ "}\n"
+ "f();\n",
+
+ "async function f() {\n"
+ " for (let x = 0; x < 10; ++x) { let y = x; }\n"
+ "}\n"
+ "f();\n",
+
+ "async function f() {\n"
+ " for (let x = 0; x < 10; ++x) await x;\n"
+ "}\n"
+ "f();\n"};
+
+ CHECK(CompareTexts(BuildActual(printer, snippets),
+ LoadGolden("StandardForLoop.golden")));
+}
+
+TEST(ForOfLoop) {
+ InitializedIgnitionHandleScope scope;
+ BytecodeExpectationsPrinter printer(CcTest::isolate());
+ printer.set_wrap(false);
+ printer.set_test_function_name("f");
+
+ const char* snippets[] = {
+ "function f(arr) {\n"
+ " for (let x of arr) { let y = x; }\n"
+ "}\n"
+ "f([1, 2, 3]);\n",
+
+ "function f(arr) {\n"
+ " for (let x of arr) { eval('1'); }\n"
+ "}\n"
+ "f([1, 2, 3]);\n",
+
+ "function f(arr) {\n"
+ " for (let x of arr) { (function() { return x; })(); }\n"
+ "}\n"
+ "f([1, 2, 3]);\n",
+
+ "function f(arr) {\n"
+ " for (let { x, y } of arr) { let z = x + y; }\n"
+ "}\n"
+ "f([{ x: 0, y: 3 }, { x: 1, y: 9 }, { x: -12, y: 17 }]);\n",
+
+ "function* f(arr) {\n"
+ " for (let x of arr) { let y = x; }\n"
+ "}\n"
+ "f([1, 2, 3]);\n",
+
+ "function* f(arr) {\n"
+ " for (let x of arr) yield x;\n"
+ "}\n"
+ "f([1, 2, 3]);\n",
+
+ "async function f(arr) {\n"
+ " for (let x of arr) { let y = x; }\n"
+ "}\n"
+ "f([1, 2, 3]);\n",
+
+ "async function f(arr) {\n"
+ " for (let x of arr) await x;\n"
+ "}\n"
+ "f([1, 2, 3]);\n"};
+
+ CHECK(CompareTexts(BuildActual(printer, snippets),
+ LoadGolden("ForOfLoop.golden")));
+}
+
} // namespace interpreter
} // namespace internal
} // namespace v8