Re: Crash with make-dynamic-script

From:

David Kastrup

Subject:

Re: Crash with make-dynamic-script

Date:

Sun, 31 Aug 2014 15:08:44 +0200

User-agent:

Gnus/5.13 (Gnus v5.13) Emacs/24.4.50 (gnu/linux)

Simon Albrecht <address@hidden> writes:
> Am 31.08.2014 um 14:42 schrieb David Kastrup:
>> Simon Albrecht <address@hidden> writes:
>>
>>> Hello,
>>>
>>> yesterday I tried out make-dynamic-script and in my first attempt
>>> forgot some "":
>>> pDolce = #(make-dynamic-script (markup #:dynamic p #:italic dolce))
>>> Compiling the attached example file results in
>>> fatal error: make-dynamic-markup: Invalid argument in position
>>> 1. Expect: markup, found: #<Prob: Music C++: Music((origin
>>> . #<location C:/Program
>>> Files/LilyPond/usr/share/lilypond/current/ly/dynamic-scripts-init.ly:16:5>)
>>> (text . p))((display-methods #<procedure #f (event parser)>) (name
>>> . AbsoluteDynamicEvent) (types general-music post-event event
>>> dynamic-event absolute-dynamic-event)) >
>>> (independent of OS – of course, I should say)
>> I don't think we take responsibility for things going haywire in Scheme.
>>
>> Instead of (markup ...) try using #{ \markup ... #} and you will likely
>> get more LilyPondish error messages.
>>
> I only recalled that every crash/fatal error of that kind was supposed
> to be reported. To quote <http://lilypond.org/bug-reports.html>: “If
> you have input that results in a crash or wrong output, then that is a
> bug.”
> But of course I’m not the one to demand a solution. Or, if you say
> it’s a bug in scheme, it might be forwarded?
No, it is not a bug in Scheme (or rather GUILE). It is a misuse of
Scheme resulting in an abort. You are using symbols instead of strings
here, and the symbol p is already taken with the code for the \p
command.
LilyPond tends to have basic safeguards against Scheme misuse (and you
get an error message pointing as well to the problem as may be
expected). But most of them have no sane way of continuing and
consequently abort.
In this case, it was your own choice to meddle with Scheme rather than
using #{ \markup ... #}, though the example for make-dynamic-script
actually does not use #{ \markup ... #} directly but rather stores the
markup in a variable. Probably not the nicest presentation since it
sort of suggests that Scheme markup is the way to circumvent meddling
with additional variables.
--
David Kastrup