 Chromium Code Reviews
 Chromium Code Reviews Issue 9139018:
  Provide a way for iterating through all external strings referenced from the JS heap  (Closed) 
  Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
    
  
    Issue 9139018:
  Provide a way for iterating through all external strings referenced from the JS heap  (Closed) 
  Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/| Index: test/cctest/test-api.cc | 
| =================================================================== | 
| --- test/cctest/test-api.cc (revision 10398) | 
| +++ test/cctest/test-api.cc (working copy) | 
| @@ -13675,6 +13675,59 @@ | 
| } | 
| +class VisitorImpl : public v8::ExternalResourceVisitor { | 
| + public: | 
| + VisitorImpl(TestResource* r1, TestResource* r2) | 
| + : resource1_(r1), | 
| + resource2_(r2), | 
| + found_resource1_(false), | 
| + found_resource2_(false) {} | 
| + virtual ~VisitorImpl() {} | 
| + virtual void VisitExternalString(v8::Handle<v8::String> string) { | 
| + if (!string->IsExternal()) { | 
| + CHECK(string->IsExternalAscii()); | 
| + return; | 
| + } | 
| + v8::String::ExternalStringResource* resource = | 
| + string->GetExternalStringResource(); | 
| + CHECK(resource); | 
| + if (resource1_ == resource) { | 
| + CHECK(!found_resource1_); | 
| + found_resource1_ = true; | 
| + } | 
| + if (resource2_ == resource) { | 
| + CHECK(!found_resource2_); | 
| + found_resource2_ = true; | 
| + } | 
| + } | 
| + void CheckVisitedResources() { | 
| + CHECK(found_resource1_); | 
| + CHECK(found_resource2_); | 
| + } | 
| + | 
| + private: | 
| + v8::String::ExternalStringResource* resource1_; | 
| + v8::String::ExternalStringResource* resource2_; | 
| + bool found_resource1_; | 
| + bool found_resource2_; | 
| +}; | 
| + | 
| +TEST(VisitExternalStrings) { | 
| + v8::HandleScope scope; | 
| + LocalContext env; | 
| + const char* string = "Some string"; | 
| + uint16_t* two_byte_string = AsciiToTwoByteString(string); | 
| + TestResource* resource1 = new TestResource(two_byte_string); | 
| + v8::Local<v8::String> string1 = v8::String::NewExternal(resource1); | 
| + TestResource* resource2 = new TestResource(two_byte_string); | 
| + v8::Local<v8::String> string2 = v8::String::NewExternal(resource2); | 
| 
Tobias Burnus
2012/01/13 20:57:01
The assignment to string1 and string2 breaks the b
 
yurys
2012/01/14 13:52:44
I can add an artificial usages of string1 and stri
 | 
| + | 
| + VisitorImpl visitor(resource1, resource2); | 
| + v8::V8::VisitExternalResources(&visitor); | 
| + visitor.CheckVisitedResources(); | 
| +} | 
| + | 
| + | 
| static double DoubleFromBits(uint64_t value) { | 
| double target; | 
| memcpy(&target, &value, sizeof(target)); |