| Index: test/cctest/test-strings.cc | 
| =================================================================== | 
| --- test/cctest/test-strings.cc	(revision 1871) | 
| +++ test/cctest/test-strings.cc	(working copy) | 
| @@ -431,6 +431,7 @@ | 
| for (int i = 0; i < kFullStringLength; i++) source[i] = '1'; | 
| char* key = new char[kSliceStringLength]; | 
| for (int i = 0; i < kSliceStringLength; i++) key[i] = '1'; | 
| +  Vector<const char> key_vector(key, kSliceStringLength); | 
|  | 
| // Allocate an external string resource that keeps track of when it | 
| // is destructed. | 
| @@ -482,16 +483,33 @@ | 
| Heap::CollectAllGarbage(); | 
| CHECK(!resource_destructed); | 
|  | 
| -  // Make sure the sliced symbol is still in the table. | 
| +  { | 
| +    v8::HandleScope scope; | 
| + | 
| +    // Make sure the sliced symbol is still in the table. | 
| +    Handle<String> symbol = Factory::LookupSymbol(key_vector); | 
| +    CHECK(StringShape(*symbol).IsSliced()); | 
| + | 
| +    // Make sure the buffer is still a two-byte external string. | 
| +    Handle<String> buffer(Handle<SlicedString>::cast(symbol)->buffer()); | 
| +    CHECK(StringShape(*buffer).IsExternal()); | 
| +    CHECK(buffer->IsTwoByteRepresentation()); | 
| +  } | 
| + | 
| +  // Forcing another garbage collection should let us get rid of the | 
| +  // slice from the symbol table. The external string remains in the | 
| +  // heap until the next GC. | 
| +  Heap::CollectAllGarbage(); | 
| +  CHECK(!resource_destructed); | 
| v8::HandleScope scope; | 
| -  Vector<const char> vector(key, kSliceStringLength); | 
| -  Handle<String> symbol = Factory::LookupSymbol(vector); | 
| -  CHECK(StringShape(*symbol).IsSliced()); | 
| +  Handle<String> key_string = Factory::NewStringFromAscii(key_vector); | 
| +  String* out; | 
| +  CHECK(!Heap::LookupSymbolIfExists(*key_string, &out)); | 
|  | 
| -  // Make sure the buffer is still a two-byte external string. | 
| -  Handle<String> buffer(Handle<SlicedString>::cast(symbol)->buffer()); | 
| -  CHECK(StringShape(*buffer).IsExternal()); | 
| -  CHECK(buffer->IsTwoByteRepresentation()); | 
| +  // Forcing yet another garbage collection must allow us to finally | 
| +  // get rid of the external string. | 
| +  Heap::CollectAllGarbage(); | 
| +  CHECK(resource_destructed); | 
|  | 
| delete[] source; | 
| delete[] key; | 
|  |