Index: test/cctest/test-strings.cc |
=================================================================== |
--- test/cctest/test-strings.cc (revision 1858) |
+++ test/cctest/test-strings.cc (working copy) |
@@ -394,16 +394,14 @@ |
public: |
TwoByteResource(const uint16_t* data, size_t length, bool* destructed) |
: data_(data), length_(length), destructed_(destructed) { |
- if (destructed_ != NULL) { |
- *destructed_ = false; |
- } |
+ CHECK_NE(destructed, NULL); |
+ *destructed_ = false; |
} |
virtual ~TwoByteResource() { |
- if (destructed_ != NULL) { |
- CHECK(!*destructed_); |
- *destructed_ = true; |
- } |
+ CHECK_NE(destructed_, NULL); |
+ CHECK(!*destructed_); |
+ *destructed_ = true; |
} |
const uint16_t* data() const { return data_; } |
@@ -416,49 +414,6 @@ |
}; |
-TEST(ExternalCrBug9746) { |
- InitializeVM(); |
- v8::HandleScope handle_scope; |
- |
- // This set of tests verifies that the workaround for Chromium bug 9746 |
- // works correctly. In certain situations the external resource of a symbol |
- // is collected while the symbol is still part of the symbol table. |
- static uint16_t two_byte_data[] = { |
- 't', 'w', 'o', '-', 'b', 'y', 't', 'e', ' ', 'd', 'a', 't', 'a' |
- }; |
- static size_t two_byte_length = |
- sizeof(two_byte_data) / sizeof(two_byte_data[0]); |
- static const char* one_byte_data = "two-byte data"; |
- |
- // Allocate an external string resource and external string. |
- TwoByteResource* resource = new TwoByteResource(two_byte_data, |
- two_byte_length, |
- NULL); |
- Handle<String> string = Factory::NewExternalStringFromTwoByte(resource); |
- Vector<const char> one_byte_vec = CStrVector(one_byte_data); |
- Handle<String> compare = Factory::NewStringFromAscii(one_byte_vec); |
- |
- // Verify the correct behaviour before "collecting" the external resource. |
- CHECK(string->IsEqualTo(one_byte_vec)); |
- CHECK(string->Equals(*compare)); |
- |
- // "Collect" the external resource manually by setting the external resource |
- // pointer to NULL. Then redo the comparisons, they should not match AND |
- // not crash. |
- Handle<ExternalTwoByteString> external(ExternalTwoByteString::cast(*string)); |
- external->set_resource(NULL); |
- CHECK_EQ(false, string->IsEqualTo(one_byte_vec)); |
-#if !defined(DEBUG) |
- // These tests only work in non-debug as there are ASSERTs in the code that |
- // do prevent the ability to even get into the broken code when running the |
- // debug version of V8. |
- CHECK_EQ(false, string->Equals(*compare)); |
- CHECK_EQ(false, compare->Equals(*string)); |
- CHECK_EQ(false, string->Equals(Heap::empty_string())); |
-#endif // !defined(DEBUG) |
-} |
- |
- |
// Regression test case for http://crbug.com/9746. The problem was |
// that when we marked objects reachable only through weak pointers, |
// we ended up keeping a sliced symbol alive, even though we already |
@@ -514,7 +469,7 @@ |
CHECK(buffer->IsTwoByteRepresentation()); |
// Finally, base a script on the slice of the external string and |
- // get its wrapper. This allocated yet another weak handle that |
+ // get its wrapper. This allocates yet another weak handle that |
// indirectly refers to the external string. |
Handle<Script> script = Factory::NewScript(slice); |
Handle<JSObject> wrapper = GetScriptWrapper(script); |