From fa2dccd6d3688ed7fa0965057f3fe2c804c654b9 Mon Sep 17 00:00:00 2001 From: Phil Dawes Date: Sat, 22 Aug 2009 21:35:47 +0100 Subject: [PATCH] vm passed in box_alien and alien_offset (win32) --- vm/alien.cpp | 15 +++++++++++---- vm/alien.hpp | 4 ++-- vm/os-unix.cpp | 2 +- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/vm/alien.cpp b/vm/alien.cpp index 6c83f87182..23ca60bf6a 100755 --- a/vm/alien.cpp +++ b/vm/alien.cpp @@ -218,9 +218,10 @@ char *factorvm::alien_offset(cell obj) } } -VM_C_API char *alien_offset(cell obj) +VM_C_API char *alien_offset(cell obj, factorvm *myvm) { - return vm->alien_offset(obj); + ASSERTVM(); + return VM_PTR->alien_offset(obj); } /* pop an object representing a C pointer */ @@ -231,6 +232,7 @@ char *factorvm::unbox_alien() VM_C_API char *unbox_alien() { + printf("*PHIL unbox_alien\n"); return vm->unbox_alien(); } @@ -243,9 +245,10 @@ void factorvm::box_alien(void *ptr) dpush(allot_alien(F,(cell)ptr)); } -VM_C_API void box_alien(void *ptr) +VM_C_API void box_alien(void *ptr, factorvm *myvm) { - return vm->box_alien(ptr); + ASSERTVM(); + return VM_PTR->box_alien(ptr); } /* for FFI calls passing structs by value */ @@ -256,6 +259,7 @@ void factorvm::to_value_struct(cell src, void *dest, cell size) VM_C_API void to_value_struct(cell src, void *dest, cell size) { + printf("PHIL to_value_struct\n"); return vm->to_value_struct(src,dest,size); } @@ -269,6 +273,7 @@ void factorvm::box_value_struct(void *src, cell size) VM_C_API void box_value_struct(void *src, cell size) { + printf("PHIL box_value_struct\n"); return vm->box_value_struct(src,size); } @@ -283,6 +288,7 @@ void factorvm::box_small_struct(cell x, cell y, cell size) VM_C_API void box_small_struct(cell x, cell y, cell size) { + printf("PHIL box_small_struct\n"); return vm->box_small_struct(x,y,size); } @@ -299,6 +305,7 @@ void factorvm::box_medium_struct(cell x1, cell x2, cell x3, cell x4, cell size) VM_C_API void box_medium_struct(cell x1, cell x2, cell x3, cell x4, cell size) { + printf("PHIL box_medium_struct\n"); return vm->box_medium_struct(x1, x2, x3, x4, size); } diff --git a/vm/alien.hpp b/vm/alien.hpp index 0a4f3a7e93..327d791406 100755 --- a/vm/alien.hpp +++ b/vm/alien.hpp @@ -36,9 +36,9 @@ PRIMITIVE(dlsym); PRIMITIVE(dlclose); PRIMITIVE(dll_validp); -VM_C_API char *alien_offset(cell object); +VM_C_API char *alien_offset(cell object, factorvm *vm); VM_C_API char *unbox_alien(); -VM_C_API void box_alien(void *ptr); +VM_C_API void box_alien(void *ptr, factorvm *vm); VM_C_API void to_value_struct(cell src, void *dest, cell size); VM_C_API void box_value_struct(void *src, cell size); VM_C_API void box_small_struct(cell x, cell y, cell size); diff --git a/vm/os-unix.cpp b/vm/os-unix.cpp index 189fca0cf7..3785aeda72 100644 --- a/vm/os-unix.cpp +++ b/vm/os-unix.cpp @@ -39,7 +39,7 @@ void init_ffi() void ffi_dlopen(dll *dll) { - dll->dll = dlopen(alien_offset(dll->path), RTLD_LAZY); + dll->dll = dlopen(alien_offset(dll->path,vm), RTLD_LAZY); } void *ffi_dlsym(dll *dll, symbol_char *symbol) -- 2.34.1