]> git.donarmstrong.com Git - lilypond.git/commit - lily/separation-item.cc
Uses only unpure-pure containers to articulate unpure-pure relationships (issue 3199)
authorMike Solomon <mike@apollinemike.com>
Tue, 5 Mar 2013 20:03:55 +0000 (21:03 +0100)
committerMike Solomon <mike@apollinemike.com>
Tue, 5 Mar 2013 20:03:55 +0000 (21:03 +0100)
commit74e4d219b24ec6d6f28d663c0285418e6c8e122e
tree6827ab09adb497972de6679cc0ce3558f45c8d21
parentd4802c72d26def39030f2ac897b66c3a268888d5
Uses only unpure-pure containers to articulate unpure-pure relationships (issue 3199)

Previously, LilyPond used several different lists in define-grobs.scm
to define relationships between unpure and pure functions.  This patch
eliminates these lists, using unpure-pure containers to articulate
these relationships.

The modifications required to implement this change are described below:

-) axis-group-interface.cc
A Scheme function is no longer needed to determine pure relevant grobs.
All grobs can have their Y-extents meaningfully pure-evaluated now. The
worst-case scenario is that they evaluate to false. Dead grobs, on the
other hand, are never pure relevant. The calls to is_live are the only
holdovers from the old pure-relevant? scheme function.

-) grob-closure.cc
We allow unpure-pure containers in simple closures.

-) grob-property.cc
call_pure_function no longer looks up a Scheme module. Because there are
no hard-coded lists in Scheme any more, the function is smaller and
writing it in C++ gets slight efficiency gains.

-) grob.cc
pure_stencil_height used to be a Scheme function in define-grobs.scm.
Because it is much simpler (it no longer makes references to lists defined
in Scheme), it can be implemented in C++.

-) pure-from-neighbor-engraver.cc
Similar to axis-group-interface.cc, the pure-relevant distinction is
no longer important.

-) side-position-interface.cc
In order to avoid issues with alterBroken, we only check pure properties
before line breaking.

-) simple-closure.cc
Simple closures were incorrectly evaluated when containing unpure-pure
containers. This rectifies that.

-) stencil-integral.cc
Several pure equivalent functions needed to be written for skylines.

-) define-grobs.scm
Multiple overrides must be changed to unpure-pure containers. Previous
hard-coded lists are all deleted and several functions moved to C++ (see
above).

-) output-lib.scm
Several common unpure-pure containers used in define-grobs.scm are
defined here. Several functions from define-grobs.scm pertaining to
grob offsets are moved to this file.
22 files changed:
input/regression/scheme-text-spanner.ly
lily/axis-group-interface.cc
lily/beam-engraver.cc
lily/grob-closure.cc
lily/grob-property.cc
lily/grob-scheme.cc
lily/grob.cc
lily/include/grob.hh
lily/lily-guile.cc
lily/melody-engraver.cc
lily/pure-from-neighbor-engraver.cc
lily/rest-collision.cc
lily/semi-tie-column.cc
lily/separation-item.cc
lily/side-position-interface.cc
lily/simple-closure.cc
lily/slur.cc
lily/stencil-integral.cc
lily/system.cc
ly/music-functions-init.ly
scm/define-grobs.scm
scm/output-lib.scm