From: David Kastrup Date: Sun, 25 Mar 2012 09:12:05 +0000 (+0200) Subject: Reduce amount of consing (mostly replace reverse with reverse! where appropriate) X-Git-Tag: release/2.15.36-1~20 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=647aa505f55f0a19c65d18e7b9347edd164ab0e9;p=lilypond.git Reduce amount of consing (mostly replace reverse with reverse! where appropriate) --- diff --git a/lily/articulations.cc b/lily/articulations.cc index 28a81a6cf5..07f74e11c7 100644 --- a/lily/articulations.cc +++ b/lily/articulations.cc @@ -81,5 +81,5 @@ articulation_list (vector note_events, articulations); } - return (scm_reverse (articulations)); + return scm_reverse_x (articulations, SCM_EOL); } diff --git a/lily/key-engraver.cc b/lily/key-engraver.cc index 55906b92d9..fd60570821 100644 --- a/lily/key-engraver.cc +++ b/lily/key-engraver.cc @@ -198,7 +198,7 @@ Key_engraver::read_event (Stream_event const *r) r->origin ()->warning ("Incomplete keyAlterationOrder for key signature"); } - context ()->set_property ("keySignature", scm_reverse (accs)); + context ()->set_property ("keySignature", scm_reverse_x (accs, SCM_EOL)); context ()->set_property ("tonic", r->get_property ("tonic")); } diff --git a/lily/line-spanner.cc b/lily/line-spanner.cc index 028fe20e15..418a064874 100644 --- a/lily/line-spanner.cc +++ b/lily/line-spanner.cc @@ -75,8 +75,7 @@ Line_spanner::calc_bound_info (SCM smob, Direction dir) ? ly_symbol2scm ("left-broken") : ly_symbol2scm ("right-broken"), bound_details, SCM_EOL); - for (SCM s = scm_reverse (extra); scm_is_pair (s); s = scm_cdr (s)) - details = scm_cons (scm_car (s), details); + details = scm_append (scm_list_2 (extra, details)); } if (details == SCM_BOOL_F) diff --git a/lily/page-breaking.cc b/lily/page-breaking.cc index d81e32d230..9956c9f978 100644 --- a/lily/page-breaking.cc +++ b/lily/page-breaking.cc @@ -466,7 +466,7 @@ Page_breaking::systems () pb->unprotect (); } } - return scm_append (scm_reverse (ret)); + return scm_append (scm_reverse_x (ret, SCM_EOL)); } SCM @@ -552,7 +552,7 @@ Page_breaking::draw_page (SCM systems, SCM configuration, int page_num, bool las { // Create a stencil for each system. SCM paper_systems = SCM_EOL; - for (SCM s = scm_reverse (systems); scm_is_pair (s); s = scm_cdr (s)) + for (SCM s = systems; scm_is_pair (s); s = scm_cdr (s)) { SCM paper_system = scm_car (s); if (Grob *g = unsmob_grob (scm_car (s))) @@ -563,6 +563,7 @@ Page_breaking::draw_page (SCM systems, SCM configuration, int page_num, bool las paper_systems = scm_cons (paper_system, paper_systems); } + paper_systems = scm_reverse_x (paper_systems, SCM_EOL); // Create the page and draw it. SCM page = make_page (page_num, last); diff --git a/lily/page-layout-problem.cc b/lily/page-layout-problem.cc index cc1a0cee11..376716929c 100644 --- a/lily/page-layout-problem.cc +++ b/lily/page-layout-problem.cc @@ -108,7 +108,7 @@ Page_layout_problem::get_footnotes_from_lines (SCM lines) programming_error ("Systems on a page must be a prob or grob."); } - return scm_reverse (out); + return scm_reverse_x (out, SCM_EOL); } /* diff --git a/lily/paper-book.cc b/lily/paper-book.cc index 055a6a469b..f710078cf7 100644 --- a/lily/paper-book.cc +++ b/lily/paper-book.cc @@ -580,10 +580,11 @@ Paper_book::systems () systems_ = SCM_EOL; if (scm_is_pair (bookparts_)) { + SCM system_list = SCM_EOL; 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 ())); + system_list = scm_cons (pbookpart->systems (), system_list); + systems_ = scm_append (scm_reverse_x (system_list, SCM_EOL)); } else { @@ -596,15 +597,14 @@ Paper_book::systems () SCM system_list = scm_vector_to_list (pscore->get_paper_systems ()); - system_list = scm_reverse (system_list); - systems_ = scm_append (scm_list_2 (system_list, systems_)); + systems_ = scm_reverse_x (system_list, systems_); } else { systems_ = scm_cons (scm_car (s), systems_); } } - systems_ = scm_reverse (systems_); + systems_ = scm_reverse_x (systems_, SCM_EOL); /* backwards compatibility for the old page breaker */ int i = 0; diff --git a/lily/system.cc b/lily/system.cc index bc59dede88..f58f1158d4 100644 --- a/lily/system.cc +++ b/lily/system.cc @@ -206,7 +206,7 @@ System::get_broken_system_grobs () SCM ret = SCM_EOL; for (vsize i = 0; i < broken_intos_.size (); i++) ret = scm_cons (broken_intos_[i]->self_scm (), ret); - return scm_reverse (ret); + return scm_reverse_x (ret, SCM_EOL); } SCM