summaryrefslogtreecommitdiff
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.cc83
1 files changed, 61 insertions, 22 deletions
diff --git a/deps/v8/test/cctest/interpreter/test-bytecode-generator.cc b/deps/v8/test/cctest/interpreter/test-bytecode-generator.cc
index e81b0cf981..fb56d5d98a 100644
--- a/deps/v8/test/cctest/interpreter/test-bytecode-generator.cc
+++ b/deps/v8/test/cctest/interpreter/test-bytecode-generator.cc
@@ -157,13 +157,14 @@ bool CompareTexts(const std::string& generated, const std::string& expected) {
std::string expected_line;
// Line number does not include golden file header.
int line_number = 0;
+ bool strings_match = true;
do {
std::getline(generated_stream, generated_line);
std::getline(expected_stream, expected_line);
if (!generated_stream.good() && !expected_stream.good()) {
- return true;
+ return strings_match;
}
if (!generated_stream.good()) {
@@ -182,7 +183,7 @@ bool CompareTexts(const std::string& generated, const std::string& expected) {
std::cerr << "Inputs differ at line " << line_number << "\n";
std::cerr << " Generated: '" << generated_line << "'\n";
std::cerr << " Expected: '" << expected_line << "'\n";
- return false;
+ strings_match = false;
}
line_number++;
} while (true);
@@ -663,6 +664,7 @@ TEST(IIFEWithOneshotOpt) {
return arguments.callee;
})();
)",
+ // TODO(rmcilroy): Make this function produce one-shot code.
R"(
var t = 0;
function f2() {};
@@ -690,6 +692,34 @@ TEST(IIFEWithOneshotOpt) {
}
f();
)",
+ R"(
+ var f = function(l) { l.a = 3; return l; };
+ f({});
+ f;
+ )",
+ // No one-shot opt for top-level functions enclosed in parentheses
+ R"(
+ var f = (function(l) { l.a = 3; return l; });
+ f;
+ )",
+ R"(
+ var f = (function foo(l) { l.a = 3; return l; });
+ f;
+ )",
+ R"(
+ var f = function foo(l) { l.a = 3; return l; };
+ f({});
+ f;
+ )",
+ R"(
+ l = {};
+ var f = (function foo(l) { l.a = 3; return arguments.callee; })(l);
+ f;
+ )",
+ R"(
+ var f = (function foo(l) { l.a = 3; return arguments.callee; })({});
+ f;
+ )",
};
CHECK(CompareTexts(BuildActual(printer, snippets),
LoadGolden("IIFEWithOneshotOpt.golden")));
@@ -1469,6 +1499,8 @@ TEST(Delete) {
"return delete a[1];\n",
"return delete 'test';\n",
+
+ "return delete this;\n",
};
CHECK(CompareTexts(BuildActual(printer, snippets),
@@ -2242,6 +2274,33 @@ TEST(AssignmentsInBinaryExpression) {
LoadGolden("AssignmentsInBinaryExpression.golden")));
}
+TEST(DestructuringAssignment) {
+ InitializedIgnitionHandleScope scope;
+ BytecodeExpectationsPrinter printer(CcTest::isolate());
+ const char* snippets[] = {
+ "var x, a = [0,1,2,3];\n"
+ "[x] = a;\n",
+
+ "var x, y, a = [0,1,2,3];\n"
+ "[,x,...y] = a;\n",
+
+ "var x={}, y, a = [0];\n"
+ "[x.foo,y=4] = a;\n",
+
+ "var x, a = {x:1};\n"
+ "({x} = a);\n",
+
+ "var x={}, a = {y:1};\n"
+ "({y:x.foo} = a);\n",
+
+ "var x, a = {y:1, w:2, v:3};\n"
+ "({x=0,...y} = a);\n",
+ };
+
+ CHECK(CompareTexts(BuildActual(printer, snippets),
+ LoadGolden("DestructuringAssignment.golden")));
+}
+
TEST(Eval) {
InitializedIgnitionHandleScope scope;
BytecodeExpectationsPrinter printer(CcTest::isolate());
@@ -2476,26 +2535,6 @@ TEST(LetVariableContextSlot) {
LoadGolden("LetVariableContextSlot.golden")));
}
-TEST(DoExpression) {
- bool old_flag = FLAG_harmony_do_expressions;
- FLAG_harmony_do_expressions = true;
-
- InitializedIgnitionHandleScope scope;
- BytecodeExpectationsPrinter printer(CcTest::isolate());
- const char* snippets[] = {
- "var a = do { }; return a;\n",
-
- "var a = do { var x = 100; }; return a;\n",
-
- "while(true) { var a = 10; a = do { ++a; break; }; a = 20; }\n",
- };
-
- CHECK(CompareTexts(BuildActual(printer, snippets),
- LoadGolden("DoExpression.golden")));
-
- FLAG_harmony_do_expressions = old_flag;
-}
-
TEST(WithStatement) {
InitializedIgnitionHandleScope scope;
BytecodeExpectationsPrinter printer(CcTest::isolate());