diff --git a/vm/code_block_visitor.hpp b/vm/code_block_visitor.hpp index 33e889c940..0f17d4041d 100644 --- a/vm/code_block_visitor.hpp +++ b/vm/code_block_visitor.hpp @@ -50,7 +50,7 @@ template struct code_block_visitor { if(w->code) w->code = visitor(w->code); if(w->profiling) - w->code = visitor(w->profiling); + w->profiling = visitor(w->profiling); parent->update_word_xt(w); break; diff --git a/vm/collector.hpp b/vm/collector.hpp index 9b3faaf31f..2e28da3f49 100644 --- a/vm/collector.hpp +++ b/vm/collector.hpp @@ -183,11 +183,8 @@ template struct collector { cell *slot_ptr = (cell *)start; cell *end_ptr = (cell *)end; - if(slot_ptr != end_ptr) - { - for(; slot_ptr < end_ptr; slot_ptr++) - workhorse.visit_handle(slot_ptr); - } + for(; slot_ptr < end_ptr; slot_ptr++) + workhorse.visit_handle(slot_ptr); } } diff --git a/vm/data_heap.cpp b/vm/data_heap.cpp index e13d0dbae1..9ce8a90766 100755 --- a/vm/data_heap.cpp +++ b/vm/data_heap.cpp @@ -245,7 +245,7 @@ cell factor_vm::instances(cell type) each_object(accum); cell object_count = accum.objects.size(); - data_roots.push_back(accum.objects[0]); + data_roots.push_back((cell)&accum.objects[0]); data_roots.push_back(object_count); array *objects = allot_array(object_count,false_object); diff --git a/vm/profiler.cpp b/vm/profiler.cpp index 50e88cc57a..403d26f0ca 100755 --- a/vm/profiler.cpp +++ b/vm/profiler.cpp @@ -25,17 +25,16 @@ void factor_vm::set_profiling(bool profiling) if(profiling == profiling_p) return; - profiling_p = profiling; - /* Push everything to tenured space so that we can heap scan and allocate profiling blocks if necessary */ primitive_full_gc(); data_root words(find_all_words(),this); - cell i; + profiling_p = profiling; + cell length = array_capacity(words.untagged()); - for(i = 0; i < length; i++) + for(cell i = 0; i < length; i++) { tagged word(array_nth(words.untagged(),i)); if(profiling) diff --git a/vm/slot_visitor.hpp b/vm/slot_visitor.hpp index c0263ebf11..eb24179336 100644 --- a/vm/slot_visitor.hpp +++ b/vm/slot_visitor.hpp @@ -8,18 +8,14 @@ template struct slot_visitor { explicit slot_visitor(factor_vm *parent_, Visitor visitor_) : parent(parent_), visitor(visitor_) {} - cell visit_pointer(cell pointer) - { - object *untagged = untag(pointer); - untagged = visitor(untagged); - return RETAG(untagged,TAG(pointer)); - } - void visit_handle(cell *handle) { cell pointer = *handle; - if(!immediate_p(pointer)) - *handle = visit_pointer(pointer); + if(immediate_p(pointer)) return; + + object *untagged = untag(pointer); + untagged = visitor(untagged); + *handle = RETAG(untagged,TAG(pointer)); } void visit_slots(object *ptr, cell payload_start)