diff options
author | Andy Wingo <wingo@pobox.com> | 2008-08-07 13:11:27 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2008-08-07 13:11:27 +0200 |
commit | 07e56b27a1841d70e562ac69b9ef9d25d489ceb3 (patch) | |
tree | 5953919e3b45e6e3c1f5a472da088a666fd1a96c /src/vm.c | |
parent | 1865ad56804be4da82a6247a868a81648ebe87b3 (diff) | |
download | guile-07e56b27a1841d70e562ac69b9ef9d25d489ceb3.tar.gz |
big reorg of scheme modules -- e.g. programs.c -> (system vm program)
This reorganization kills the ugly module-export-all hacks in
bootstrap.scm and core.scm. In fact, it gets rid of core.scm entirely,
breaking out its functionality into separate files.
* module/system/vm/trace.scm:
* module/system/vm/profile.scm:
* module/system/vm/disasm.scm:
* module/system/vm/debug.scm:
* module/system/vm/conv.scm:
* module/system/vm/assemble.scm:
* module/system/repl/repl.scm:
* module/system/repl/common.scm:
* module/system/base/compile.scm:
* module/system/repl/command.scm: Update for changes, and fix a bug in
procedure-documentation.
* module/system/vm/bootstrap.scm: Just call scm_bootstrap_vm, which
handles setting load-compiled for us.
* module/system/vm/core.scm: Removed, functionality folded into other
modules.
* module/system/vm/frame.scm: Export the C frame procedures here; also
move scheme functions from core.scm here.
* module/system/vm/instruction.scm: New file, exports procedures from
instructions.c.
* module/system/vm/objcode.scm: New file, exports procedures from
objcodes.c.
* module/system/vm/program.scm: New file, exports procedures from
programs.c, and some scheme functions originally from core.scm.
* module/system/vm/vm.scm: New file, from vm.c and core.scm.
* src/Makefile.am (libguile_vm_la_SOURCES): Add bootstrap.h.
* src/bootstrap.h: New file, prototypes scm_bootstrap_vm (), which the
scm_init_* functions call.
* src/frames.h:
* src/frames.c (scm_init_frames):
* src/frames.c (scm_bootstrap_frames):
* src/vm.h:
* src/instructions.h:
* src/instructions.c (scm_init_instructions):
* src/instructions.c (scm_bootstrap_instructions):
* src/objcodes.h:
* src/objcodes.c (scm_bootstrap_objcodes):
* src/objcodes.c (scm_init_objcodes):
* src/programs.h:
* src/programs.c (scm_bootstrap_programs):
* src/programs.c (scm_init_programs):
* src/vm.c (scm_bootstrap_vm):
* src/vm.c (scm_init_vm): Call scm_bootstrap_vm() before doing anything
in an init function. Bootstrap_vm will call bootstrap_instructions(),
etc to initialize types, then set load-compiled to point to
load-compiled/vm.
* src/vm.c (scm_load_compiled_with_vm): Code to load .go files, if
they're present.
Diffstat (limited to 'src/vm.c')
-rw-r--r-- | src/vm.c | 35 |
1 files changed, 30 insertions, 5 deletions
@@ -561,13 +561,25 @@ SCM_DEFINE (scm_vm_fetch_stack, "vm-fetch-stack", 1, 0, 0, * Initialize */ +SCM scm_load_compiled_with_vm (SCM file) +{ + SCM program = scm_objcode_to_program (scm_load_objcode (file)); + + return vm_run (the_vm, program, SCM_EOL); +} + void -scm_init_vm (void) +scm_bootstrap_vm (void) { - scm_init_frames (); - scm_init_instructions (); - scm_init_objcodes (); - scm_init_programs (); + static int strappage = 0; + + if (strappage) + return; + + scm_bootstrap_frames (); + scm_bootstrap_instructions (); + scm_bootstrap_objcodes (); + scm_bootstrap_programs (); scm_tc16_vm_cont = scm_make_smob_type ("vm-cont", 0); scm_set_smob_mark (scm_tc16_vm_cont, vm_cont_mark); @@ -580,6 +592,19 @@ scm_init_vm (void) the_vm = scm_permanent_object (make_vm ()); + /* a bit heavy-handed, this */ + scm_variable_set_x (scm_c_lookup ("load-compiled"), + scm_c_make_gsubr ("load-compiled/vm", 1, 0, 0, + scm_load_compiled_with_vm)); + + strappage = 1; +} + +void +scm_init_vm (void) +{ + scm_bootstrap_vm (); + #ifndef SCM_MAGIC_SNARFER #include "vm.x" #endif |