summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-03-27 18:40:15 -0700
committerAndy Wingo <wingo@pobox.com>2009-03-27 18:40:15 -0700
commit60ae5ca2a31a89b8930089f7dbfa3a99ac727383 (patch)
tree42d85b9e6f80a794667e852605584cec428ea69a
parent845952664b24861b40d23660bb4509a967d1a271 (diff)
downloadguile-60ae5ca2a31a89b8930089f7dbfa3a99ac727383.tar.gz
frame, program, objcode, etc inits use load-extension
* libguile/extensions.h: Define a scm_t_extension_init_func. * libguile/frames.c: * libguile/instructions.c: * libguile/objcodes.c: * libguile/programs.c: * libguile/vm.c: Register extension init funcs. Should play nicer with a static Guile, in addition to working on Darwin with non-default installation prefixes without munging DYLD_LIBRARY_PATH. * module/system/vm/frame.scm: * module/system/vm/instruction.scm: * module/system/vm/objcode.scm: * module/system/vm/program.scm: * module/system/vm/vm.scm: Use load-extension.
-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))