Back in 2001 I made a patch to allow for nested StaffGroups. Unfortunately the introduced cycle in the context-hierarchy introduced a infinite loop in lilypond, leading to a stack overflow. I therefore replaced the nested StaffGroups with StaffGroup and InnerStaffGroup - as some sort of temporary solution. But here, after 6 years, they are still there. Tried to push patch to my branch in git, but as stated in other mail, I have git problems.
So I attached patch instead.

Afaics the attached patch fixes the simple "Context pointing directly to itself" version of the problem (i.e. it does NOT fix A->B->A style loops). I think that applying this patch will allow for StaffGroups to accept StaffGroups - so the we can discontinue use of InnerStaffGroup and InnerChoirStaff for anything but staffgroups containing choirstaves and vice verca.

-Rune
diff --git a/lily/context-def.cc b/lily/context-def.cc
index f4023a0..760547f 100644
--- a/lily/context-def.cc
+++ b/lily/context-def.cc
@@ -223,13 +223,16 @@ Context_def::path_to_acceptable_context (SCM type_sym, Output_def *odef) const
     {
       Context_def *g = accepteds[i];
 
-      vector<Context_def*> result
-	= g->path_to_acceptable_context (type_sym, odef);
-      if (result.size () && result.size () < best_depth)
+      if (g!=this)
 	{
-	  best_depth = result.size ();
-	  result.insert (result.begin (), g);
-	  best_result = result;
+	  vector<Context_def*> result
+	    = g->path_to_acceptable_context (type_sym, odef);
+	  if (result.size () && result.size () < best_depth)
+	    {
+	      best_depth = result.size ();
+	      result.insert (result.begin (), g);
+	      best_result = result;
+	    }
 	}
     }
 
_______________________________________________
lilypond-devel mailing list
lilypond-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-devel

Reply via email to