]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/smobs.cc
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / lily / smobs.cc
index fff178ccb27746376a66c6ce24a9e84318821297..a6fdc76b9e754ee306802d4d4c213f91960e0e31 100644 (file)
 /*
   The CDR contains the actual protected list.
  */
-static SCM smob_protection_list = SCM_EOL;
+static SCM smob_protection_list;
 
 void
 init_smob_protection ()
 {
-  smob_protection_list = scm_cons (SCM_BOOL_F, SCM_EOL);
-  scm_gc_protect_object (smob_protection_list);
+  smob_protection_list = scm_cons (SCM_UNDEFINED, SCM_EOL);
+  scm_permanent_object (smob_protection_list);
 }
 ADD_SCM_INIT_FUNC (init_smob_protection, init_smob_protection);
 
 LY_DEFINE(ly_smob_protects, "ly:smob-protects",
-         0, 0, 0, (),
+         0,0,0, (),
          "Return lily's internal smob protection list")
 {
-  return scm_is_pair (smob_protection_list)
-    ? scm_cdr (smob_protection_list)
-    : SCM_EOL;
+  return scm_cdr (smob_protection_list);
 }
 
+         
+         
+
 void
 protect_smob (SCM smob, SCM *prot_cons)
 {
-#if 0
   SCM s = scm_cdr (smob_protection_list);
-  while (scm_is_pair (s) && scm_car (s) == SCM_BOOL_F)
-    {
-      s = scm_cdr (s);
-    }
+  while (scm_is_pair (s) && scm_car (s) == SCM_UNDEFINED)
+    s = scm_cdr (s);
+
   SCM prot = scm_cons (smob, s);
   scm_set_cdr_x (smob_protection_list,
                 prot);
   *prot_cons = prot;
-#else
-  (void) prot_cons; 
-  scm_gc_protect_object (smob);
-#endif
 }
 
 void
-unprotect_smob (SCM smob, SCM *prot_cons)
+unprotect_smob (SCM *prot_cons)
 {
-#if 1
-  (void) prot_cons; 
-  scm_gc_unprotect_object (smob);
-#else
   SCM next = scm_cdr (*prot_cons);
 
   if (next == SCM_EOL)
-    scm_set_car_x (*prot_cons, SCM_BOOL_F);
+    scm_set_car_x (*prot_cons, SCM_UNDEFINED);
   else
     {
-      scm_set_car_x (*prot_cons, SCM_BOOL_F);
+      scm_set_car_x (*prot_cons, SCM_UNDEFINED);
       while (scm_is_pair (next)
-            && scm_car (next) == SCM_BOOL_F)
+            && scm_car (next) == SCM_UNDEFINED)
 
        next = scm_cdr (next);
 
@@ -72,5 +63,4 @@ unprotect_smob (SCM smob, SCM *prot_cons)
     }
 
   *prot_cons = SCM_EOL;
-#endif
 }