[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Regression in parser
From: |
Erik Sandberg |
Subject: |
Re: Regression in parser |
Date: |
Tue, 26 Sep 2006 21:02:29 +0200 |
User-agent: |
KMail/1.9.1 |
On Saturday 23 September 2006 17:49, Nicolas Sceaux wrote:
> Hi,
>
> Using LilyPond from CVS, the following snippet causes a syntax error,
> which 2.9.18 did not:
>
> /******************************
> testFunction =
> #(define-music-function (parser location) ()
> ;; test-data.ly contains music variable definitions
> (ly:parser-parse-string parser "\\include \"test-data.ly\"")
> (make-music 'SequentialMusic 'void #t))
Hi,
You should use ly:clone-parser to avoid this problem:
#(define-music-function (parser location) ()
(ly:parser-parse-string (ly:clone-parser parser) "\\include
\"test-data.ly\"")
(make-music 'SequentialMusic 'void #t))
The same problem exists in previous versions, it happens whenever the lexer
needs to read a lookahead token before applying a function:
testFunction =
#(define-music-function (parser location m) (ly:music?)
(ly:parser-parse-string parser " \\notemode { c' } ")
(make-music 'SequentialMusic 'void #t))
% lexer needs to read the {
\testFunction c
{ c' }
Han-Wen: It _might_ be possible to fix this issue by making
parser::parse_string temporarily restore some variables while parsing the
string, but I don't think it's worth it (IMHO we can ignore the problem). Do
you agree?
If so, we could perhaps make parse-string throw a warning if the parser seems
to be parsing something else already.
--
Erik
- Re: Regression in parser,
Erik Sandberg <=