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 |