]> gitweb.factorcode.org Git - factor.git/commitdiff
VM: new method compute_external_address
authorBjörn Lindqvist <bjourne@gmail.com>
Thu, 30 Jul 2015 23:14:38 +0000 (01:14 +0200)
committerBjörn Lindqvist <bjourne@gmail.com>
Tue, 4 Aug 2015 14:02:08 +0000 (16:02 +0200)
vm/code_blocks.cpp
vm/vm.hpp

index af992de54563c2be8f06397643fd22f8e41cebcf..53f783418389804aff19802f0bde1e23d10d7492 100644 (file)
@@ -259,34 +259,34 @@ cell factor_vm::lookup_external_address(relocation_type rel_type,
   }
 }
 
-void factor_vm::store_external_address(instruction_operand op) {
-
+cell factor_vm::compute_external_address(instruction_operand op) {
   code_block* compiled = op.compiled;
   array* parameters = to_boolean(compiled->parameters)
       ? untag<array>(compiled->parameters)
       : NULL;
-  cell index = op.index;
+  cell idx = op.index;
   relocation_type rel_type = op.rel_type();
 
-  cell ext_addr = lookup_external_address(rel_type,
-                                          compiled,
-                                          parameters,
-                                          index);
+  cell ext_addr = lookup_external_address(rel_type, compiled, parameters, idx);
   if (ext_addr == (cell)-1) {
     ostringstream ss;
     print_obj(ss, compiled->owner);
     ss << ": ";
     cell arg;
     if (rel_type == RT_DLSYM || rel_type == RT_DLSYM_TOC) {
-      ss << "Bad symbol specifier in store_external_address";
-      arg = array_nth(parameters, index);
+      ss << "Bad symbol specifier in compute_external_address";
+      arg = array_nth(parameters, idx);
     } else {
-      ss << "Bad rel type in store_external_address";
+      ss << "Bad rel type in compute_external_address";
       arg = rel_type;
     }
     critical_error(ss.str().c_str(), arg);
   }
-  op.store_value(ext_addr);
+  return ext_addr;
+}
+
+void factor_vm::store_external_address(instruction_operand op) {
+  op.store_value(compute_external_address(op));
 }
 
 cell factor_vm::compute_here_address(cell arg, cell offset,
index ba1218608ca6452551258c8d34c439de997e7985..645a7557c14548a9079567237feccb095f8fd682 100644 (file)
--- a/vm/vm.hpp
+++ b/vm/vm.hpp
@@ -559,6 +559,8 @@ struct factor_vm {
   cell compute_entry_point_pic_address(word* w, cell tagged_quot);
   cell compute_entry_point_pic_address(cell w_);
   cell compute_entry_point_pic_tail_address(cell w_);
+  cell compute_external_address(instruction_operand op);
+
   cell code_block_owner(code_block* compiled);
   void update_word_references(code_block* compiled, bool reset_inline_caches);
   void undefined_symbol();