Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Unified Diff: test/cctest/interpreter/test-source-positions.cc

Issue 2038323002: [interpreter] Filter expression positions at source. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@oth-0060-source-position-testing
Patch Set: Rebase Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/cctest/interpreter/bytecode_expectations/WideRegisters.golden ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/interpreter/test-source-positions.cc
diff --git a/test/cctest/interpreter/test-source-positions.cc b/test/cctest/interpreter/test-source-positions.cc
index 20bb4404d9cbb652c3cb934bd81a5851a6e132f7..d50bb62b2b31ca9c4de77d112dd27c0020695419 100644
--- a/test/cctest/interpreter/test-source-positions.cc
+++ b/test/cctest/interpreter/test-source-positions.cc
@@ -19,9 +19,11 @@ namespace interpreter {
// Flags enabling optimizations that change generated bytecode array.
// Format is <command-line flag> <flag name> <bit index>
-#define OPTIMIZATION_FLAGS(V) \
- V(FLAG_ignition_reo, kUseReo, 0) \
- V(FLAG_ignition_peephole, kUsePeephole, 1)
+#define OPTIMIZATION_FLAGS(V) \
+ V(FLAG_ignition_reo, kUseReo, 0) \
+ V(FLAG_ignition_peephole, kUsePeephole, 1) \
+ V(FLAG_ignition_filter_expression_positions, \
+ kUseUseFilterExpressionPositions, 2)
#define DECLARE_BIT(_, Name, BitIndex) static const int Name = 1 << BitIndex;
OPTIMIZATION_FLAGS(DECLARE_BIT)
@@ -30,73 +32,89 @@ OPTIMIZATION_FLAGS(DECLARE_BIT)
// Test cases source positions are checked for. Please ensure all
// combinations of flags are present here. This is done manually
// because it provides easier to comprehend failure case for humans.
-#define TEST_CASES(V) \
- V(UsingReo, kUseReo) \
- V(UsingReoAndPeephole, kUseReo | kUsePeephole) \
- V(UsingPeephole, kUsePeephole)
-
-static const char* kTestScripts[] = {
- "var x = (y = 3) + (x = y); return x + y;",
-
- "var x = 55;\n"
- "var y = x + (x = 1) + (x = 2) + (x = 3);\n"
- "return y;",
-
- "var x = 10; return x >>> 3;",
-
- "var x = 0; return x || (1, 2, 3);",
-
- "return a || (a, b, a, b, c = 5, 3); ",
-
- "var a = 3; var b = 4; a = b; b = a; a = b; return a;",
-
- "var a = 1; return [[a, 2], [a + 2]];",
-
- "var a = 1; if (a || a < 0) { return 1; }",
-
- "var b;"
- "b = a.name;"
- "b = a.name;"
- "a.name = a;"
- "b = a.name;"
- "a.name = a;"
- "return b;",
-
- "var sum = 0;\n"
- "outer: {\n"
- " for (var x = 0; x < 10; ++x) {\n"
- " for (var y = 0; y < 3; ++y) {\n"
- " ++sum;\n"
- " if (x + y == 12) { break outer; }\n"
- " }\n"
- " }\n"
- "}\n"
- "return sum;\n",
-
- "var a = 1;"
- "switch (a) {"
- " case 1: return a * a + 1;"
- " case 1: break;"
- " case 2: return (a = 3) * a + (a = 4);"
- " case 3:"
- "}"
- "return a;",
-
- "for (var p of [0, 1, 2]) {}",
-
- "var x = { 'a': 1, 'b': 2 };"
- "for (x['a'] of [1,2,3]) { return x['a']; }",
-
- "while (x == 4) {\n"
- " var y = x + 1;\n"
- " if (y == 2) break;\n"
- " for (z['a'] of [0]) {\n"
- " x += (x *= 3) + y;"
- " }\n"
- "}\n",
-
- "function g(a, b) { return a.func(b + b, b); }\n"
- "g(new (function Obj() { this.func = function() { return; }})(), 1)\n"};
+#define TEST_CASES(V) \
+ V(UsingReo, kUseReo) \
+ V(UsingPeephole, kUsePeephole) \
+ V(UsingReoAndPeephole, kUseReo | kUsePeephole) \
+ V(UsingUseFilterExpressionPositions, kUseUseFilterExpressionPositions) \
+ V(UsingReoAndUseFilterExpressionPositions, \
+ kUseReo | kUseUseFilterExpressionPositions) \
+ V(UsingPeepholeAndUseFilterExpressionPositions, \
+ kUsePeephole | kUseUseFilterExpressionPositions) \
+ V(UsingAllOptimizations, \
+ kUseReo | kUsePeephole | kUseUseFilterExpressionPositions)
+
+struct TestCaseData {
+ TestCaseData(const char* const script,
+ const char* const declaration_parameters = "",
+ const char* const arguments = "")
+ : script_(script),
+ declaration_parameters_(declaration_parameters),
+ arguments_(arguments) {}
+
+ const char* const script() const { return script_; }
+ const char* const declaration_parameters() const {
+ return declaration_parameters_;
+ }
+ const char* const arguments() const { return arguments_; }
+
+ private:
+ TestCaseData();
+
+ const char* const script_;
+ const char* const declaration_parameters_;
+ const char* const arguments_;
+};
+
+static const TestCaseData kTestCaseData[] = {
+ {"var x = (y = 3) + (x = y); return x + y;"},
+ {"var x = 55;\n"
+ "var y = x + (x = 1) + (x = 2) + (x = 3);\n"
+ "return y;"},
+ {"var x = 10; return x >>> 3;\n"},
+ {"var x = 0; return x || (1, 2, 3);\n"},
+ {"return a || (a, b, a, b, c = 5, 3);\n"},
+ {"var a = 3; var b = 4; a = b; b = a; a = b; return a;\n"},
+ {"var a = 1; return [[a, 2], [a + 2]];\n"},
+ {"var a = 1; if (a || a < 0) { return 1; }\n"},
+ {"var b;"
+ "b = a.name;"
+ "b = a.name;"
+ "a.name = a;"
+ "b = a.name;"
+ "a.name = a;"
+ "return b;"},
+ {"var sum = 0;\n"
+ "outer: {\n"
+ " for (var x = 0; x < 10; ++x) {\n"
+ " for (var y = 0; y < 3; ++y) {\n"
+ " ++sum;\n"
+ " if (x + y == 12) { break outer; }\n"
+ " }\n"
+ " }\n"
+ "}\n"
+ "return sum;\n"},
+ {"var a = 1;"
+ "switch (a) {"
+ " case 1: return a * a + 1;"
+ " case 1: break;"
+ " case 2: return (a = 3) * a + (a = 4);"
+ " case 3:"
+ "}"
+ "return a;"},
+ {"for (var p of [0, 1, 2]) {}"},
+ {"var x = { 'a': 1, 'b': 2 };"
+ "for (x['a'] of [1,2,3]) { return x['a']; }"},
+ {"while (x == 4) {\n"
+ " var y = x + 1;\n"
+ " if (y == 2) break;\n"
+ " for (z['a'] of [0]) {\n"
+ " x += (x *= 3) + y;"
+ " }\n"
+ "}\n"},
+ {"function g(a, b) { return a.func(b + b, b); }\n"
+ "g(new (function Obj() { this.func = function() { return; }})(), 1)\n"},
+ {"return some_global[name];", "name", "'a'"}};
class OptimizedBytecodeSourcePositionTester final {
public:
@@ -116,8 +134,8 @@ class OptimizedBytecodeSourcePositionTester final {
}
bool SourcePositionsMatch(int optimization_bitmap, const char* function_body,
- const char* function_decl_params = "",
- const char* function_args = "");
+ const char* function_decl_params,
+ const char* function_args);
private:
Handle<BytecodeArray> MakeBytecode(int optimization_bitmap,
@@ -220,8 +238,10 @@ void TestSourcePositionsEquivalent(int optimization_bitmap) {
handles.main_isolate()->interpreter()->Initialize();
OptimizedBytecodeSourcePositionTester tester(handles.main_isolate());
- for (auto test_script : kTestScripts) {
- CHECK(tester.SourcePositionsMatch(optimization_bitmap, test_script));
+ for (auto test_case_data : kTestCaseData) {
+ CHECK(tester.SourcePositionsMatch(
+ optimization_bitmap, test_case_data.script(),
+ test_case_data.declaration_parameters(), test_case_data.arguments()));
}
}
« no previous file with comments | « test/cctest/interpreter/bytecode_expectations/WideRegisters.golden ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698