lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: stencil-integral: factor out repeated scm_car(expr) calls (issue 579


From: hanwenn
Subject: Re: stencil-integral: factor out repeated scm_car(expr) calls (issue 579590044 by address@hidden)
Date: Fri, 01 May 2020 12:56:15 -0700

Reviewers: lemzwerg,

Message:
commit 04a6a4ac56bddff2ccf53cf3004f1d93b0a16a9a
Author: Han-Wen Nienhuys <address@hidden>
Date:   Fri Apr 17 13:38:09 2020 +0200

    stencil-integral: factor out repeated scm_car(expr) calls
    


Description:
stencil-integral: factor out repeated scm_car(expr) calls

Please review this at https://codereview.appspot.com/579590044/

Affected files (+26, -23 lines):
  M lily/stencil-integral.cc


Index: lily/stencil-integral.cc
diff --git a/lily/stencil-integral.cc b/lily/stencil-integral.cc
index 
189cdcdc881ec0c1c417a4a783b4675446ec4207..b99ad83899afe5df10ed2c954633efeb954864ca
 100644
--- a/lily/stencil-integral.cc
+++ b/lily/stencil-integral.cc
@@ -873,9 +873,11 @@ stencil_dispatcher (vector<Box> &boxes,
 {
   if (not scm_is_pair (expr))
     return;
-  if (scm_is_eq (scm_car (expr), ly_symbol2scm ("draw-line")))
+
+  SCM head = scm_car (expr);
+  if (scm_is_eq (head, ly_symbol2scm ("draw-line")))
     make_draw_line_boxes (boxes, buildings, trans, scm_cdr (expr), true);
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("dashed-line")))
+  else if (scm_is_eq (head, ly_symbol2scm ("dashed-line")))
     {
       expr = scm_cdr (expr);
       SCM th = scm_car (expr);
@@ -889,7 +891,7 @@ stencil_dispatcher (vector<Box> &boxes,
                             scm_list_5 (th, scm_from_double (0.0),
                                         scm_from_double (0.0), x1, x2), true);
     }
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("circle")))
+  else if (scm_is_eq (head, ly_symbol2scm ("circle")))
     {
       expr = scm_cdr (expr);
       SCM rad = scm_car (expr);
@@ -905,7 +907,7 @@ stencil_dispatcher (vector<Box> &boxes,
                                               SCM_BOOL_T,
                                               SCM_UNDEFINED));
     }
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("ellipse")))
+  else if (scm_is_eq (head, ly_symbol2scm ("ellipse")))
     {
       expr = scm_cdr (expr);
       SCM x_rad = scm_car (expr);
@@ -923,17 +925,17 @@ stencil_dispatcher (vector<Box> &boxes,
                                               SCM_BOOL_T,
                                               SCM_UNDEFINED));
     }
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("partial-ellipse")))
+  else if (scm_is_eq (head, ly_symbol2scm ("partial-ellipse")))
     make_partial_ellipse_boxes (boxes, buildings, trans, scm_cdr (expr));
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("round-filled-box")))
+  else if (scm_is_eq (head, ly_symbol2scm ("round-filled-box")))
     make_round_filled_box_boxes (boxes, buildings, trans, scm_cdr (expr));
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("named-glyph")))
+  else if (scm_is_eq (head, ly_symbol2scm ("named-glyph")))
     make_named_glyph_boxes (boxes, buildings, trans, scm_cdr (expr));
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("polygon")))
+  else if (scm_is_eq (head, ly_symbol2scm ("polygon")))
     make_polygon_boxes (boxes, buildings, trans, scm_cdr (expr));
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("path")))
+  else if (scm_is_eq (head, ly_symbol2scm ("path")))
     make_path_boxes (boxes, buildings, trans, scm_cdr (expr));
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("glyph-string")))
+  else if (scm_is_eq (head, ly_symbol2scm ("glyph-string")))
     make_glyph_string_boxes (boxes, buildings, trans, scm_cdr (expr));
   else
     {
@@ -957,44 +959,46 @@ stencil_traverser (SCM trans, SCM expr, SCM tail)
   if (scm_is_null (expr)
       || (scm_is_string (expr) && scm_is_true (scm_string_null_p (expr))))
     return tail;
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("combine-stencil")))
+
+  SCM head = scm_car (expr);
+  if (scm_is_eq (head, ly_symbol2scm ("combine-stencil")))
     {
       for (SCM s = scm_cdr (expr); scm_is_pair (s); s = scm_cdr (s))
         tail = stencil_traverser (trans, scm_car (s), tail);
       return tail;
     }
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("footnote")))
+  else if (scm_is_eq (head, ly_symbol2scm ("footnote")))
     return tail;
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("translate-stencil")))
+  else if (scm_is_eq (head, ly_symbol2scm ("translate-stencil")))
     {
       Offset p = robust_scm2offset (scm_cadr (expr), Offset (0.0, 0.0));
       trans = robust_scm2transform (trans).translate (p).smobbed_copy ();
       return stencil_traverser (trans, scm_caddr (expr), tail);
     }
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("scale-stencil")))
+  else if (scm_is_eq (head, ly_symbol2scm ("scale-stencil")))
     {
       Real x = robust_scm2double (scm_caadr (expr), 0.0);
       Real y = robust_scm2double (scm_cadadr (expr), 0.0);
       trans = robust_scm2transform (trans).scale (x, y).smobbed_copy ();
       return stencil_traverser (trans, scm_caddr (expr), tail);
     }
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("rotate-stencil")))
+  else if (scm_is_eq (head, ly_symbol2scm ("rotate-stencil")))
     {
       Real ang = robust_scm2double (scm_caadr (expr), 0.0);
       Offset center = robust_scm2offset (scm_cadadr (expr), Offset (0.0, 0.0));
       trans = robust_scm2transform (trans).rotate (ang, center).smobbed_copy 
();
       return stencil_traverser (trans, scm_caddr (expr), tail);
     }
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm 
("delay-stencil-evaluation")))
+  else if (scm_is_eq (head, ly_symbol2scm ("delay-stencil-evaluation")))
     // should not use the place-holder text, but no need for the warning below
     return tail;
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("grob-cause")))
+  else if (scm_is_eq (head, ly_symbol2scm ("grob-cause")))
     return stencil_traverser (trans, scm_caddr (expr), tail);
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("color")))
+  else if (scm_is_eq (head, ly_symbol2scm ("color")))
     return stencil_traverser (trans, scm_caddr (expr), tail);
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("output-attributes")))
+  else if (scm_is_eq (head, ly_symbol2scm ("output-attributes")))
     return stencil_traverser (trans, scm_caddr (expr), tail);
-  else if (scm_is_eq (scm_car (expr), ly_symbol2scm ("with-outline")))
+  else if (scm_is_eq (head, ly_symbol2scm ("with-outline")))
     return stencil_traverser (trans, scm_cadr (expr), tail);
   else
     {
@@ -1093,8 +1097,8 @@ Stencil::skylines_from_stencil (SCM sten, Real pad, SCM 
rot, Axis a)
   SCM data = scm_reverse_x (stencil_traverser (SCM_EOL, s->expr (), SCM_EOL), 
SCM_EOL);
   vector<Box> boxes;
   vector<Drul_array<Offset> > buildings;
-  for (data = scm_reverse_x (data, SCM_EOL); scm_is_pair (data); data = 
scm_cdr (data))
-    stencil_dispatcher (boxes, buildings, scm_caar (data), scm_cdar (data));
+  for (SCM s = scm_reverse_x (data, SCM_EOL); scm_is_pair (s); s = scm_cdr (s))
+    stencil_dispatcher (boxes, buildings, scm_caar (s), scm_cdar (s));
 
   // we use the bounding box if there are no boxes
   // FIXME: Rotation?
@@ -1121,7 +1125,6 @@ Grob::vertical_skylines_from_stencil (SCM smob)
   SCM rot = me->get_property ("rotation");
   SCM out = Stencil::skylines_from_stencil (me->get_property ("stencil"),
                                             pad, rot, X_AXIS);
-
   return out;
 }
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]