From bb0d59f189f8bf99a7ee3e3a147d9d52081812f5 Mon Sep 17 00:00:00 2001 From: Nicolas Sceaux Date: Mon, 22 Dec 2008 20:41:11 +0100 Subject: [PATCH] Fix #713 In Paper_book::output_aux(), for a parent Paper_book, despite the looping: for (SCM p = scm_reverse (bookparts_); scm_is_pair (p); p = scm_cdr (p)) not all children bookparts are processed, causing the bus error to occur later on. As a workaround, bookparts will be stored in Paper_book in straight order (in Book::process_bookparts), instead of reverse order, to avoid the multiple reversings (in paper_book.cc). --- lily/book.cc | 7 ++++++- lily/paper-book.cc | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/lily/book.cc b/lily/book.cc index 3a84865462..fa961d36f3 100644 --- a/lily/book.cc +++ b/lily/book.cc @@ -200,9 +200,14 @@ Book::process_bookparts (Paper_book *output_paper_book, Output_def *paper, Outpu { Paper_book *paper_book_part = book->process (paper, layout, output_paper_book); if (paper_book_part) - output_paper_book->add_bookpart (paper_book_part->self_scm ()); + { + output_paper_book->add_bookpart (paper_book_part->self_scm ()); + paper_book_part->unprotect (); + } } } + /* In a Paper_book, bookparts are stored in straight order */ + output_paper_book->bookparts_ = scm_reverse_x (output_paper_book->bookparts_, SCM_EOL); } void diff --git a/lily/paper-book.cc b/lily/paper-book.cc index ea4424c86e..7b43799e99 100644 --- a/lily/paper-book.cc +++ b/lily/paper-book.cc @@ -128,7 +128,7 @@ Paper_book::output_aux (SCM output_channel, if (scm_is_pair (bookparts_)) { - for (SCM p = scm_reverse (bookparts_); scm_is_pair (p); p = scm_cdr (p)) + for (SCM p = bookparts_; scm_is_pair (p); p = scm_cdr (p)) if (Paper_book *pbookpart = unsmob_paper_book (scm_car (p))) { bool is_last_part = (is_last && !scm_is_pair (scm_cdr (p))); @@ -521,7 +521,7 @@ Paper_book::systems () systems_ = SCM_EOL; if (scm_is_pair (bookparts_)) { - for (SCM p = scm_reverse (bookparts_); scm_is_pair (p); p = scm_cdr (p)) + for (SCM p = bookparts_; scm_is_pair (p); p = scm_cdr (p)) if (Paper_book *pbookpart = unsmob_paper_book (scm_car (p))) systems_ = scm_append_x (scm_list_2 (systems_, pbookpart->systems ())); } @@ -581,7 +581,7 @@ Paper_book::pages () pages_ = SCM_EOL; if (scm_is_pair (bookparts_)) { - for (SCM p = scm_reverse (bookparts_); scm_is_pair (p); p = scm_cdr (p)) + for (SCM p = bookparts_; scm_is_pair (p); p = scm_cdr (p)) if (Paper_book *pbookpart = unsmob_paper_book (scm_car (p))) pages_ = scm_append_x (scm_list_2 (pages_, pbookpart->pages ())); } -- 2.39.2