]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/guile-init.cc
Doc-es: various updates.
[lilypond.git] / lily / guile-init.cc
index e737dcf706f8877a8854f3cdb312d25a236dd99d..4270aa01d6b9de89f093bad38df5f300b60545a0 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2006--2011 Han-Wen Nienhuys <hanwen@lilypond.org>
+  Copyright (C) 2006--2015 Han-Wen Nienhuys <hanwen@lilypond.org>
 
 
   LilyPond is free software: you can redistribute it and/or modify
 #include "lily-guile.hh"
 #include "main.hh"
 #include "warn.hh"
+#include "smobs.hh"
+#include "lily-imports.hh"
 
 /*
   INIT
 */
 
+// Why a pointer here?  Because it has zero initialization at load
+// time which is guaranteed to come before the static initializations
+// of all constructors for static expressions of the classes created
+// by ADD_SCM_INIT_FUNC.  The vector data type does not have load-time
+// initialization and might clear out already set callbacks at the
+// time it is initialized since there is no implied order among
+// non-trivial constructors for static data in separate compilation
+// units.  So we need a trivial type like a pointer instead.
+
 typedef void (*Void_fptr) ();
 vector<Void_fptr> *scm_init_funcs_;
 
@@ -38,8 +49,10 @@ void add_scm_init_func (void (*f) ())
 }
 
 void
-ly_init_ly_module (void *)
+ly_init_ly_module ()
 {
+  // Start up type system first.
+  Scm_init::init ();
   for (vsize i = scm_init_funcs_->size (); i--;)
     (scm_init_funcs_->at (i)) ();
 
@@ -51,14 +64,15 @@ ly_init_ly_module (void *)
       debug_output ("]\n", false);
     }
 
-  scm_primitive_load_path (scm_from_locale_string ("lily.scm"));
+  scm_primitive_load_path (scm_from_ascii_string ("lily.scm"));
 }
 
-SCM global_lily_module;
-
 void
 ly_c_init_guile ()
 {
-  global_lily_module = scm_c_define_module ("lily", ly_init_ly_module, 0);
+  Guile_user::module.import ();
+  Lily::module.boot (ly_init_ly_module);
+  Syntax::module.import ();
+  Display::module.import ();
   scm_c_use_module ("lily");
 }