| Index: src/heap.h
 | 
| diff --git a/src/heap.h b/src/heap.h
 | 
| index 72035cadcf3f262955682709c69cb89c712529fa..068c44e713f5569515606e2b582caee994ea17f1 100644
 | 
| --- a/src/heap.h
 | 
| +++ b/src/heap.h
 | 
| @@ -209,6 +209,7 @@ namespace internal {
 | 
|    V(char_at_symbol, "CharAt")                                            \
 | 
|    V(undefined_symbol, "undefined")                                       \
 | 
|    V(value_of_symbol, "valueOf")                                          \
 | 
| +  V(stack_symbol, "stack")                                               \
 | 
|    V(InitializeVarGlobal_symbol, "InitializeVarGlobal")                   \
 | 
|    V(InitializeConstGlobal_symbol, "InitializeConstGlobal")               \
 | 
|    V(KeyedLoadElementMonomorphic_symbol,                                  \
 | 
| @@ -427,6 +428,41 @@ class ExternalStringTable {
 | 
|  };
 | 
|  
 | 
|  
 | 
| +// The stack property of an error object is implemented as a getter that
 | 
| +// formats the attached raw stack trace into a string.  This raw stack trace
 | 
| +// keeps code and function objects alive until the getter is called the first
 | 
| +// time.  To release those objects, we call the getter after each GC for
 | 
| +// newly tenured error objects that are kept in a list.
 | 
| +class ErrorObjectList {
 | 
| + public:
 | 
| +  inline void Add(JSObject* object);
 | 
| +
 | 
| +  inline void Iterate(ObjectVisitor* v);
 | 
| +
 | 
| +  void TearDown();
 | 
| +
 | 
| +  void RemoveUnmarked(Heap* heap);
 | 
| +
 | 
| +  void DeferredFormatStackTrace(Isolate* isolate);
 | 
| +
 | 
| +  void UpdateReferences();
 | 
| +
 | 
| +  void UpdateReferencesInNewSpace(Heap* heap);
 | 
| +
 | 
| + private:
 | 
| +  static const int kBudgetPerGC = 16;
 | 
| +
 | 
| +  ErrorObjectList() : nested_(false) { }
 | 
| +
 | 
| +  friend class Heap;
 | 
| +
 | 
| +  List<Object*> list_;
 | 
| +  bool nested_;
 | 
| +
 | 
| +  DISALLOW_COPY_AND_ASSIGN(ErrorObjectList);
 | 
| +};
 | 
| +
 | 
| +
 | 
|  enum ArrayStorageAllocationMode {
 | 
|    DONT_INITIALIZE_ARRAY_ELEMENTS,
 | 
|    INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE
 | 
| @@ -1573,6 +1609,10 @@ class Heap {
 | 
|      return &external_string_table_;
 | 
|    }
 | 
|  
 | 
| +  ErrorObjectList* error_object_list() {
 | 
| +    return &error_object_list_;
 | 
| +  }
 | 
| +
 | 
|    // Returns the current sweep generation.
 | 
|    int sweep_generation() {
 | 
|      return sweep_generation_;
 | 
| @@ -2149,6 +2189,8 @@ class Heap {
 | 
|  
 | 
|    ExternalStringTable external_string_table_;
 | 
|  
 | 
| +  ErrorObjectList error_object_list_;
 | 
| +
 | 
|    VisitorDispatchTable<ScavengingCallback> scavenging_visitors_table_;
 | 
|  
 | 
|    MemoryChunk* chunks_queued_for_free_;
 | 
| 
 |