From 60ae5ca2a31a89b8930089f7dbfa3a99ac727383 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 27 Mar 2009 18:40:15 -0700 Subject: [PATCH] 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. --- libguile/extensions.h | 2 ++ libguile/frames.c | 2 ++ libguile/instructions.c | 3 +++ libguile/objcodes.c | 2 ++ libguile/programs.c | 2 ++ libguile/vm.c | 3 +++ module/system/vm/frame.scm | 3 +-- module/system/vm/instruction.scm | 2 +- module/system/vm/objcode.scm | 2 +- module/system/vm/program.scm | 2 +- module/system/vm/vm.scm | 2 +- 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))