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()); |