| Index: src/heap.h
|
| diff --git a/src/heap.h b/src/heap.h
|
| index b1ef19f535b500a2e274e82eb2a7fcd34ad55086..3d9292eb4c1b59c8cb37862c7bdb6faf15f643d4 100644
|
| --- a/src/heap.h
|
| +++ b/src/heap.h
|
| @@ -202,9 +202,10 @@ namespace internal {
|
| V(closure_symbol, "(closure)")
|
|
|
|
|
| -// Forward declaration of the GCTracer class.
|
| +// Forward declarations.
|
| class GCTracer;
|
| class HeapStats;
|
| +class WeakObjectRetainer;
|
|
|
|
|
| typedef String* (*ExternalStringTableUpdaterCallback)(Object** pointer);
|
| @@ -767,6 +768,11 @@ class Heap : public AllStatic {
|
| // not match the empty string.
|
| static String* hidden_symbol() { return hidden_symbol_; }
|
|
|
| + static void set_global_contexts_list(Object* object) {
|
| + global_contexts_list_ = object;
|
| + }
|
| + static Object* global_contexts_list() { return global_contexts_list_; }
|
| +
|
| // Iterates over all roots in the heap.
|
| static void IterateRoots(ObjectVisitor* v, VisitMode mode);
|
| // Iterates over all strong roots in the heap.
|
| @@ -870,6 +876,11 @@ class Heap : public AllStatic {
|
| // Generated code can embed this address to get access to the roots.
|
| static Object** roots_address() { return roots_; }
|
|
|
| + // Get address of global contexts list for serialization support.
|
| + static Object** global_contexts_list_address() {
|
| + return &global_contexts_list_;
|
| + }
|
| +
|
| #ifdef DEBUG
|
| static void Print();
|
| static void PrintHandles();
|
| @@ -1051,6 +1062,8 @@ class Heap : public AllStatic {
|
| static void UpdateNewSpaceReferencesInExternalStringTable(
|
| ExternalStringTableUpdaterCallback updater_func);
|
|
|
| + static void ProcessWeakReferences(WeakObjectRetainer* retainer);
|
| +
|
| // Helper function that governs the promotion policy from new space to
|
| // old. If the object's old address lies below the new space's age
|
| // mark or if we've already filled the bottom 1/16th of the to space,
|
| @@ -1157,6 +1170,8 @@ class Heap : public AllStatic {
|
|
|
| static Object* roots_[kRootListLength];
|
|
|
| + static Object* global_contexts_list_;
|
| +
|
| struct StringTypeTable {
|
| InstanceType type;
|
| int size;
|
| @@ -2043,6 +2058,19 @@ class ExternalStringTable : public AllStatic {
|
| static List<Object*> old_space_strings_;
|
| };
|
|
|
| +
|
| +// Abstract base class for checking whether a weak object should be retained.
|
| +class WeakObjectRetainer {
|
| + public:
|
| + virtual ~WeakObjectRetainer() {}
|
| +
|
| + // Return whether this object should be retained. If NULL is returned the
|
| + // object has no references. Otherwise the address of the retained object
|
| + // should be returned as in some GC situations the object has been moved.
|
| + virtual Object* RetainAs(Object* object) = 0;
|
| +};
|
| +
|
| +
|
| } } // namespace v8::internal
|
|
|
| #endif // V8_HEAP_H_
|
|
|