| Index: src/objects.cc
|
| ===================================================================
|
| --- src/objects.cc (revision 1858)
|
| +++ src/objects.cc (working copy)
|
| @@ -3305,13 +3305,6 @@
|
| }
|
| ASSERT(string_tag == kExternalStringTag);
|
| ExternalTwoByteString* ext = ExternalTwoByteString::cast(string);
|
| - // This is a workaround for Chromium bug 9746: http://crbug.com/9746
|
| - // For external strings with a deleted resource we return a special
|
| - // Vector which will not compare to any string when doing SymbolTable
|
| - // lookups.
|
| - if (ext->resource() == NULL) {
|
| - return Vector<const uc16>(NULL, length);
|
| - }
|
| const uc16* start =
|
| reinterpret_cast<const uc16*>(ext->resource()->data());
|
| return Vector<const uc16>(start + offset, length);
|
| @@ -4128,18 +4121,6 @@
|
| }
|
|
|
|
|
| -// This is a workaround for Chromium bug 9746: http://crbug.com/9746
|
| -// Returns true if this Vector matches the problem exposed in the bug.
|
| -template <typename T>
|
| -static bool CheckVectorForBug9746(Vector<T> vec) {
|
| - // The problem is that somehow external string entries in the symbol
|
| - // table can have their resources collected while they are still in the
|
| - // table. This should not happen according to the test in the function
|
| - // DisposeExternalString in api.cc, but we have evidence that it does.
|
| - return (vec.start() == NULL) ? true : false;
|
| -}
|
| -
|
| -
|
| static StringInputBuffer string_compare_buffer_b;
|
|
|
|
|
| @@ -4150,9 +4131,7 @@
|
| VectorIterator<char> ib(b->ToAsciiVector());
|
| return CompareStringContents(ia, &ib);
|
| } else {
|
| - Vector<const uc16> vb = b->ToUC16Vector();
|
| - if (CheckVectorForBug9746(vb)) return false;
|
| - VectorIterator<uc16> ib(vb);
|
| + VectorIterator<uc16> ib(b->ToUC16Vector());
|
| return CompareStringContents(ia, &ib);
|
| }
|
| } else {
|
| @@ -4194,9 +4173,7 @@
|
| return CompareRawStringContents(vec1, vec2);
|
| } else {
|
| VectorIterator<char> buf1(vec1);
|
| - Vector<const uc16> vec2 = other->ToUC16Vector();
|
| - if (CheckVectorForBug9746(vec2)) return false;
|
| - VectorIterator<uc16> ib(vec2);
|
| + VectorIterator<uc16> ib(other->ToUC16Vector());
|
| return CompareStringContents(&buf1, &ib);
|
| }
|
| } else {
|
| @@ -4206,15 +4183,13 @@
|
| }
|
| } else {
|
| Vector<const uc16> vec1 = this->ToUC16Vector();
|
| - if (CheckVectorForBug9746(vec1)) return false;
|
| if (other->IsFlat()) {
|
| if (other->IsAsciiRepresentation()) {
|
| VectorIterator<uc16> buf1(vec1);
|
| VectorIterator<char> ib(other->ToAsciiVector());
|
| return CompareStringContents(&buf1, &ib);
|
| } else {
|
| - Vector<const uc16> vec2 = other->ToUC16Vector();
|
| - if (CheckVectorForBug9746(vec2)) return false;
|
| + Vector<const uc16> vec2(other->ToUC16Vector());
|
| return CompareRawStringContents(vec1, vec2);
|
| }
|
| } else {
|
| @@ -4259,18 +4234,6 @@
|
|
|
|
|
| bool String::IsEqualTo(Vector<const char> str) {
|
| - // This is a workaround for Chromium bug 9746: http://crbug.com/9746
|
| - // The problem is that somehow external string entries in the symbol
|
| - // table can have their resources deleted while they are still in the
|
| - // table. This should not happen according to the test in the function
|
| - // DisposeExternalString in api.cc but we have evidence that it does.
|
| - // Thus we add this bailout here.
|
| - StringShape shape(this);
|
| - if (shape.IsExternalTwoByte()) {
|
| - ExternalTwoByteString* ext = ExternalTwoByteString::cast(this);
|
| - if (ext->resource() == NULL) return false;
|
| - }
|
| -
|
| int slen = length();
|
| Access<Scanner::Utf8Decoder> decoder(Scanner::utf8_decoder());
|
| decoder->Reset(str.start(), str.length());
|
|
|