aadc245cc4300b1542398c6e22bd5de3c9a1835e
[WebKit-https.git] / JavaScriptCore / kjs / collector.h
1 // -*- c-basic-offset: 2 -*-
2 /*
3  *  This file is part of the KDE libraries
4  *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
5  *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
6  *  Copyright (C) 2003 Apple Computer, Inc.
7  *
8  *  This library is free software; you can redistribute it and/or
9  *  modify it under the terms of the GNU Lesser General Public
10  *  License as published by the Free Software Foundation; either
11  *  version 2 of the License, or (at your option) any later version.
12  *
13  *  This library is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  *  Lesser General Public License for more details.
17  *
18  *  You should have received a copy of the GNU Lesser General Public
19  *  License along with this library; if not, write to the Free Software
20  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21  *
22  */
23
24 #ifndef _KJSCOLLECTOR_H_
25 #define _KJSCOLLECTOR_H_
26
27 #include "value.h"
28
29 #define KJS_MEM_LIMIT 500000
30
31 namespace KJS {
32
33   /**
34    * @short Garbage collector.
35    */
36   class Collector {
37     // disallow direct construction/destruction
38     Collector();
39   public:
40     /**
41      * Register an object with the collector. The following assumptions are
42      * made:
43      * @li the operator new() of the object class is overloaded.
44      * @li operator delete() has been overloaded as well and does not free
45      * the memory on its own.
46      *
47      * @param s Size of the memory to be registered.
48      * @return A pointer to the allocated memory.
49      */
50     static void* allocate(size_t s);
51     /**
52      * Run the garbage collection. This involves calling the delete operator
53      * on each object and freeing the used memory.
54      */
55     static bool collect();
56     static int size();
57     static bool outOfMemory() { return memoryFull; }
58
59 #ifdef KJS_DEBUG_MEM
60     /**
61      * Check that nothing is left when the last interpreter gets deleted
62      */
63     static void finalCheck();
64 #endif
65
66 #if APPLE_CHANGES
67     static int numInterpreters();
68     static int numGCNotAllowedObjects();
69     static int numReferencedObjects();
70     static const void *rootObjectClasses(); // actually returns CFSetRef
71 #endif
72   private:
73
74 #if TEST_CONSERVATIVE_GC | USE_CONSERVATIVE_GC
75     static void markProtectedObjects();
76     static void markStackObjectsConservatively();
77     static void markStackObjectsConservatively(void *start, void *end);
78 #endif
79
80     static bool memoryFull;
81   };
82
83 };
84
85 #endif /* _KJSCOLLECTOR_H_ */