| Index: src/objects.cc | 
| diff --git a/src/objects.cc b/src/objects.cc | 
| index 5e772ab93efbebf9493ed26638c5aaa513d047c5..10ae80a37f0578790340843bc85ba14935a277f5 100644 | 
| --- a/src/objects.cc | 
| +++ b/src/objects.cc | 
| @@ -8764,20 +8764,18 @@ static void CalculateLineEndsImpl(Isolate* isolate, | 
| Vector<const SourceChar> src, | 
| bool include_ending_line) { | 
| const int src_len = src.length(); | 
| -  StringSearch<uint8_t, SourceChar> search(isolate, STATIC_CHAR_VECTOR("\n")); | 
| - | 
| -  // Find and record line ends. | 
| -  int position = 0; | 
| -  while (position != -1 && position < src_len) { | 
| -    position = search.Search(src, position); | 
| -    if (position != -1) { | 
| -      line_ends->Add(position); | 
| -      position++; | 
| -    } else if (include_ending_line) { | 
| -      // Even if the last line misses a line end, it is counted. | 
| -      line_ends->Add(src_len); | 
| -      return; | 
| -    } | 
| +  UnicodeCache* cache = isolate->unicode_cache(); | 
| +  for (int i = 0; i < src_len - 1; i++) { | 
| +    SourceChar current = src[i]; | 
| +    SourceChar next = src[i + 1]; | 
| +    if (cache->IsLineTerminatorSequence(current, next)) line_ends->Add(i); | 
| +  } | 
| + | 
| +  if (src_len > 0 && cache->IsLineTerminatorSequence(src[src_len - 1], 0)) { | 
| +    line_ends->Add(src_len - 1); | 
| +  } else if (include_ending_line) { | 
| +    // Even if the last line misses a line end, it is counted. | 
| +    line_ends->Add(src_len); | 
| } | 
| } | 
|  | 
|  |