Chromium Code Reviews| Index: test/unittests/compiler/bytecode-graph-builder-unittest.cc |
| diff --git a/test/unittests/compiler/bytecode-graph-builder-unittest.cc b/test/unittests/compiler/bytecode-graph-builder-unittest.cc |
| index 3135db022939b822b0331cfbac78b2b22942cc5c..e47774027b35bee4347c6d97abfe1ea606403d3e 100644 |
| --- a/test/unittests/compiler/bytecode-graph-builder-unittest.cc |
| +++ b/test/unittests/compiler/bytecode-graph-builder-unittest.cc |
| @@ -40,6 +40,12 @@ class BytecodeGraphBuilderTest : public TestWithIsolateAndZone { |
| public: |
| BytecodeGraphBuilderTest() {} |
| + std::pair<Graph*, Handle<SharedFunctionInfo>> GetCompletedGraphAndSharedInfo( |
| + Handle<BytecodeArray> bytecode_array, |
| + MaybeHandle<TypeFeedbackVector> feedback_vector = |
| + MaybeHandle<TypeFeedbackVector>(), |
| + LanguageMode language_mode = LanguageMode::SLOPPY); |
| + |
| Graph* GetCompletedGraph(Handle<BytecodeArray> bytecode_array, |
| MaybeHandle<TypeFeedbackVector> feedback_vector = |
| MaybeHandle<TypeFeedbackVector>(), |
| @@ -63,7 +69,8 @@ class BytecodeGraphBuilderTest : public TestWithIsolateAndZone { |
| }; |
| -Graph* BytecodeGraphBuilderTest::GetCompletedGraph( |
| +std::pair<Graph*, Handle<SharedFunctionInfo>> |
| +BytecodeGraphBuilderTest::GetCompletedGraphAndSharedInfo( |
| Handle<BytecodeArray> bytecode_array, |
| MaybeHandle<TypeFeedbackVector> feedback_vector, |
| LanguageMode language_mode) { |
| @@ -91,7 +98,17 @@ Graph* BytecodeGraphBuilderTest::GetCompletedGraph( |
| BytecodeGraphBuilder graph_builder(zone(), &info, jsgraph); |
| graph_builder.CreateGraph(); |
| - return graph; |
| + return std::make_pair(graph_builder.graph(), shared_info); |
| +} |
| + |
| + |
| +Graph* BytecodeGraphBuilderTest::GetCompletedGraph( |
| + Handle<BytecodeArray> bytecode_array, |
| + MaybeHandle<TypeFeedbackVector> feedback_vector, |
| + LanguageMode language_mode) { |
| + return GetCompletedGraphAndSharedInfo(bytecode_array, feedback_vector, |
| + language_mode) |
| + .first; |
| } |
| @@ -807,6 +824,42 @@ TEST_F(BytecodeGraphBuilderTest, New) { |
| EXPECT_THAT(ret, IsReturn(call_construct, call_construct, IsIfSuccess(_))); |
| } |
| + |
| +TEST_F(BytecodeGraphBuilderTest, CreateClosure) { |
| + PretenureFlag kPretenureFlags[] = {NOT_TENURED, TENURED}; |
| + TRACED_FOREACH(PretenureFlag, pretenured_flag, kPretenureFlags) { |
| + interpreter::BytecodeArrayBuilder inner_builder(isolate(), zone()); |
| + inner_builder.set_locals_count(0); |
| + inner_builder.set_context_count(0); |
| + inner_builder.set_parameter_count(3); |
| + inner_builder.LoadAccumulatorWithRegister(inner_builder.Parameter(2)) |
| + .BinaryOperation(Token::Value::ADD, inner_builder.Parameter(1), |
| + Strength::WEAK) |
| + .Return(); |
| + |
| + std::pair<Graph*, Handle<SharedFunctionInfo>> inner_graph_and_shared_info = |
| + GetCompletedGraphAndSharedInfo(inner_builder.ToBytecodeArray()); |
| + Handle<SharedFunctionInfo> shared_info = inner_graph_and_shared_info.second; |
|
Michael Starzinger
2015/11/23 11:18:38
If the only thing needed from the inner bytecode i
oth
2015/11/24 12:29:36
This relies on having a native context. Not clear
|
| + |
| + interpreter::BytecodeArrayBuilder builder(isolate(), zone()); |
| + builder.set_locals_count(4); |
| + builder.set_context_count(0); |
| + builder.set_parameter_count(3); |
| + builder.LoadLiteral(Handle<Object>::cast(shared_info)) |
| + .CreateClosure(pretenured_flag) |
| + .Return(); |
| + |
| + Graph* graph = GetCompletedGraph(builder.ToBytecodeArray()); |
| + Node* start = graph->start(); |
| + Node* ret = graph->end()->InputAt(0); |
| + |
| + CreateClosureParameters parameters(shared_info, pretenured_flag); |
| + Matcher<Node*> create_closure = |
| + IsCreateClosure(IsCreateClosureParameters(¶meters), start, start); |
| + EXPECT_THAT(ret, IsReturn(create_closure, create_closure, start)); |
| + } |
| +} |
| + |
| } // namespace compiler |
| } // namespace internal |
| } // namespace v8 |