big reorg of scheme modules -- e.g. programs.c -> (system vm program)
[bpt/guile.git] / src / vm.c
index d9535ba..5345728 100644 (file)
--- a/src/vm.c
+++ b/src/vm.c
@@ -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