VM: macro FACTOR_FOR_EACH to make stl container iteration easier to express
parent
27590b514c
commit
b7bd0668b3
|
@ -191,12 +191,7 @@ void slot_visitor<Fixup>::visit_stack_elements(segment* region, cell* top) {
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Fixup> void slot_visitor<Fixup>::visit_data_roots() {
|
template <typename Fixup> void slot_visitor<Fixup>::visit_data_roots() {
|
||||||
std::vector<cell*>::const_iterator iter =
|
FACTOR_FOR_EACH(parent->data_roots) {
|
||||||
parent->data_roots.begin();
|
|
||||||
std::vector<cell*>::const_iterator end =
|
|
||||||
parent->data_roots.end();
|
|
||||||
|
|
||||||
for (; iter < end; iter++) {
|
|
||||||
visit_handle(*iter);
|
visit_handle(*iter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -218,27 +213,19 @@ template <typename Fixup> void slot_visitor<Fixup>::visit_callback_roots() {
|
||||||
|
|
||||||
template <typename Fixup>
|
template <typename Fixup>
|
||||||
void slot_visitor<Fixup>::visit_literal_table_roots() {
|
void slot_visitor<Fixup>::visit_literal_table_roots() {
|
||||||
std::map<code_block*, cell>* uninitialized_blocks =
|
FACTOR_FOR_EACH(parent->code->uninitialized_blocks) {
|
||||||
&parent->code->uninitialized_blocks;
|
|
||||||
std::map<code_block*, cell>::iterator iter =
|
|
||||||
uninitialized_blocks->begin();
|
|
||||||
std::map<code_block*, cell>::iterator end = uninitialized_blocks->end();
|
|
||||||
|
|
||||||
for (; iter != end; iter++) {
|
|
||||||
iter->second = visit_pointer(iter->second);
|
iter->second = visit_pointer(iter->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Fixup> void slot_visitor<Fixup>::visit_sample_callstacks() {
|
template <typename Fixup> void slot_visitor<Fixup>::visit_sample_callstacks() {
|
||||||
for (std::vector<cell>::iterator iter = parent->sample_callstacks.begin();
|
FACTOR_FOR_EACH(parent->sample_callstacks) {
|
||||||
iter != parent->sample_callstacks.end(); ++iter) {
|
|
||||||
visit_handle(&*iter);
|
visit_handle(&*iter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Fixup> void slot_visitor<Fixup>::visit_sample_threads() {
|
template <typename Fixup> void slot_visitor<Fixup>::visit_sample_threads() {
|
||||||
for (std::vector<profiling_sample>::iterator iter = parent->samples.begin();
|
FACTOR_FOR_EACH(parent->samples) {
|
||||||
iter != parent->samples.end(); ++iter) {
|
|
||||||
visit_handle(&iter->thread);
|
visit_handle(&iter->thread);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -397,11 +384,8 @@ void slot_visitor<Fixup>::visit_context(context* ctx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Fixup> void slot_visitor<Fixup>::visit_contexts() {
|
template <typename Fixup> void slot_visitor<Fixup>::visit_contexts() {
|
||||||
std::set<context*>::const_iterator begin = parent->active_contexts.begin();
|
FACTOR_FOR_EACH(parent->active_contexts) {
|
||||||
std::set<context*>::const_iterator end = parent->active_contexts.end();
|
visit_context(*iter);
|
||||||
while (begin != end) {
|
|
||||||
visit_context(*begin);
|
|
||||||
begin++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -474,28 +458,18 @@ void slot_visitor<Fixup>::visit_object_code_block(object* obj) {
|
||||||
template <typename Fixup>
|
template <typename Fixup>
|
||||||
void slot_visitor<Fixup>::visit_context_code_blocks() {
|
void slot_visitor<Fixup>::visit_context_code_blocks() {
|
||||||
call_frame_code_block_visitor<Fixup> call_frame_visitor(fixup);
|
call_frame_code_block_visitor<Fixup> call_frame_visitor(fixup);
|
||||||
std::set<context*>::const_iterator begin = parent->active_contexts.begin();
|
FACTOR_FOR_EACH(parent->active_contexts) {
|
||||||
std::set<context*>::const_iterator end = parent->active_contexts.end();
|
parent->iterate_callstack(*iter, call_frame_visitor, fixup);
|
||||||
while (begin != end) {
|
|
||||||
parent->iterate_callstack(*begin, call_frame_visitor, fixup);
|
|
||||||
begin++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Fixup>
|
template <typename Fixup>
|
||||||
void slot_visitor<Fixup>::visit_uninitialized_code_blocks() {
|
void slot_visitor<Fixup>::visit_uninitialized_code_blocks() {
|
||||||
std::map<code_block*, cell>* uninitialized_blocks =
|
|
||||||
&parent->code->uninitialized_blocks;
|
|
||||||
std::map<code_block*, cell>::const_iterator iter =
|
|
||||||
uninitialized_blocks->begin();
|
|
||||||
std::map<code_block*, cell>::const_iterator end = uninitialized_blocks->end();
|
|
||||||
|
|
||||||
std::map<code_block*, cell> new_uninitialized_blocks;
|
std::map<code_block*, cell> new_uninitialized_blocks;
|
||||||
for (; iter != end; iter++) {
|
FACTOR_FOR_EACH(parent->code->uninitialized_blocks) {
|
||||||
new_uninitialized_blocks.insert(
|
new_uninitialized_blocks.insert(
|
||||||
std::make_pair(fixup.fixup_code(iter->first), iter->second));
|
std::make_pair(fixup.fixup_code(iter->first), iter->second));
|
||||||
}
|
}
|
||||||
|
|
||||||
parent->code->uninitialized_blocks = new_uninitialized_blocks;
|
parent->code->uninitialized_blocks = new_uninitialized_blocks;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,11 @@
|
||||||
namespace factor {
|
namespace factor {
|
||||||
|
|
||||||
|
// Poor mans range-based for loops.
|
||||||
|
#define FACTOR_FOR_EACH(iterable) \
|
||||||
|
for (typeof(iterable.begin()) iter = iterable.begin(); \
|
||||||
|
iter != iterable.end(); \
|
||||||
|
iter++)
|
||||||
|
|
||||||
inline static void memset_2(void* dst, uint16_t pattern, size_t size) {
|
inline static void memset_2(void* dst, uint16_t pattern, size_t size) {
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
cell cell_pattern = (pattern | (pattern << 16));
|
cell cell_pattern = (pattern | (pattern << 16));
|
||||||
|
|
Loading…
Reference in New Issue