OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 | 261 |
262 void Comparator::CalculateDifference(Comparator::Input* input, | 262 void Comparator::CalculateDifference(Comparator::Input* input, |
263 Comparator::Output* result_writer) { | 263 Comparator::Output* result_writer) { |
264 Differencer differencer(input); | 264 Differencer differencer(input); |
265 differencer.Initialize(); | 265 differencer.Initialize(); |
266 differencer.FillTable(); | 266 differencer.FillTable(); |
267 differencer.SaveResult(result_writer); | 267 differencer.SaveResult(result_writer); |
268 } | 268 } |
269 | 269 |
270 | 270 |
271 static bool CompareSubstrings(Isolate* isolate, Handle<String> s1, int pos1, | 271 static bool CompareSubstrings(Handle<String> s1, int pos1, |
272 Handle<String> s2, int pos2, int len) { | 272 Handle<String> s2, int pos2, int len) { |
273 StringInputBuffer& buf1 = *isolate->liveedit_compare_substrings_buf1(); | |
274 StringInputBuffer& buf2 = *isolate->liveedit_compare_substrings_buf2(); | |
275 buf1.Reset(*s1); | |
276 buf1.Seek(pos1); | |
277 buf2.Reset(*s2); | |
278 buf2.Seek(pos2); | |
279 for (int i = 0; i < len; i++) { | 273 for (int i = 0; i < len; i++) { |
280 ASSERT(buf1.has_more() && buf2.has_more()); | 274 if (s1->Get(i + pos1) != s2->Get(i + pos2)) { |
281 if (buf1.GetNext() != buf2.GetNext()) { | |
282 return false; | 275 return false; |
283 } | 276 } |
284 } | 277 } |
285 return true; | 278 return true; |
286 } | 279 } |
287 | 280 |
288 | 281 |
289 // A helper class that writes chunk numbers into JSArray. | 282 // A helper class that writes chunk numbers into JSArray. |
290 // Each chunk is stored as 3 array elements: (pos1_begin, pos1_end, pos2_end). | 283 // Each chunk is stored as 3 array elements: (pos1_begin, pos1_end, pos2_end). |
291 class CompareOutputArrayWriter { | 284 class CompareOutputArrayWriter { |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 | 396 |
404 int GetPosAfterNewLine(int index) { | 397 int GetPosAfterNewLine(int index) { |
405 return Smi::cast(ends_array_->get(index))->value() + 1; | 398 return Smi::cast(ends_array_->get(index))->value() + 1; |
406 } | 399 } |
407 }; | 400 }; |
408 | 401 |
409 | 402 |
410 // Represents 2 strings as 2 arrays of lines. | 403 // Represents 2 strings as 2 arrays of lines. |
411 class LineArrayCompareInput : public Comparator::Input { | 404 class LineArrayCompareInput : public Comparator::Input { |
412 public: | 405 public: |
413 LineArrayCompareInput(Isolate* isolate, Handle<String> s1, Handle<String> s2, | 406 LineArrayCompareInput(Handle<String> s1, Handle<String> s2, |
414 LineEndsWrapper line_ends1, LineEndsWrapper line_ends2) | 407 LineEndsWrapper line_ends1, LineEndsWrapper line_ends2) |
415 : isolate_(isolate), s1_(s1), s2_(s2), line_ends1_(line_ends1), | 408 : s1_(s1), s2_(s2), line_ends1_(line_ends1), |
416 line_ends2_(line_ends2) { | 409 line_ends2_(line_ends2) { |
417 } | 410 } |
418 int getLength1() { | 411 int getLength1() { |
419 return line_ends1_.length(); | 412 return line_ends1_.length(); |
420 } | 413 } |
421 int getLength2() { | 414 int getLength2() { |
422 return line_ends2_.length(); | 415 return line_ends2_.length(); |
423 } | 416 } |
424 bool equals(int index1, int index2) { | 417 bool equals(int index1, int index2) { |
425 int line_start1 = line_ends1_.GetLineStart(index1); | 418 int line_start1 = line_ends1_.GetLineStart(index1); |
426 int line_start2 = line_ends2_.GetLineStart(index2); | 419 int line_start2 = line_ends2_.GetLineStart(index2); |
427 int line_end1 = line_ends1_.GetLineEnd(index1); | 420 int line_end1 = line_ends1_.GetLineEnd(index1); |
428 int line_end2 = line_ends2_.GetLineEnd(index2); | 421 int line_end2 = line_ends2_.GetLineEnd(index2); |
429 int len1 = line_end1 - line_start1; | 422 int len1 = line_end1 - line_start1; |
430 int len2 = line_end2 - line_start2; | 423 int len2 = line_end2 - line_start2; |
431 if (len1 != len2) { | 424 if (len1 != len2) { |
432 return false; | 425 return false; |
433 } | 426 } |
434 return CompareSubstrings(isolate_, s1_, line_start1, s2_, line_start2, | 427 return CompareSubstrings(s1_, line_start1, s2_, line_start2, |
435 len1); | 428 len1); |
436 } | 429 } |
437 | 430 |
438 private: | 431 private: |
439 Isolate* isolate_; | |
440 Handle<String> s1_; | 432 Handle<String> s1_; |
441 Handle<String> s2_; | 433 Handle<String> s2_; |
442 LineEndsWrapper line_ends1_; | 434 LineEndsWrapper line_ends1_; |
443 LineEndsWrapper line_ends2_; | 435 LineEndsWrapper line_ends2_; |
444 }; | 436 }; |
445 | 437 |
446 | 438 |
447 // Stores compare result in JSArray. For each chunk tries to conduct | 439 // Stores compare result in JSArray. For each chunk tries to conduct |
448 // a fine-grained nested diff token-wise. | 440 // a fine-grained nested diff token-wise. |
449 class TokenizingLineArrayCompareOutput : public Comparator::Output { | 441 class TokenizingLineArrayCompareOutput : public Comparator::Output { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
485 CompareOutputArrayWriter array_writer_; | 477 CompareOutputArrayWriter array_writer_; |
486 LineEndsWrapper line_ends1_; | 478 LineEndsWrapper line_ends1_; |
487 LineEndsWrapper line_ends2_; | 479 LineEndsWrapper line_ends2_; |
488 Handle<String> s1_; | 480 Handle<String> s1_; |
489 Handle<String> s2_; | 481 Handle<String> s2_; |
490 }; | 482 }; |
491 | 483 |
492 | 484 |
493 Handle<JSArray> LiveEdit::CompareStrings(Handle<String> s1, | 485 Handle<JSArray> LiveEdit::CompareStrings(Handle<String> s1, |
494 Handle<String> s2) { | 486 Handle<String> s2) { |
| 487 s1 = FlattenGetString(s1); |
| 488 s2 = FlattenGetString(s2); |
| 489 |
495 LineEndsWrapper line_ends1(s1); | 490 LineEndsWrapper line_ends1(s1); |
496 LineEndsWrapper line_ends2(s2); | 491 LineEndsWrapper line_ends2(s2); |
497 | 492 |
498 LineArrayCompareInput | 493 LineArrayCompareInput input(s1, s2, line_ends1, line_ends2); |
499 input(Isolate::Current(), s1, s2, line_ends1, line_ends2); | |
500 TokenizingLineArrayCompareOutput output(line_ends1, line_ends2, s1, s2); | 494 TokenizingLineArrayCompareOutput output(line_ends1, line_ends2, s1, s2); |
501 | 495 |
502 Comparator::CalculateDifference(&input, &output); | 496 Comparator::CalculateDifference(&input, &output); |
503 | 497 |
504 return output.GetResult(); | 498 return output.GetResult(); |
505 } | 499 } |
506 | 500 |
507 | 501 |
508 static void CompileScriptForTracker(Isolate* isolate, Handle<Script> script) { | 502 static void CompileScriptForTracker(Isolate* isolate, Handle<Script> script) { |
509 // TODO(635): support extensions. | 503 // TODO(635): support extensions. |
(...skipping 1174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1684 | 1678 |
1685 bool LiveEditFunctionTracker::IsActive() { | 1679 bool LiveEditFunctionTracker::IsActive() { |
1686 return false; | 1680 return false; |
1687 } | 1681 } |
1688 | 1682 |
1689 #endif // ENABLE_DEBUGGER_SUPPORT | 1683 #endif // ENABLE_DEBUGGER_SUPPORT |
1690 | 1684 |
1691 | 1685 |
1692 | 1686 |
1693 } } // namespace v8::internal | 1687 } } // namespace v8::internal |
OLD | NEW |