]> gitweb.factorcode.org Git - factor.git/commitdiff
VM: some more fixing to make the types match better, converting void* to cell
authorBjörn Lindqvist <bjourne@gmail.com>
Mon, 5 Jan 2015 13:04:12 +0000 (14:04 +0100)
committerBjörn Lindqvist <bjourne@gmail.com>
Thu, 15 Jan 2015 09:29:13 +0000 (09:29 +0000)
vm/callstack.cpp
vm/callstack.hpp
vm/code_block_visitor.hpp
vm/code_blocks.cpp
vm/code_blocks.hpp
vm/debug.cpp
vm/sampling_profiler.cpp
vm/slot_visitor.hpp

index 7730ae554af5b98cb1c186cbe98fe3c4a0dc036d..b2bed5c8837936a70dd0c295e289085cb204ee1e 100644 (file)
@@ -67,8 +67,7 @@ struct stack_frame_accumulator {
 
 
   /* Allocates memory (frames.add()) */
-  void operator()(void* frame_top, cell frame_size, code_block* owner,
-                  void* addr) {
+  void operator()(cell frame_top, cell size, code_block* owner, cell addr) {
     data_root<object> executing_quot(owner->owner_quot(), parent);
     data_root<object> executing(owner->owner, parent);
     data_root<object> scan(owner->scan(parent, addr), parent);
@@ -113,7 +112,7 @@ void factor_vm::primitive_innermost_stack_frame_executing() {
 void factor_vm::primitive_innermost_stack_frame_scan() {
   callstack* stack = untag_check<callstack>(ctx->peek());
   void* frame = stack->top();
-  void* addr = *(void**)frame;
+  cell addr = *(cell*)frame;
   ctx->replace(code->code_block_for_address((cell)addr)->scan(this, addr));
 }
 
index 58a719dd5d006526f954e7c7c8f4abae12dcf1d6..d7ae087542eac5be242188c5bc007a36b8607181 100644 (file)
@@ -16,14 +16,14 @@ inline void factor_vm::iterate_callstack_object(callstack* stack_,
   fixnum frame_offset = 0;
 
   while (frame_offset < frame_length) {
-    void* frame_top = stack->frame_top_at(frame_offset);
-    void* addr = *(void**)frame_top;
+    cell frame_top = (cell)stack->frame_top_at(frame_offset);
+    cell addr = *(cell*)frame_top;
+    cell fixed_addr = Fixup::translated_code_block_map
+                          ? (cell)fixup.translate_code((code_block*)addr)
+                          : addr;
+    code_block* owner = code->code_block_for_address(fixed_addr);
 
-    void* fixed_addr = Fixup::translated_code_block_map
-                           ? (void*)fixup.translate_code((code_block*)addr)
-                           : addr;
-    code_block* owner = code->code_block_for_address((cell)fixed_addr);
-    cell frame_size = owner->stack_frame_size_for_address((cell)fixed_addr);
+    cell frame_size = owner->stack_frame_size_for_address(fixed_addr);
 
     iterator(frame_top, frame_size, owner, fixed_addr);
     frame_offset += frame_size;
@@ -46,23 +46,22 @@ inline void factor_vm::iterate_callstack(context* ctx, Iterator& iterator,
   cell frame_top = ctx->callstack_top;
 
   while (frame_top < ctx->callstack_bottom) {
-    void* addr = *(void**)frame_top;
+    cell addr = *(cell*)frame_top;
     FACTOR_ASSERT(addr != 0);
-    void* fixed_addr = Fixup::translated_code_block_map
-                           ? (void*)fixup.translate_code((code_block*)addr)
-                           : addr;
+    cell fixed_addr = Fixup::translated_code_block_map
+                          ? (cell)fixup.translate_code((code_block*)addr)
+                          : addr;
 
-    code_block* owner = code->code_block_for_address((cell)fixed_addr);
+    code_block* owner = code->code_block_for_address(fixed_addr);
     code_block* fixed_owner =
         Fixup::translated_code_block_map ? owner : fixup.translate_code(owner);
 
-    cell frame_size =
-        fixed_owner->stack_frame_size_for_address((cell)fixed_addr);
+    cell frame_size = fixed_owner->stack_frame_size_for_address(fixed_addr);
 
-    void* fixed_addr_for_iter =
+    cell fixed_addr_for_iter =
         Fixup::translated_code_block_map ? fixed_addr : addr;
 
-    iterator((void*)frame_top, frame_size, owner, fixed_addr_for_iter);
+    iterator(frame_top, frame_size, owner, fixed_addr_for_iter);
     frame_top += frame_size;
   }
 }
index 92e989511e436ca1d47eed75bdce8ac55db84d58..6c06d7458925e64556a66a947771278e3eb03f86 100644 (file)
@@ -39,13 +39,12 @@ template <typename Fixup> struct call_frame_code_block_visitor {
   call_frame_code_block_visitor(factor_vm* parent, Fixup fixup)
       : parent(parent), fixup(fixup) {}
 
-  void operator()(void* frame_top, cell frame_size, code_block* owner,
-                  void* addr) {
+  void operator()(cell frame_top, cell size, code_block* owner, cell addr) {
     code_block* compiled =
         Fixup::translated_code_block_map ? owner : fixup.fixup_code(owner);
-    void* fixed_addr = compiled->address_for_offset(owner->offset(addr));
+    cell fixed_addr = compiled->address_for_offset(owner->offset((void*)addr));
 
-    *(void**)frame_top = fixed_addr;
+    *(cell*)frame_top = fixed_addr;
   }
 };
 
index 5acec4b12942563697afde4bedcff1e6cbeb5e85..d89f457b5aae435246b8b493d6ab63106e21ae77 100644 (file)
@@ -11,7 +11,7 @@ cell code_block::owner_quot() const {
 
 /* If the code block is an unoptimized quotation, we can calculate the
    scan offset. In all other cases -1 is returned. */
-cell code_block::scan(factor_vm* vm, void* addr) const {
+cell code_block::scan(factor_vm* vm, cell addr) const {
   if (type() != code_block_unoptimized) {
     return tag_fixnum(-1);
   }
@@ -22,7 +22,7 @@ cell code_block::scan(factor_vm* vm, void* addr) const {
   if (!obj.type_p(QUOTATION_TYPE))
     return tag_fixnum(-1);
 
-  cell ofs = offset(addr);
+  cell ofs = offset((void*)addr);
   return tag_fixnum(vm->quot_code_offset_to_scan(obj.value(), ofs));
 }
 
index 6393c6f7e61db400f71b6cf6667be0bb318253c0..56fc09e2e71667af4f468f5f1a9a7aa5bd5c1ff4 100644 (file)
@@ -94,11 +94,11 @@ struct code_block {
 
   cell offset(void* addr) const { return (char*)addr - (char*)entry_point(); }
 
-  void* address_for_offset(cell offset) const {
-    return (void*)((char*)entry_point() + offset);
+  cell address_for_offset(cell offset) const {
+    return (cell)((char*)entry_point() + offset);
   }
 
-  cell scan(factor_vm* vm, void* addr) const;
+  cell scan(factor_vm* vm, cell addr) const;
   cell owner_quot() const;
 };
 
index 821cc60dc98a66704992209075adaf82ac1646de..218f21eba3768cdd5e250af040a2fd7111a44911 100644 (file)
@@ -190,10 +190,9 @@ struct stack_frame_printer {
   factor_vm* parent;
 
   explicit stack_frame_printer(factor_vm* parent) : parent(parent) {}
-  void operator()(void* frame_top, cell frame_size, code_block* owner,
-                  void* addr) {
+  void operator()(cell frame_top, cell size, code_block* owner, cell addr) {
     std::cout << std::endl;
-    std::cout << "frame: " << frame_top << " size " << frame_size << std::endl;
+    std::cout << "frame: " << (void*)frame_top << " size " << size << std::endl;
     std::cout << "executing: ";
     parent->print_obj(owner->owner);
     std::cout << std::endl;
@@ -207,7 +206,7 @@ struct stack_frame_printer {
     std::cout << std::hex << (cell)owner->entry_point() << std::dec;
     std::cout << std::endl;
     std::cout << "return address: ";
-    std::cout << std::hex << (cell)addr << std::dec;
+    std::cout << std::hex << addr << std::dec;
     std::cout << std::endl;
   }
 };
index 5c527a8f99702c8643a7f79157eba5b2ea7afdf3..2373af129a3fb2f2557a18b327e8bfe11ba00eca 100644 (file)
@@ -47,8 +47,7 @@ struct record_callstack_sample_iterator {
                                    bool prolog_p)
       : sample_callstacks(sample_callstacks), skip_p(prolog_p) {}
 
-  void operator()(void* frame_top, cell frame_size, code_block* owner,
-                  void* addr) {
+  void operator()(cell frame_top, cell size, code_block* owner, cell addr) {
     if (skip_p)
       skip_p = false;
     else
index e19205e499d6fa7d616a80db9ef9584ce84516c3..fddb5d0d53b869c74a82c1d9e1c2f2b453ab4782 100644 (file)
@@ -294,9 +294,8 @@ template <typename Fixup> struct call_frame_slot_visitor {
                     [entry_point]
                     [size]
        */
-  void operator()(void* frame_top, cell frame_size, code_block* owner,
-                  void* addr) {
-    cell return_address = owner->offset(addr);
+  void operator()(cell frame_top, cell size, code_block* owner, cell addr) {
+    cell return_address = owner->offset((void*)addr);
 
     code_block* compiled =
         Fixup::translated_code_block_map ? owner