Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1484)

Unified Diff: test/cctest/interpreter/test-interpreter.cc

Issue 1414193006: [Interpreter] Removes unnecessary jumps and dead code from If and loops. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/cctest/interpreter/test-interpreter.cc
diff --git a/test/cctest/interpreter/test-interpreter.cc b/test/cctest/interpreter/test-interpreter.cc
index 164959019ac298b8fe76fd02b127a48fc2ae1c7a..32ec35249cfdc493a6c322cfb7fef7bf4607c4cc 100644
--- a/test/cctest/interpreter/test-interpreter.cc
+++ b/test/cctest/interpreter/test-interpreter.cc
@@ -2401,24 +2401,24 @@ TEST(InterpreterDeleteSloppyUnqualifiedIdentifier) {
// These tests generate a syntax error for strict mode. We don't
// test for it here.
std::pair<const char*, Handle<Object>> test_delete[] = {
- std::make_pair("var a = { x:10, y:'abc'};\n"
- "var b = delete a;\n"
- "if (delete a) {\n"
+ std::make_pair("var sloppy_a = { x:10, y:'abc'};\n"
+ "var sloppy_b = delete sloppy_a;\n"
+ "if (delete sloppy_a) {\n"
" return undefined;\n"
"} else {\n"
- " return a.x;\n"
+ " return sloppy_a.x;\n"
"}\n",
Handle<Object>(Smi::FromInt(10), isolate)),
// TODO(mythria) When try-catch is implemented change the tests to check
// if delete actually deletes
- std::make_pair("a = { x:10, y:'abc'};\n"
- "var b = delete a;\n"
+ std::make_pair("sloppy_a = { x:10, y:'abc'};\n"
+ "var sloppy_b = delete sloppy_a;\n"
// "try{return a.x;} catch(e) {return b;}\n"
- "return b;",
+ "return sloppy_b;",
factory->ToBoolean(true)),
- std::make_pair("a = { x:10, y:'abc'};\n"
- "var b = delete c;\n"
- "return b;",
+ std::make_pair("sloppy_a = { x:10, y:'abc'};\n"
+ "var sloppy_b = delete sloppy_c;\n"
+ "return sloppy_b;",
factory->ToBoolean(true))};
@@ -2498,3 +2498,59 @@ TEST(InterpreterGlobalDelete) {
CHECK(return_value->SameValue(*test_global_delete[i].second));
}
}
+
+
+TEST(InterpreterLoops) {
+ HandleAndZoneScope handles;
+ i::Isolate* isolate = handles.main_isolate();
+ i::Factory* factory = isolate->factory();
+
+ std::pair<const char*, Handle<Object>> test_loop[] = {
+ std::make_pair("var a = 10; var b = 1;\n"
+ "while (false) {\n"
+ " b = b * 2;\n"
+ " a = a - 1;\n"
+ "}\n"
+ "return b;\n",
+ Handle<Object>(Smi::FromInt(1), isolate)),
+ std::make_pair("var a = 10; var b = 1;\n"
+ "while (true) {\n"
+ " b = b * 2;\n"
+ " a = a - 1;\n"
+ " if (a == 0) break;"
+ " continue;"
+ "}\n"
+ "return b;\n",
+ factory->NewHeapNumber(1024)),
+ std::make_pair("var a = 10; var b = 1;\n"
+ "do {\n"
+ " b = b * 2;\n"
+ " a = a - 1;\n"
+ " if (a == 0) break;"
+ "} while(true);\n"
+ "return b;\n",
+ factory->NewHeapNumber(1024)),
+ std::make_pair("var a = 10; var b = 1;\n"
+ "do {\n"
+ " b = b * 2;\n"
+ " a = a - 1;\n"
+ " if (a == 0) break;"
+ "} while(false);\n"
+ "return b;\n",
+ Handle<Object>(Smi::FromInt(2), isolate)),
+ std::make_pair("var a = 10; var b = 1;\n"
+ "for ( a = 1, b = 30; false; ) {\n"
+ " b = b * 2;\n"
+ "}\n"
+ "return b;\n",
+ Handle<Object>(Smi::FromInt(30), isolate))};
+
+ for (size_t i = 0; i < arraysize(test_loop); i++) {
+ std::string source(InterpreterTester::SourceForBody(test_loop[i].first));
+ InterpreterTester tester(handles.main_isolate(), source.c_str());
+ auto callable = tester.GetCallable<>();
+
+ Handle<i::Object> return_value = callable().ToHandleChecked();
+ CHECK(return_value->SameValue(*test_loop[i].second));
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698