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

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

Issue 1343363002: [Interpreter] Basic flow control. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Clarify comment and diff reduction. Created 5 years, 3 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-bytecode-generator.cc
diff --git a/test/cctest/interpreter/test-bytecode-generator.cc b/test/cctest/interpreter/test-bytecode-generator.cc
index bff48bcce1a3447d7d1ab9d1fe18df29e985d832..3080a41230d9f196e459bbd63b624de1889c06de 100644
--- a/test/cctest/interpreter/test-bytecode-generator.cc
+++ b/test/cctest/interpreter/test-bytecode-generator.cc
@@ -608,6 +608,60 @@ TEST(PropertyCall) {
}
}
+
+TEST(IfConditions) {
+ InitializedHandleScope handle_scope;
+ BytecodeGeneratorHelper helper;
+
+ ExpectedSnippet<void*> snippets[] = {{
+ "function f(arg1) { if (false) { return 1; } else { return -1; } }",
rmcilroy 2015/09/18 10:42:24 nit - remove arg1
oth 2015/09/23 10:46:56 Done.
+ 0,
+ 2,
+ 11,
+ {
+ B(LdaFalse),
+ B(JumpIfFalseSmi8), U8(7),
+ B(LdaSmi8), U8(1),
+ B(Return),
+ B(JumpSmi8), U8(5), // TODO(oth): Fix implicit return so dead-jump has
+ // a valid target.
+ B(LdaSmi8), U8(-1),
+ B(Return)
+ }},
+ {
+ "function f(a) { if (a <= 0) { return 200; } else { return -200; } }",
+ kPointerSize,
+ 2,
+ 17,
+ {
+ B(Ldar), R(-5),
+ B(Star), R(0),
+ B(LdaZero),
+ B(TestLessThanEqual), R(0),
+ B(JumpIfFalseSmi8), U8(7),
+ B(LdaConstant), U8(0),
+ B(Return),
+ B(JumpSmi8), U8(5), // TODO(oth): Fix implicit return so dead-jump has
+ // a valid target.
+ B(LdaConstant), U8(1),
+ B(Return)
+ }},
rmcilroy 2015/09/18 10:42:24 could you add some tests for: - non-bool values (
oth 2015/09/23 10:46:56 Done. There will be more tests to follow as well i
+ };
+
+ size_t num_snippets = sizeof(snippets) / sizeof(snippets[0]);
+ for (size_t i = 0; i < num_snippets; i++) {
+ Handle<BytecodeArray> ba =
+ helper.MakeBytecodeForFunction(snippets[i].code_snippet);
+ ba->Print();
+ CHECK_EQ(ba->frame_size(), snippets[i].frame_size);
+ CHECK_EQ(ba->parameter_count(), snippets[i].parameter_count);
+ CHECK_EQ(ba->length(), snippets[i].bytecode_length);
+ CHECK(!memcmp(ba->GetFirstBytecodeAddress(), snippets[i].bytecode,
+ ba->length()));
+ }
+}
+
+
} // namespace interpreter
} // namespace internal
} // namespance v8

Powered by Google App Engine
This is Rietveld 408576698