| Index: src/heap.h
|
| diff --git a/src/heap.h b/src/heap.h
|
| index b37fe4b5b8154f18155783f862995928c19b517b..beff7bc2d2c220448d4188111199a93cd16534a3 100644
|
| --- a/src/heap.h
|
| +++ b/src/heap.h
|
| @@ -566,6 +566,10 @@ class Heap : public AllStatic {
|
| static Object* AllocateExternalStringFromTwoByte(
|
| ExternalTwoByteString::Resource* resource);
|
|
|
| + // Finalizes an external string by deleting the associated external
|
| + // data and clearing the resource pointer.
|
| + static inline void FinalizeExternalString(String* string);
|
| +
|
| // Allocates an uninitialized object. The memory is non-executable if the
|
| // hardware and OS allow.
|
| // Returns Failure::RetryAfterGC(requested_bytes, space) if the allocation
|
| @@ -778,7 +782,7 @@ class Heap : public AllStatic {
|
| return disallow_allocation_failure_;
|
| }
|
|
|
| - static void TracePathToObject();
|
| + static void TracePathToObject(Object* target);
|
| static void TracePathToGlobal();
|
| #endif
|
|
|
| @@ -1039,6 +1043,9 @@ class Heap : public AllStatic {
|
|
|
| // Performs a minor collection in new generation.
|
| static void Scavenge();
|
| + static void ScavengeExternalStringTable();
|
| + static Address DoScavenge(ObjectVisitor* scavenge_visitor,
|
| + Address new_space_front);
|
|
|
| // Performs a major collection in the whole heap.
|
| static void MarkCompact(GCTracer* tracer);
|
| @@ -1623,6 +1630,43 @@ class TranscendentalCache {
|
| };
|
|
|
|
|
| +// External strings table is a place where all external strings are
|
| +// registered. We need to keep track of such strings to properly
|
| +// finalize them.
|
| +class ExternalStringTable : public AllStatic {
|
| + public:
|
| + // Registers an external string.
|
| + inline static void AddString(String* string);
|
| +
|
| + inline static void Iterate(ObjectVisitor* v);
|
| +
|
| + // Restores internal invariant and gets rid of collected strings.
|
| + // Must be called after each Iterate() that modified the strings.
|
| + static void CleanUp();
|
| +
|
| + // Destroys all allocated memory.
|
| + static void TearDown();
|
| +
|
| + private:
|
| + friend class Heap;
|
| +
|
| + inline static void Verify();
|
| +
|
| + inline static void AddOldString(String* string);
|
| +
|
| + // Notifies the table that only a prefix of the new list is valid.
|
| + inline static void ShrinkNewStrings(int position);
|
| +
|
| + // Cleans up either the new or old list moving string that shouldn't
|
| + // be in the list to the other list and removing nulls.
|
| + static void CleanUpList(bool new_to_old);
|
| +
|
| + // To speed up scavenge collections new space string are kept
|
| + // separate from old space strings.
|
| + static List<Object*> new_space_strings_;
|
| + static List<Object*> old_space_strings_;
|
| +};
|
| +
|
| } } // namespace v8::internal
|
|
|
| #endif // V8_HEAP_H_
|
|
|