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

Side by Side Diff: test/cctest/interpreter/source-position-matcher.cc

Issue 2095893002: Use source position table for unoptimized code. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix gc mole Created 4 years, 5 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 unified diff | Download patch
« no previous file with comments | « test/cctest/interpreter/source-position-matcher.h ('k') | test/unittests/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "test/cctest/interpreter/source-position-matcher.h" 5 #include "test/cctest/interpreter/source-position-matcher.h"
6 6
7 #include "src/objects-inl.h" 7 #include "src/objects-inl.h"
8 #include "src/objects.h" 8 #include "src/objects.h"
9 9
10 namespace v8 { 10 namespace v8 {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 return false; 80 return false;
81 } 81 }
82 82
83 if (HasNewExpressionPositionsInOptimized(&original_expression_entries, 83 if (HasNewExpressionPositionsInOptimized(&original_expression_entries,
84 &optimized_expression_entries)) { 84 &optimized_expression_entries)) {
85 return false; 85 return false;
86 } 86 }
87 87
88 StripUnneededExpressionPositions(original_bytecode, 88 StripUnneededExpressionPositions(original_bytecode,
89 &original_expression_entries, 89 &original_expression_entries,
90 original.bytecode_offset()); 90 original.code_offset());
91 StripUnneededExpressionPositions(optimized_bytecode, 91 StripUnneededExpressionPositions(optimized_bytecode,
92 &optimized_expression_entries, 92 &optimized_expression_entries,
93 optimized.bytecode_offset()); 93 optimized.code_offset());
94 94
95 if (!CompareExpressionPositions(&original_expression_entries, 95 if (!CompareExpressionPositions(&original_expression_entries,
96 &optimized_expression_entries)) { 96 &optimized_expression_entries)) {
97 // Message logged in CompareExpressionPositions(). 97 // Message logged in CompareExpressionPositions().
98 return false; 98 return false;
99 } 99 }
100 100
101 // Check original and optimized have matching source positions. 101 // Check original and optimized have matching source positions.
102 if (original.source_position() != optimized.source_position()) { 102 if (original.source_position() != optimized.source_position()) {
103 return false; 103 return false;
104 } 104 }
105 105
106 if (original.bytecode_offset() < last_original_bytecode_offset) { 106 if (original.code_offset() < last_original_bytecode_offset) {
107 return false; 107 return false;
108 } 108 }
109 last_original_bytecode_offset = original.bytecode_offset(); 109 last_original_bytecode_offset = original.code_offset();
110 110
111 if (optimized.bytecode_offset() < last_optimized_bytecode_offset) { 111 if (optimized.code_offset() < last_optimized_bytecode_offset) {
112 return false; 112 return false;
113 } 113 }
114 last_optimized_bytecode_offset = optimized.bytecode_offset(); 114 last_optimized_bytecode_offset = optimized.code_offset();
115 115
116 // TODO(oth): Can we compare statement positions are semantically 116 // TODO(oth): Can we compare statement positions are semantically
117 // equivalent? e.g. before a bytecode that has debugger observable 117 // equivalent? e.g. before a bytecode that has debugger observable
118 // effects. This is likely non-trivial. 118 // effects. This is likely non-trivial.
119 } 119 }
120 120
121 return true; 121 return true;
122 } 122 }
123 123
124 bool SourcePositionMatcher::HasNewExpressionPositionsInOptimized( 124 bool SourcePositionMatcher::HasNewExpressionPositionsInOptimized(
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 void SourcePositionMatcher::StripUnneededExpressionPositions( 163 void SourcePositionMatcher::StripUnneededExpressionPositions(
164 Handle<BytecodeArray> bytecode_array, 164 Handle<BytecodeArray> bytecode_array,
165 std::vector<PositionTableEntry>* expression_positions, 165 std::vector<PositionTableEntry>* expression_positions,
166 int next_statement_bytecode_offset) { 166 int next_statement_bytecode_offset) {
167 size_t j = 0; 167 size_t j = 0;
168 for (size_t i = 0; i < expression_positions->size(); ++i) { 168 for (size_t i = 0; i < expression_positions->size(); ++i) {
169 CHECK(expression_positions->at(i).source_position > 0 && 169 CHECK(expression_positions->at(i).source_position > 0 &&
170 !expression_positions->at(i).is_statement); 170 !expression_positions->at(i).is_statement);
171 int bytecode_end = (i == expression_positions->size() - 1) 171 int bytecode_end = (i == expression_positions->size() - 1)
172 ? next_statement_bytecode_offset 172 ? next_statement_bytecode_offset
173 : expression_positions->at(i + 1).bytecode_offset; 173 : expression_positions->at(i + 1).code_offset;
174 if (ExpressionPositionIsNeeded(bytecode_array, 174 if (ExpressionPositionIsNeeded(bytecode_array,
175 expression_positions->at(i).bytecode_offset, 175 expression_positions->at(i).code_offset,
176 bytecode_end)) { 176 bytecode_end)) {
177 expression_positions->at(j++) = expression_positions->at(i); 177 expression_positions->at(j++) = expression_positions->at(i);
178 } 178 }
179 } 179 }
180 expression_positions->resize(j); 180 expression_positions->resize(j);
181 } 181 }
182 182
183 void SourcePositionMatcher::AdvanceBytecodeIterator( 183 void SourcePositionMatcher::AdvanceBytecodeIterator(
184 BytecodeArrayIterator* iterator, int bytecode_offset) { 184 BytecodeArrayIterator* iterator, int bytecode_offset) {
185 while (iterator->current_offset() != bytecode_offset) { 185 while (iterator->current_offset() != bytecode_offset) {
(...skipping 20 matching lines...) Expand all
206 206
207 void SourcePositionMatcher::MoveToNextStatement( 207 void SourcePositionMatcher::MoveToNextStatement(
208 SourcePositionTableIterator* iterator, 208 SourcePositionTableIterator* iterator,
209 std::vector<PositionTableEntry>* positions) { 209 std::vector<PositionTableEntry>* positions) {
210 iterator->Advance(); 210 iterator->Advance();
211 positions->clear(); 211 positions->clear();
212 while (!iterator->done()) { 212 while (!iterator->done()) {
213 if (iterator->is_statement()) { 213 if (iterator->is_statement()) {
214 break; 214 break;
215 } 215 }
216 positions->push_back({iterator->bytecode_offset(), 216 positions->push_back({iterator->code_offset(), iterator->source_position(),
217 iterator->source_position(),
218 iterator->is_statement()}); 217 iterator->is_statement()});
219 iterator->Advance(); 218 iterator->Advance();
220 } 219 }
221 } 220 }
222 221
223 } // namespace interpreter 222 } // namespace interpreter
224 } // namespace internal 223 } // namespace internal
225 } // namespace v8 224 } // namespace v8
OLDNEW
« no previous file with comments | « test/cctest/interpreter/source-position-matcher.h ('k') | test/unittests/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698