Restructure Array so the elements vector can be replaced.
1 /* vim: set ts=4 sw=4 tw=99 et:
3 * Copyright (C) 2012 David Anderson
5 * This file is part of JITCraft.
7 * JITCraft is free software: you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License as published by the Free
9 * Software Foundation, either version 3 of the License, or (at your option)
12 * Foobar is distributed in the hope that it will be useful, but WITHOUT ANY
13 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along with
17 * JITCraft. If not, see http://www.gnu.org/licenses/.
19 #ifndef _include_jitcraft_spaces_inl_h_
20 #define _include_jitcraft_spaces_inl_h_
27 HeapStack::allocate(size_t nbytes)
29 nbytes = Align(nbytes, kObjectAlignment);
31 if (cursor_ + nbytes > chunk_->end())
34 Address ptr = cursor_;
40 HeapStack::unwind(Address to)
42 assert(to <= cursor_ && to >= chunk_->first());
47 OldSpace::allocate(size_t nbytes)
49 assert(IsAligned(nbytes, kObjectAlignment));
51 if (cursor_ + nbytes > last_->end())
52 return allocateSlow(nbytes);
54 Address addr = cursor_;
59 template <typename SizeEvaluator> inline Object *
60 ChunkObjectIteratorBase<SizeEvaluator>::next()
62 while (current_ && current_ != top_) {
63 Object *obj = reinterpret_cast<Object *>(current_);
64 size_t size = evaluator_(obj, obj->map());
66 if (current_ == chunk_->end()) {
67 chunk_ = chunk_->next();
68 current_ = chunk_ ? chunk_->first() : NULL;
70 if (obj->is(MapKind_FreeRegion))
78 #endif // _include_jitcraft_spaces_inl_h_