Chromium Code Reviews

Unified Diff: test/unittests/compiler/bytecode-graph-builder-unittest.cc

Issue 1437873002: [Interpreter] Add support for Call bytecode to bytecode graph builder. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@mythri_load
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
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

Powered by Google App Engine