Title: [88519] trunk/Source/_javascript_Core
Revision
88519
Author
[email protected]
Date
2011-06-09 21:38:23 -0700 (Thu, 09 Jun 2011)

Log Message

2011-06-09  Geoffrey Garen  <[email protected]>

        Reviewed by Oliver Hunt.

        Added OldSpace to the project
        https://bugs.webkit.org/show_bug.cgi?id=62417
        
        Currently unused.
        
        Added OldSpace, the ability to iterate NewSpace vs OldSpace, and a
        per-block flag for testing whether you're in NewSpace vs OldSpace.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * _javascript_Core.gypi:
        * _javascript_Core.pro:
        * _javascript_Core.vcproj/_javascript_Core/_javascript_Core.vcproj:
        * _javascript_Core.xcodeproj/project.pbxproj: Build!

        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::inNewSpace):
        (JSC::MarkedBlock::setInNewSpace): Added inNewSpace flag, for use in
        write barrier.

        * heap/NewSpace.cpp:
        (JSC::NewSpace::addBlock):
        (JSC::NewSpace::removeBlock):
        * heap/NewSpace.h:
        (JSC::NewSpace::forEachBlock): Added forEachBlock, to use for
        NewSpace-specific operations.

        * heap/OldSpace.cpp: Added.
        (JSC::OldSpace::OldSpace):
        (JSC::OldSpace::addBlock):
        (JSC::OldSpace::removeBlock):
        * heap/OldSpace.h: Added.
        (JSC::OldSpace::forEachBlock): New class for holding promoted blocks.
        Not in use yet.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/_javascript_Core/CMakeLists.txt (88518 => 88519)


--- trunk/Source/_javascript_Core/CMakeLists.txt	2011-06-10 03:52:46 UTC (rev 88518)
+++ trunk/Source/_javascript_Core/CMakeLists.txt	2011-06-10 04:38:23 UTC (rev 88519)
@@ -48,6 +48,7 @@
     heap/MachineStackMarker.cpp
     heap/MarkedBlock.cpp
     heap/NewSpace.cpp
+    heap/OldSpace.cpp
     heap/ConservativeRoots.cpp
     heap/MarkStack.cpp
 

Modified: trunk/Source/_javascript_Core/ChangeLog (88518 => 88519)


--- trunk/Source/_javascript_Core/ChangeLog	2011-06-10 03:52:46 UTC (rev 88518)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-06-10 04:38:23 UTC (rev 88519)
@@ -1,3 +1,44 @@
+2011-06-09  Geoffrey Garen  <[email protected]>
+
+        Reviewed by Oliver Hunt.
+
+        Added OldSpace to the project
+        https://bugs.webkit.org/show_bug.cgi?id=62417
+        
+        Currently unused.
+        
+        Added OldSpace, the ability to iterate NewSpace vs OldSpace, and a
+        per-block flag for testing whether you're in NewSpace vs OldSpace.
+
+        * CMakeLists.txt:
+        * GNUmakefile.list.am:
+        * _javascript_Core.gypi:
+        * _javascript_Core.pro:
+        * _javascript_Core.vcproj/_javascript_Core/_javascript_Core.vcproj:
+        * _javascript_Core.xcodeproj/project.pbxproj: Build!
+
+        * heap/MarkedBlock.cpp:
+        (JSC::MarkedBlock::MarkedBlock):
+        * heap/MarkedBlock.h:
+        (JSC::MarkedBlock::inNewSpace):
+        (JSC::MarkedBlock::setInNewSpace): Added inNewSpace flag, for use in
+        write barrier.
+
+        * heap/NewSpace.cpp:
+        (JSC::NewSpace::addBlock):
+        (JSC::NewSpace::removeBlock):
+        * heap/NewSpace.h:
+        (JSC::NewSpace::forEachBlock): Added forEachBlock, to use for
+        NewSpace-specific operations.
+
+        * heap/OldSpace.cpp: Added.
+        (JSC::OldSpace::OldSpace):
+        (JSC::OldSpace::addBlock):
+        (JSC::OldSpace::removeBlock):
+        * heap/OldSpace.h: Added.
+        (JSC::OldSpace::forEachBlock): New class for holding promoted blocks.
+        Not in use yet.
+
 2011-06-09  Hyowon Kim  <[email protected]>
 
         Reviewed by Antonio Gomes.

Modified: trunk/Source/_javascript_Core/GNUmakefile.list.am (88518 => 88519)


--- trunk/Source/_javascript_Core/GNUmakefile.list.am	2011-06-10 03:52:46 UTC (rev 88518)
+++ trunk/Source/_javascript_Core/GNUmakefile.list.am	2011-06-10 04:38:23 UTC (rev 88519)
@@ -121,6 +121,8 @@
 	Source/_javascript_Core/heap/TinyBloomFilter.h \
 	Source/_javascript_Core/heap/NewSpace.cpp \
 	Source/_javascript_Core/heap/NewSpace.h \
+	Source/_javascript_Core/heap/OldSpace.cpp \
+	Source/_javascript_Core/heap/OldSpace.h \
 	Source/_javascript_Core/heap/Strong.h \
 	Source/_javascript_Core/heap/Weak.h \
 	Source/_javascript_Core/config.h \

Modified: trunk/Source/_javascript_Core/_javascript_Core.gypi (88518 => 88519)


--- trunk/Source/_javascript_Core/_javascript_Core.gypi	2011-06-10 03:52:46 UTC (rev 88518)
+++ trunk/Source/_javascript_Core/_javascript_Core.gypi	2011-06-10 04:38:23 UTC (rev 88519)
@@ -326,6 +326,8 @@
             'heap/TinyBloomFilter.h',
             'heap/NewSpace.cpp',
             'heap/NewSpace.h',
+            'heap/OldSpace.cpp',
+            'heap/OldSpace.h',
             'debugger/Debugger.cpp',
             'debugger/DebuggerActivation.cpp',
             'debugger/DebuggerCallFrame.cpp',

Modified: trunk/Source/_javascript_Core/_javascript_Core.pro (88518 => 88519)


--- trunk/Source/_javascript_Core/_javascript_Core.pro	2011-06-10 03:52:46 UTC (rev 88518)
+++ trunk/Source/_javascript_Core/_javascript_Core.pro	2011-06-10 04:38:23 UTC (rev 88519)
@@ -78,6 +78,7 @@
     heap/MarkStack.cpp \
     heap/MarkedBlock.cpp \
     heap/NewSpace.cpp \
+    heap/OldSpace.cpp \
     debugger/DebuggerActivation.cpp \
     debugger/DebuggerCallFrame.cpp \
     debugger/Debugger.cpp \

Modified: trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.vcproj (88518 => 88519)


--- trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.vcproj	2011-06-10 03:52:46 UTC (rev 88518)
+++ trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.vcproj	2011-06-10 04:38:23 UTC (rev 88519)
@@ -1906,6 +1906,14 @@
                                     >
                             </File>
                             <File
+                                    RelativePath="..\..\heap\OldSpace.cpp"
+                                    >
+                            </File>
+                            <File
+                                    RelativePath="..\..\heap\OldSpace.h"
+                                    >
+                            </File>
+                            <File
                                     RelativePath="..\..\heap\MarkStack.cpp"
                                     >
                             </File>

Modified: trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (88518 => 88519)


--- trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj	2011-06-10 03:52:46 UTC (rev 88518)
+++ trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj	2011-06-10 04:38:23 UTC (rev 88519)
@@ -85,6 +85,8 @@
 		1429D8DE0ED2205B00B89619 /* CallFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 1429D8DC0ED2205B00B89619 /* CallFrame.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		1429D92F0ED22D7000B89619 /* JIT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1429D92D0ED22D7000B89619 /* JIT.cpp */; };
 		1429D9300ED22D7000B89619 /* JIT.h in Headers */ = {isa = PBXBuildFile; fileRef = 1429D92E0ED22D7000B89619 /* JIT.h */; };
+		142A1D8313A19C84009DA5FE /* OldSpace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 142A1D8113A19C84009DA5FE /* OldSpace.cpp */; };
+		142A1D8413A19C84009DA5FE /* OldSpace.h in Headers */ = {isa = PBXBuildFile; fileRef = 142A1D8213A19C84009DA5FE /* OldSpace.h */; };
 		142D3939103E4560007DCB52 /* NumericStrings.h in Headers */ = {isa = PBXBuildFile; fileRef = 142D3938103E4560007DCB52 /* NumericStrings.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		142D6F0813539A2800B02E86 /* MarkedBlock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 142D6F0613539A2800B02E86 /* MarkedBlock.cpp */; };
 		142D6F0913539A2800B02E86 /* MarkedBlock.h in Headers */ = {isa = PBXBuildFile; fileRef = 142D6F0713539A2800B02E86 /* MarkedBlock.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -744,6 +746,8 @@
 		1429D8DC0ED2205B00B89619 /* CallFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallFrame.h; sourceTree = "<group>"; };
 		1429D92D0ED22D7000B89619 /* JIT.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JIT.cpp; sourceTree = "<group>"; };
 		1429D92E0ED22D7000B89619 /* JIT.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JIT.h; sourceTree = "<group>"; };
+		142A1D8113A19C84009DA5FE /* OldSpace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OldSpace.cpp; sourceTree = "<group>"; };
+		142A1D8213A19C84009DA5FE /* OldSpace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OldSpace.h; sourceTree = "<group>"; };
 		142D3938103E4560007DCB52 /* NumericStrings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NumericStrings.h; sourceTree = "<group>"; };
 		142D6F0613539A2800B02E86 /* MarkedBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MarkedBlock.cpp; sourceTree = "<group>"; };
 		142D6F0713539A2800B02E86 /* MarkedBlock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MarkedBlock.h; sourceTree = "<group>"; };
@@ -1503,14 +1507,16 @@
 				14B7234012D7D0DA003BD5ED /* MachineStackMarker.h */,
 				142D6F0613539A2800B02E86 /* MarkedBlock.cpp */,
 				142D6F0713539A2800B02E86 /* MarkedBlock.h */,
+				141448CA13A176EC00F5BA1A /* MarkedBlockSet.h */,
 				142D6F0E13539A4100B02E86 /* MarkStack.cpp */,
 				142D6F0F13539A4100B02E86 /* MarkStack.h */,
 				14D2F3D8139F4BE200491031 /* NewSpace.cpp */,
 				14D2F3D9139F4BE200491031 /* NewSpace.h */,
+				142A1D8113A19C84009DA5FE /* OldSpace.cpp */,
+				142A1D8213A19C84009DA5FE /* OldSpace.h */,
 				142E3132134FF0A600AFADB5 /* Strong.h */,
+				141448CC13A1783700F5BA1A /* TinyBloomFilter.h */,
 				142E3133134FF0A600AFADB5 /* Weak.h */,
-				141448CA13A176EC00F5BA1A /* MarkedBlockSet.h */,
-				141448CC13A1783700F5BA1A /* TinyBloomFilter.h */,
 			);
 			path = heap;
 			sourceTree = "<group>";
@@ -2559,6 +2565,7 @@
 				14D2F3DB139F4BE200491031 /* NewSpace.h in Headers */,
 				141448CB13A176EC00F5BA1A /* MarkedBlockSet.h in Headers */,
 				141448CD13A1783700F5BA1A /* TinyBloomFilter.h in Headers */,
+				142A1D8413A19C84009DA5FE /* OldSpace.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -3006,6 +3013,7 @@
 				7934BB7C1361979400CB99A1 /* ParallelJobsGeneric.cpp in Sources */,
 				86BB09C0138E381B0056702F /* DFGRepatch.cpp in Sources */,
 				14D2F3DA139F4BE200491031 /* NewSpace.cpp in Sources */,
+				142A1D8313A19C84009DA5FE /* OldSpace.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

Modified: trunk/Source/_javascript_Core/heap/MarkedBlock.cpp (88518 => 88519)


--- trunk/Source/_javascript_Core/heap/MarkedBlock.cpp	2011-06-10 03:52:46 UTC (rev 88518)
+++ trunk/Source/_javascript_Core/heap/MarkedBlock.cpp	2011-06-10 04:38:23 UTC (rev 88519)
@@ -50,6 +50,7 @@
 
 MarkedBlock::MarkedBlock(const PageAllocationAligned& allocation, Heap* heap, size_t cellSize)
     : m_nextAtom(firstAtom())
+    , m_inNewSpace(false)
     , m_allocation(allocation)
     , m_heap(heap)
 {

Modified: trunk/Source/_javascript_Core/heap/MarkedBlock.h (88518 => 88519)


--- trunk/Source/_javascript_Core/heap/MarkedBlock.h	2011-06-10 03:52:46 UTC (rev 88518)
+++ trunk/Source/_javascript_Core/heap/MarkedBlock.h	2011-06-10 04:38:23 UTC (rev 88519)
@@ -58,6 +58,9 @@
         static size_t firstAtom();
         
         Heap* heap() const;
+        
+        bool inNewSpace();
+        void setInNewSpace(bool);
 
         void* allocate();
         void resetAllocator();
@@ -97,6 +100,7 @@
         size_t m_endAtom; // This is a fuzzy end. Always test for < m_endAtom.
         size_t m_atomsPerCell;
         WTF::Bitmap<blockSize / atomSize> m_marks;
+        bool m_inNewSpace;
         PageAllocationAligned m_allocation;
         Heap* m_heap;
         MarkedBlock* m_prev;
@@ -128,6 +132,16 @@
         return m_heap;
     }
 
+    inline bool MarkedBlock::inNewSpace()
+    {
+        return m_inNewSpace;
+    }
+    
+    inline void MarkedBlock::setInNewSpace(bool inNewSpace)
+    {
+        m_inNewSpace = inNewSpace;
+    }
+
     inline void MarkedBlock::resetAllocator()
     {
         m_nextAtom = firstAtom();

Modified: trunk/Source/_javascript_Core/heap/NewSpace.cpp (88518 => 88519)


--- trunk/Source/_javascript_Core/heap/NewSpace.cpp	2011-06-10 03:52:46 UTC (rev 88518)
+++ trunk/Source/_javascript_Core/heap/NewSpace.cpp	2011-06-10 04:38:23 UTC (rev 88519)
@@ -45,12 +45,14 @@
 
 void NewSpace::addBlock(SizeClass& sizeClass, MarkedBlock* block)
 {
+    block->setInNewSpace(true);
     sizeClass.nextBlock = block;
     sizeClass.blockList.append(block);
 }
 
 void NewSpace::removeBlock(MarkedBlock* block)
 {
+    block->setInNewSpace(false);
     SizeClass& sizeClass = sizeClassFor(block->cellSize());
     sizeClass.nextBlock = block->next();
     sizeClass.blockList.remove(block);

Modified: trunk/Source/_javascript_Core/heap/NewSpace.h (88518 => 88519)


--- trunk/Source/_javascript_Core/heap/NewSpace.h	2011-06-10 03:52:46 UTC (rev 88518)
+++ trunk/Source/_javascript_Core/heap/NewSpace.h	2011-06-10 04:38:23 UTC (rev 88519)
@@ -61,6 +61,7 @@
 
         SizeClass& sizeClassFor(size_t);
         void* allocate(SizeClass&);
+        void resetAllocator();
 
         void addBlock(SizeClass&, MarkedBlock*);
         void removeBlock(MarkedBlock*);
@@ -69,7 +70,8 @@
         size_t highWaterMark();
         void setHighWaterMark(size_t);
 
-        void resetAllocator();
+        template<typename Functor> typename Functor::ReturnType forEachBlock(Functor&); // Safe to remove the current item while iterating.
+        template<typename Functor> typename Functor::ReturnType forEachBlock();
 
     private:
         // [ 8, 16... 128 )
@@ -124,6 +126,35 @@
         return 0;
     }
 
+    template <typename Functor> inline typename Functor::ReturnType NewSpace::forEachBlock(Functor& functor)
+    {
+        for (size_t i = 0; i < preciseCount; ++i) {
+            SizeClass& sizeClass = m_preciseSizeClasses[i];
+            MarkedBlock* next;
+            for (MarkedBlock* block = sizeClass.blockList.head(); block; block = next) {
+                next = block->next();
+                functor(block);
+            }
+        }
+
+        for (size_t i = 0; i < impreciseCount; ++i) {
+            SizeClass& sizeClass = m_impreciseSizeClasses[i];
+            MarkedBlock* next;
+            for (MarkedBlock* block = sizeClass.blockList.head(); block; block = next) {
+                next = block->next();
+                functor(block);
+            }
+        }
+
+        return functor.returnValue();
+    }
+
+    template <typename Functor> inline typename Functor::ReturnType NewSpace::forEachBlock()
+    {
+        Functor functor;
+        return forEachBlock(functor);
+    }
+
     inline NewSpace::SizeClass::SizeClass()
         : nextBlock(0)
         , cellSize(0)

Added: trunk/Source/_javascript_Core/heap/OldSpace.cpp (0 => 88519)


--- trunk/Source/_javascript_Core/heap/OldSpace.cpp	                        (rev 0)
+++ trunk/Source/_javascript_Core/heap/OldSpace.cpp	2011-06-10 04:38:23 UTC (rev 88519)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "OldSpace.h"
+
+namespace JSC {
+
+OldSpace::OldSpace(Heap* heap)
+    : m_heap(heap)
+{
+}
+
+void OldSpace::addBlock(MarkedBlock* block)
+{
+    m_blocks.append(block);
+}
+
+void OldSpace::removeBlock(MarkedBlock* block)
+{
+    m_blocks.remove(block);
+}
+
+} // namespace JSC

Added: trunk/Source/_javascript_Core/heap/OldSpace.h (0 => 88519)


--- trunk/Source/_javascript_Core/heap/OldSpace.h	                        (rev 0)
+++ trunk/Source/_javascript_Core/heap/OldSpace.h	2011-06-10 04:38:23 UTC (rev 88519)
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2011 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef OldSpace_h
+#define OldSpace_h
+
+#include "MarkedBlock.h"
+#include <wtf/DoublyLinkedList.h>
+#include <wtf/NonCopyable.h>
+
+namespace JSC {
+    
+class Heap;
+
+class OldSpace {
+    WTF_MAKE_NONCOPYABLE(OldSpace);
+public:
+    OldSpace(Heap*);
+
+    void addBlock(MarkedBlock*);
+    void removeBlock(MarkedBlock*);
+
+    template<typename Functor> typename Functor::ReturnType forEachBlock();
+    template<typename Functor> typename Functor::ReturnType forEachBlock(Functor&);
+
+private:
+    DoublyLinkedList<MarkedBlock> m_blocks;
+    Heap* m_heap;
+};
+
+template <typename Functor> inline typename Functor::ReturnType OldSpace::forEachBlock(Functor& functor)
+{
+    MarkedBlock* next;
+    for (MarkedBlock* block = m_blocks.head(); block; block = next) {
+        next = block->next();
+        functor(block);
+    }
+
+    return functor.returnValue();
+}
+
+template <typename Functor> inline typename Functor::ReturnType OldSpace::forEachBlock()
+{
+    Functor functor;
+    return forEachBlock(functor);
+}
+
+} // namespace JSC
+
+#endif // OldSpace_h
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to