summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libguile/extensions.h2
-rw-r--r--libguile/frames.c2
-rw-r--r--libguile/instructions.c3
-rw-r--r--libguile/objcodes.c2
-rw-r--r--libguile/programs.c2
-rw-r--r--libguile/vm.c3
-rw-r--r--module/system/vm/frame.scm3
-rw-r--r--module/system/vm/instruction.scm2
-rw-r--r--module/system/vm/objcode.scm2
-rw-r--r--module/system/vm/program.scm2
-rw-r--r--module/system/vm/vm.scm2
11 files changed, 19 insertions, 6 deletions
diff --git a/libguile/extensions.h b/libguile/extensions.h
index 596b43ae0..260567e51 100644
--- a/libguile/extensions.h
+++ b/libguile/extensions.h
@@ -26,6 +26,8 @@
+typedef void (*scm_t_extension_init_func)(void*);
+
SCM_API void scm_c_register_extension (const char *lib, const char *init,
void (*func) (void *), void *data);
diff --git a/libguile/frames.c b/libguile/frames.c
index 647cb608d..eb3bc22ee 100644
--- a/libguile/frames.c
+++ b/libguile/frames.c
@@ -297,6 +297,8 @@ scm_bootstrap_frames (void)
scm_set_smob_mark (scm_tc16_vm_frame, vm_frame_mark);
scm_set_smob_free (scm_tc16_vm_frame, vm_frame_free);
scm_set_smob_print (scm_tc16_vm_frame, vm_frame_print);
+ scm_c_register_extension ("libguile", "scm_init_frames",
+ (scm_t_extension_init_func)scm_init_frames, NULL);
}
void
diff --git a/libguile/instructions.c b/libguile/instructions.c
index b33c8d203..4f504f0a2 100644
--- a/libguile/instructions.c
+++ b/libguile/instructions.c
@@ -215,6 +215,9 @@ SCM_DEFINE (scm_opcode_to_instruction, "opcode->instruction", 1, 0, 0,
void
scm_bootstrap_instructions (void)
{
+ scm_c_register_extension ("libguile", "scm_init_instructions",
+ (scm_t_extension_init_func)scm_init_instructions,
+ NULL);
}
void
diff --git a/libguile/objcodes.c b/libguile/objcodes.c
index 3e30b2d60..c53cf2253 100644
--- a/libguile/objcodes.c
+++ b/libguile/objcodes.c
@@ -266,6 +266,8 @@ scm_bootstrap_objcodes (void)
{
scm_tc16_objcode = scm_make_smob_type ("objcode", 0);
scm_set_smob_mark (scm_tc16_objcode, objcode_mark);
+ scm_c_register_extension ("libguile", "scm_init_objcodes",
+ (scm_t_extension_init_func)scm_init_objcodes, NULL);
}
/* Before, we used __BYTE_ORDER, but that is not defined on all
diff --git a/libguile/programs.c b/libguile/programs.c
index 1d6318c6c..c97f61e13 100644
--- a/libguile/programs.c
+++ b/libguile/programs.c
@@ -368,6 +368,8 @@ scm_bootstrap_programs (void)
scm_smobs[SCM_TC2SMOBNUM (scm_tc16_program)].apply_1 = program_apply_1;
scm_smobs[SCM_TC2SMOBNUM (scm_tc16_program)].apply_2 = program_apply_2;
scm_set_smob_print (scm_tc16_program, program_print);
+ scm_c_register_extension ("libguile", "scm_init_programs",
+ (scm_t_extension_init_func)scm_init_programs, NULL);
}
void
diff --git a/libguile/vm.c b/libguile/vm.c
index 0646becdb..53e9e154e 100644
--- a/libguile/vm.c
+++ b/libguile/vm.c
@@ -662,6 +662,9 @@ scm_bootstrap_vm (void)
sym_vm_error = scm_permanent_object (scm_from_locale_symbol ("vm-error"));
sym_debug = scm_permanent_object (scm_from_locale_symbol ("debug"));
+ scm_c_register_extension ("libguile", "scm_init_vm",
+ (scm_t_extension_init_func)scm_init_vm, NULL);
+
strappage = 1;
}
diff --git a/module/system/vm/frame.scm b/module/system/vm/frame.scm
index a74d903da..33a1e1b60 100644
--- a/module/system/vm/frame.scm
+++ b/module/system/vm/frame.scm
@@ -42,8 +42,7 @@
frame-return-address frame-program
frame-dynamic-link heap-frame?))
-;; fixme: avoid the dynamic-call?
-(dynamic-call "scm_init_frames" (dynamic-link "libguile"))
+(load-extension "libguile" "scm_init_frames")
;;;
;;; Frame chain
diff --git a/module/system/vm/instruction.scm b/module/system/vm/instruction.scm
index c820e9952..3ad718ea8 100644
--- a/module/system/vm/instruction.scm
+++ b/module/system/vm/instruction.scm
@@ -25,4 +25,4 @@
instruction-pops instruction-pushes
instruction->opcode opcode->instruction))
-(dynamic-call "scm_init_instructions" (dynamic-link "libguile"))
+(load-extension "libguile" "scm_init_instructions")
diff --git a/module/system/vm/objcode.scm b/module/system/vm/objcode.scm
index df1ff26e4..ab6bb4bae 100644
--- a/module/system/vm/objcode.scm
+++ b/module/system/vm/objcode.scm
@@ -25,4 +25,4 @@
load-objcode write-objcode
word-size byte-order))
-(dynamic-call "scm_init_objcodes" (dynamic-link "libguile"))
+(load-extension "libguile" "scm_init_objcodes")
diff --git a/module/system/vm/program.scm b/module/system/vm/program.scm
index 7e4007b75..5a490b9d9 100644
--- a/module/system/vm/program.scm
+++ b/module/system/vm/program.scm
@@ -36,7 +36,7 @@
program-objcode program? program-objects
program-module program-base program-external))
-(dynamic-call "scm_init_programs" (dynamic-link "libguile"))
+(load-extension "libguile" "scm_init_programs")
(define arity:nargs car)
(define arity:nrest cadr)
diff --git a/module/system/vm/vm.scm b/module/system/vm/vm.scm
index de5c3fa21..48dc4f2b8 100644
--- a/module/system/vm/vm.scm
+++ b/module/system/vm/vm.scm
@@ -32,7 +32,7 @@
vm-next-hook vm-apply-hook vm-boot-hook vm-return-hook
vm-break-hook vm-exit-hook vm-halt-hook vm-enter-hook))
-(dynamic-call "scm_init_vm" (dynamic-link "libguile"))
+(load-extension "libguile" "scm_init_vm")
(define (vms:time stat) (vector-ref stat 0))
(define (vms:clock stat) (vector-ref stat 1))