Chromium Code Reviews| 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 |