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

Side by Side Diff: src/objects.cc

Issue 1053563002: Revert of Correctly compute line numbers in functions from the function constructor. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Added regression test Created 5 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « src/messages.js ('k') | src/runtime/runtime.h » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 <iomanip> 5 #include <iomanip>
6 #include <sstream> 6 #include <sstream>
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/accessors.h" 10 #include "src/accessors.h"
(...skipping 10349 matching lines...) Expand 10 before | Expand all | Expand 10 after
10360 DisallowHeapAllocation no_allocation; 10360 DisallowHeapAllocation no_allocation;
10361 FixedArray* line_ends_array = FixedArray::cast(script->line_ends()); 10361 FixedArray* line_ends_array = FixedArray::cast(script->line_ends());
10362 line_number = line_number - script->line_offset()->value(); 10362 line_number = line_number - script->line_offset()->value();
10363 if (line_number == 0) return code_pos + script->column_offset()->value(); 10363 if (line_number == 0) return code_pos + script->column_offset()->value();
10364 int prev_line_end_pos = 10364 int prev_line_end_pos =
10365 Smi::cast(line_ends_array->get(line_number - 1))->value(); 10365 Smi::cast(line_ends_array->get(line_number - 1))->value();
10366 return code_pos - (prev_line_end_pos + 1); 10366 return code_pos - (prev_line_end_pos + 1);
10367 } 10367 }
10368 10368
10369 10369
10370 int Script::GetLineNumberWithArray(int position) { 10370 int Script::GetLineNumberWithArray(int code_pos) {
10371 DisallowHeapAllocation no_allocation; 10371 DisallowHeapAllocation no_allocation;
10372 FixedArray* line_ends = FixedArray::cast(this->line_ends()); 10372 DCHECK(line_ends()->IsFixedArray());
10373 int upper = line_ends->length() - 1; 10373 FixedArray* line_ends_array = FixedArray::cast(line_ends());
10374 if (upper < 0) return -1; 10374 int line_ends_len = line_ends_array->length();
10375 int offset = line_offset()->value(); 10375 if (line_ends_len == 0) return -1;
10376 10376
10377 if (position > Smi::cast(line_ends->get(upper))->value()) { 10377 if ((Smi::cast(line_ends_array->get(0)))->value() >= code_pos) {
10378 return upper + 1 + offset; 10378 return line_offset()->value();
10379 } 10379 }
10380 if (position <= Smi::cast(line_ends->get(0))->value()) return offset;
10381 10380
10382 int lower = 1; 10381 int left = 0;
10383 // Binary search. 10382 int right = line_ends_len;
10384 while (true) { 10383 while (int half = (right - left) / 2) {
10385 int mid = (lower + upper) / 2; 10384 if ((Smi::cast(line_ends_array->get(left + half)))->value() > code_pos) {
10386 if (position <= Smi::cast(line_ends->get(mid - 1))->value()) { 10385 right -= half;
10387 upper = mid - 1;
10388 } else if (position > Smi::cast(line_ends->get(mid))->value()) {
10389 lower = mid + 1;
10390 } else { 10386 } else {
10391 return mid + offset; 10387 left += half;
10392 } 10388 }
10393 } 10389 }
10394 return -1; 10390 return right + line_offset()->value();
10395 } 10391 }
10396 10392
10397 10393
10398 int Script::GetLineNumber(Handle<Script> script, int code_pos) { 10394 int Script::GetLineNumber(Handle<Script> script, int code_pos) {
10399 InitLineEnds(script); 10395 InitLineEnds(script);
10400 return script->GetLineNumberWithArray(code_pos); 10396 return script->GetLineNumberWithArray(code_pos);
10401 } 10397 }
10402 10398
10403 10399
10404 int Script::GetLineNumber(int code_pos) { 10400 int Script::GetLineNumber(int code_pos) {
(...skipping 6780 matching lines...) Expand 10 before | Expand all | Expand 10 after
17185 CompilationInfo* info) { 17181 CompilationInfo* info) {
17186 Handle<DependentCode> codes = DependentCode::InsertCompilationInfo( 17182 Handle<DependentCode> codes = DependentCode::InsertCompilationInfo(
17187 handle(cell->dependent_code(), info->isolate()), 17183 handle(cell->dependent_code(), info->isolate()),
17188 DependentCode::kPropertyCellChangedGroup, info->object_wrapper()); 17184 DependentCode::kPropertyCellChangedGroup, info->object_wrapper());
17189 if (*codes != cell->dependent_code()) cell->set_dependent_code(*codes); 17185 if (*codes != cell->dependent_code()) cell->set_dependent_code(*codes);
17190 info->dependencies(DependentCode::kPropertyCellChangedGroup)->Add( 17186 info->dependencies(DependentCode::kPropertyCellChangedGroup)->Add(
17191 cell, info->zone()); 17187 cell, info->zone());
17192 } 17188 }
17193 17189
17194 } } // namespace v8::internal 17190 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/messages.js ('k') | src/runtime/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698