From 03ce6c9290048ab17e98077b7b31daa473da268c Mon Sep 17 00:00:00 2001
From: fred <fred>
Date: Sun, 24 Mar 2002 20:14:44 +0000
Subject: [PATCH] lilypond-1.0.16

---
 lily/note-column.cc | 10 ++++++++--
 lily/slur.cc        | 25 ++++++++++++++-----------
 2 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/lily/note-column.cc b/lily/note-column.cc
index 1085a3c071..8f700129e5 100644
--- a/lily/note-column.cc
+++ b/lily/note-column.cc
@@ -38,9 +38,15 @@ Interval_t<int>
 Note_column::head_positions_interval() const
 {
   ((Note_column*)this)->sort();
-  return Interval_t<int> (head_l_arr_[0]->position_i_, 
-			  head_l_arr_.top()->position_i_);
+ Interval_t<int>  iv;
+
+ iv.set_empty ();
 
+ if (head_l_arr_.size ())
+   iv = Interval_t<int>(head_l_arr_[0]->position_i_, 
+			  head_l_arr_.top()->position_i_);
+  
+  return iv;
 }
 
 Interval 
diff --git a/lily/slur.cc b/lily/slur.cc
index 14edd7b3e2..28bd21fa6e 100644
--- a/lily/slur.cc
+++ b/lily/slur.cc
@@ -38,6 +38,8 @@ Slur::Slur ()
 void
 Slur::add_column (Note_column*n)
 {
+  if (!n->head_l_arr_.size ())
+    warning (_ ("Putting slur over rest."));
   encompass_arr_.push (n);
   add_dependency (n);
 }
@@ -144,7 +146,8 @@ Slur::do_post_processing ()
       /*
         normal slur
        */
-      else if (extrema[d]->stem_l_ && !extrema[d]->stem_l_->transparent_b_) 
+      else if (extrema[d]->stem_l_ && !extrema[d]->stem_l_->transparent_b_ 
+	       && extrema[d]->head_l_arr_.size ()) 
         {
 	  Real notewidth_f = extrema[d]->width ().length ();
 	  dy_f_drul_[d] = (int)rint (extrema[d]->stem_l_->height ()[dir_]);
@@ -157,17 +160,17 @@ Slur::do_post_processing ()
 		dx_f_drul_[d] += 0.25 * (dir_ * d) * d * notewidth_f;
 	    }
 	}
-      else 
-        {
-	  Real notewidth_f = extrema[d]->width ().length ();
-	  dy_f_drul_[d] = (int)rint (extrema[d]->head_positions_interval ()
-	    [dir_]) * internote_f;
-	  dx_f_drul_[d] += 0.5 * notewidth_f - d * gap_f;
+	else 
+	  {
+	    Real notewidth_f = extrema[d]->width ().length ();
+	    dy_f_drul_[d] = (int)rint (extrema[d]->head_positions_interval ()
+				       [dir_]) * internote_f;
+	    dx_f_drul_[d] += 0.5 * notewidth_f - d * gap_f;
 	}
-      dy_f_drul_[d] += dir_ * interline_f;
-      if (extrema[d]->stem_l_ && (dir_ == extrema[d]->stem_l_->dir_))
-	dy_f_drul_[d] -= dir_ * internote_f;
-    }
+	dy_f_drul_[d] += dir_ * interline_f;
+	if (extrema[d]->stem_l_ && (dir_ == extrema[d]->stem_l_->dir_))
+	  dy_f_drul_[d] -= dir_ * internote_f;
+      }
   while (flip(&d) != LEFT);
 
   // now that both are set, do dependent
-- 
2.39.5