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 2f4641174c3292a9bef6f9dc7c551cb4ab9f0af5..7a815ca0c886f624bbc19e577aeb9f9cba9a707f 100644 |
--- a/test/unittests/compiler/bytecode-graph-builder-unittest.cc |
+++ b/test/unittests/compiler/bytecode-graph-builder-unittest.cc |
@@ -485,6 +485,54 @@ TEST_F(BytecodeGraphBuilderTest, NamedLoadStrictWide) { |
EXPECT_THAT(ret, IsReturn(load_named_matcher_wide, _, _)); |
} |
+ |
+TEST_F(BytecodeGraphBuilderTest, CallProperty0) { |
+ const char* code_snippet = |
+ "function f(p1) {return p1.func();}; f({func(){}});"; |
+ GraphGeneratorHelper helper(isolate(), zone(), code_snippet); |
+ Graph* graph = helper.GetCompletedGraph(); |
+ |
+ Node* ret = graph->end()->InputAt(0); |
+ Node* start = graph->start(); |
+ |
+ Handle<Name> name = GraphGeneratorHelper::GetName(isolate(), "func"); |
+ Matcher<Node*> feedback_vector_matcher = IsFeedbackVector(start, start); |
+ Matcher<Node*> load_named_matcher = IsJSLoadNamed( |
+ name, IsParameter(1), feedback_vector_matcher, start, start); |
+ std::vector<Matcher<Node*>> call_inputs; |
+ call_inputs.push_back(load_named_matcher); |
+ call_inputs.push_back(IsParameter(1)); |
+ Matcher<Node*> call_matcher = |
+ IsJSCallFunction(call_inputs, load_named_matcher, IsIfSuccess(_)); |
+ |
+ EXPECT_THAT(ret, IsReturn(call_matcher, _, _)); |
+} |
+ |
+ |
+TEST_F(BytecodeGraphBuilderTest, CallProperty2) { |
+ const char* code_snippet = |
+ "function f(p1, p2, p3) {return p1.func(p2, p3);}; f({func(a){}}, 1, 2);"; |
+ GraphGeneratorHelper helper(isolate(), zone(), code_snippet); |
+ Graph* graph = helper.GetCompletedGraph(); |
+ |
+ Node* ret = graph->end()->InputAt(0); |
+ Node* start = graph->start(); |
+ |
+ Handle<Name> name = GraphGeneratorHelper::GetName(isolate(), "func"); |
+ Matcher<Node*> feedback_vector_matcher = IsFeedbackVector(start, start); |
+ Matcher<Node*> load_named_matcher = IsJSLoadNamed( |
+ name, IsParameter(1), feedback_vector_matcher, start, start); |
+ std::vector<Matcher<Node*>> call_inputs; |
+ call_inputs.push_back(load_named_matcher); |
+ call_inputs.push_back(IsParameter(1)); |
+ call_inputs.push_back(IsParameter(2)); |
+ call_inputs.push_back(IsParameter(3)); |
+ Matcher<Node*> call_matcher = |
+ IsJSCallFunction(call_inputs, load_named_matcher, IsIfSuccess(_)); |
+ |
+ EXPECT_THAT(ret, IsReturn(call_matcher, _, _)); |
+} |
+ |
} // namespace compiler |
} // namespace internal |
} // namespace v8 |