]> gitweb.factorcode.org Git - factor.git/commitdiff
Converted some callback fns to use member-fn pointers
authorPhil Dawes <phil@phildawes.net>
Mon, 28 Sep 2009 18:45:10 +0000 (19:45 +0100)
committerPhil Dawes <phil@phildawes.net>
Mon, 28 Sep 2009 18:45:10 +0000 (19:45 +0100)
vm/code_block.cpp
vm/code_block.hpp
vm/code_heap.cpp
vm/code_heap.hpp
vm/data_gc.cpp
vm/heap.cpp
vm/heap.hpp
vm/image.cpp
vm/profiler.cpp
vm/quotations.cpp
vm/vm.hpp

index 507dd3bd615aaf8bd363ac7c5b83fb4a27e447cf..43094676375d045d8c0b8d4e43d82bd461830a51 100755 (executable)
@@ -199,7 +199,7 @@ void factor_vm::iterate_relocations(code_block *compiled, relocation_iterator it
                for(cell i = 0; i < length; i++)
                {
                        relocation_entry rel = relocation->data<relocation_entry>()[i];
-                       iter(rel,index,compiled,this);
+                       (this->*iter)(rel,index,compiled);
                        index += number_of_parameters(relocation_type_of(rel));                 
                }
        }
@@ -290,7 +290,7 @@ void factor_vm::update_literal_references(code_block *compiled)
 {
        if(!compiled->needs_fixup)
        {
-               iterate_relocations(compiled,factor::update_literal_references_step);
+               iterate_relocations(compiled,&factor_vm::update_literal_references_step);
                flush_icache_for(compiled);
        }
 }
@@ -320,11 +320,6 @@ void factor_vm::copy_literal_references(code_block *compiled)
        }
 }
 
-void copy_literal_references(code_block *compiled, factor_vm *myvm)
-{
-       return myvm->copy_literal_references(compiled);
-}
-
 /* Compute an address to store at a relocation */
 void factor_vm::relocate_code_block_step(relocation_entry rel, cell index, code_block *compiled)
 {
@@ -374,7 +369,7 @@ void factor_vm::update_word_references(code_block *compiled)
                code->heap_free(compiled);
        else
        {
-               iterate_relocations(compiled,factor::update_word_references_step);
+               iterate_relocations(compiled,&factor_vm::update_word_references_step);
                flush_icache_for(compiled);
        }
 }
@@ -473,7 +468,7 @@ void factor_vm::relocate_code_block(code_block *compiled)
 {
        compiled->last_scan = data->nursery();
        compiled->needs_fixup = false;
-       iterate_relocations(compiled,factor::relocate_code_block_step);
+       iterate_relocations(compiled,&factor_vm::relocate_code_block_step);
        flush_icache_for(compiled);
 }
 
index 0a7e0e9cc8ccf4c62f7f8cdf81ada26bd4a08284..ecdd22864f1c262e63618e3741fe2b4c6df4e9e0 100644 (file)
@@ -62,14 +62,4 @@ static const cell rel_relative_arm_3_mask = 0xffffff;
 /* code relocation table consists of a table of entries for each fixup */
 typedef u32 relocation_entry;
 
-struct factor_vm;
-
-typedef void (*relocation_iterator)(relocation_entry rel, cell index, code_block *compiled, factor_vm *vm);
-
-// callback functions
-void relocate_code_block(code_block *compiled, factor_vm *myvm);
-void copy_literal_references(code_block *compiled, factor_vm *myvm);
-void update_word_references(code_block *compiled, factor_vm *myvm);
-void update_literal_and_word_references(code_block *compiled, factor_vm *myvm);
-
 }
index 233a5809801ff7c1d94c7afa915eb77a2396b1af..49b538c0adfa8a33375a3d3c18410546df4533d5 100755 (executable)
@@ -36,7 +36,7 @@ void factor_vm::iterate_code_heap(code_heap_iterator iter)
        while(scan)
        {
                if(scan->status != B_FREE)
-                       iter((code_block *)scan,this);
+                       (this->*iter)((code_block *)scan);
                scan = code->next_block(scan);
        }
 }
@@ -45,14 +45,14 @@ void factor_vm::iterate_code_heap(code_heap_iterator iter)
 aging and nursery collections */
 void factor_vm::copy_code_heap_roots()
 {
-       iterate_code_heap(factor::copy_literal_references);
+       iterate_code_heap(&factor_vm::copy_literal_references);
 }
 
 /* Update pointers to words referenced from all code blocks. Only after
 defining a new word. */
 void factor_vm::update_code_heap_words()
 {
-       iterate_code_heap(factor::update_word_references);
+       iterate_code_heap(&factor_vm::update_word_references);
 }
 
 void factor_vm::primitive_modify_code_heap()
index 1f2fbea34934026d13b25760c6b6ae8b8cb6ff66..412ef35bb4403ee39e5aa0ef975114ad79a07a9b 100755 (executable)
@@ -1,7 +1,4 @@
 namespace factor
 {
 
-struct factor_vm;
-typedef void (*code_heap_iterator)(code_block *compiled, factor_vm *myvm);
-
 }
index b20848b2aad581e756f3e0bcdeb2012a4eefa741..58c2b914f2e5670b37858982157fe6dc64561c3a 100755 (executable)
@@ -546,7 +546,7 @@ void factor_vm::garbage_collection(cell gen,bool growing_data_heap_,cell request
                code_heap_scans++;
 
                if(collecting_gen == data->tenured())
-                       code->free_unmarked((heap_iterator)factor::update_literal_and_word_references);
+                       code->free_unmarked((heap_iterator)&factor_vm::update_literal_and_word_references);
                else
                        copy_code_heap_roots();
 
index c8262cb7f50a191aac6d6934e36e31bf2b05f8bb..8b0e487b60f569c1f11a362b0bc0bb21d539d263 100644 (file)
@@ -244,7 +244,7 @@ void heap::free_unmarked(heap_iterator iter)
                                add_to_free_list((free_heap_block *)prev);
                        scan->status = B_ALLOCATED;
                        prev = scan;
-                       iter(scan,myvm);
+                       (myvm->*iter)(scan);
                        break;
                default:
                        myvm->critical_error("Invalid scan->status",(cell)scan);
index ab1cfeef6dd32fd4346cf9f23a53f802061ca369..c5d170a3d7e7067660487708bacc6601cd8f110a 100644 (file)
@@ -9,7 +9,7 @@ struct heap_free_list {
        free_heap_block *large_blocks;
 };
 
-typedef void (*heap_iterator)(heap_block *compiled, factor_vm *vm);
+typedef void (factor_vm::*heap_iterator)(heap_block *compiled);
 
 struct heap {
        factor_vm *myvm;
index 97d193f5fd8ed9127b54361cc184db8081d1a9df..e3f7784f4f828f6e24e0648ac9efbe9ef1ad7d04 100755 (executable)
@@ -303,7 +303,7 @@ void fixup_code_block(code_block *compiled, factor_vm *myvm)
 
 void factor_vm::relocate_code()
 {
-       iterate_code_heap(factor::fixup_code_block);
+       iterate_code_heap(&factor_vm::fixup_code_block);
 }
 
 /* Read an image file from disk, only done once during startup */
index 6f1e4ff63d6410cd04476fc913663042b74b4e90..eaa1dbbf275ceed8c3abae894698c86e4c2b8bb3 100755 (executable)
@@ -44,7 +44,7 @@ void factor_vm::set_profiling(bool profiling)
        }
 
        /* Update XTs in code heap */
-       iterate_code_heap(factor::relocate_code_block);
+       iterate_code_heap(&factor_vm::relocate_code_block);
 }
 
 void factor_vm::primitive_profiling()
index ca2dde494e8e9a875ea094e46f47fc553829c839..4cef00e1170d35c7b28280fcf9d33976f00c30cf 100755 (executable)
@@ -330,7 +330,7 @@ void factor_vm::compile_all_words()
 
        }
 
-       iterate_code_heap(factor::relocate_code_block);
+       iterate_code_heap(&factor_vm::relocate_code_block);
 }
 
 /* Allocates memory */
index 46c9865cca89299cde385e94b17633b141ed742c..a6a8c9689932ca2cc723b19d70c59e486bcb9e93 100644 (file)
--- a/vm/vm.hpp
+++ b/vm/vm.hpp
@@ -484,6 +484,8 @@ struct factor_vm
        void primitive_fclose();
 
        //code_block
+       typedef void (factor_vm::*relocation_iterator)(relocation_entry rel, cell index, code_block *compiled);
+
        relocation_type relocation_type_of(relocation_entry r);
        relocation_class relocation_class_of(relocation_entry r);
        cell relocation_offset_of(relocation_entry r);
@@ -524,6 +526,7 @@ struct factor_vm
        //code_heap
        heap *code;
        unordered_map<heap_block *, char *> forwarding;
+       typedef void (factor_vm::*code_heap_iterator)(code_block *compiled);
 
        void init_code_heap(cell size);
        bool in_code_heap_p(cell ptr);