| Index: src/spaces.h | 
| diff --git a/src/spaces.h b/src/spaces.h | 
| index 22e971ef2b7fd82c6d171cf1da83d967e3c7958c..95bb40a0637ff1f6e74ec623c57f4bc131512499 100644 | 
| --- a/src/spaces.h | 
| +++ b/src/spaces.h | 
| @@ -164,19 +164,25 @@ class MarkBit { | 
|  | 
|  | 
| // Bitmap is a sequence of cells each containing fixed number of bits. | 
| -template<typename StorageDescriptor> | 
| class Bitmap { | 
| public: | 
| static const uint32_t kBitsPerCell = 32; | 
| static const uint32_t kBitsPerCellLog2 = 5; | 
| static const uint32_t kBitIndexMask = kBitsPerCell - 1; | 
|  | 
| +  static const size_t kLength = | 
| +    (1 << kPageSizeBits) >> (kPointerSizeLog2); | 
| + | 
| +  static const size_t kSize = | 
| +    (1 << kPageSizeBits) >> (kPointerSizeLog2 + kBitsPerByteLog2); | 
| + | 
| + | 
| static int CellsForLength(int length) { | 
| return (length + kBitsPerCell - 1) >> kBitsPerCellLog2; | 
| } | 
|  | 
| int CellsCount() { | 
| -    return StorageDescriptor::CellsCount(this->address()); | 
| +    return CellsForLength(kLength); | 
| } | 
|  | 
| static int SizeFor(int cells_count) { | 
| @@ -395,14 +401,8 @@ class MemoryChunk { | 
| static const size_t kHeaderSize = kPointerSize + kPointerSize + kPointerSize + | 
| kPointerSize + kPointerSize + kPointerSize + kPointerSize + kPointerSize; | 
|  | 
| -  static const size_t kMarksBitmapLength = | 
| -    (1 << kPageSizeBits) >> (kPointerSizeLog2); | 
| - | 
| -  static const size_t kMarksBitmapSize = | 
| -    (1 << kPageSizeBits) >> (kPointerSizeLog2 + kBitsPerByteLog2); | 
| - | 
| static const int kBodyOffset = | 
| -    CODE_POINTER_ALIGN(MAP_POINTER_ALIGN(kHeaderSize + kMarksBitmapSize)); | 
| +    CODE_POINTER_ALIGN(MAP_POINTER_ALIGN(kHeaderSize + Bitmap::kSize)); | 
|  | 
| // The start offset of the object area in a page. Aligned to both maps and | 
| // code alignment to be suitable for both.  Also aligned to 32 words because | 
| @@ -424,18 +424,8 @@ class MemoryChunk { | 
| // --------------------------------------------------------------------- | 
| // Markbits support | 
|  | 
| -  class BitmapStorageDescriptor { | 
| -   public: | 
| -    INLINE(static int CellsCount(Address addr)) { | 
| -      return Bitmap<BitmapStorageDescriptor>::CellsForLength( | 
| -          kMarksBitmapLength); | 
| -    } | 
| -  }; | 
| - | 
| -  typedef Bitmap<BitmapStorageDescriptor> MarkbitsBitmap; | 
| - | 
| -  inline MarkbitsBitmap* markbits() { | 
| -    return MarkbitsBitmap::FromAddress(address() + kHeaderSize); | 
| +  inline Bitmap* markbits() { | 
| +    return Bitmap::FromAddress(address() + kHeaderSize); | 
| } | 
|  | 
| void PrintMarkbits() { markbits()->Print(); } | 
| @@ -558,11 +548,11 @@ class Page : public MemoryChunk { | 
| static const int kMaxHeapObjectSize = kObjectAreaSize; | 
|  | 
| static const int kFirstUsedCell = | 
| -    (kObjectStartOffset/kPointerSize) >> MarkbitsBitmap::kBitsPerCellLog2; | 
| +    (kObjectStartOffset/kPointerSize) >> Bitmap::kBitsPerCellLog2; | 
|  | 
| static const int kLastUsedCell = | 
| ((kPageSize - kPointerSize)/kPointerSize) >> | 
| -      MarkbitsBitmap::kBitsPerCellLog2; | 
| +      Bitmap::kBitsPerCellLog2; | 
|  | 
| inline void ClearGCFields(); | 
|  | 
| @@ -1870,6 +1860,10 @@ class NewSpace : public Space { | 
| return to_space_.current_page(); | 
| } | 
|  | 
| +  NewSpacePage* InactivePage() { | 
| +    return from_space_.current_page(); | 
| +  } | 
| + | 
| private: | 
| Address chunk_base_; | 
| uintptr_t chunk_size_; | 
|  |