Thomas Morley <thomasmorle...@gmail.com> writes: > 2017-04-18 10:55 GMT+02:00 David Kastrup <d...@gnu.org>: >> Thomas Morley <thomasmorle...@gmail.com> writes: >> >>> 2017-04-17 21:08 GMT+02:00 Roman Stawski <ro...@stawski.fr>: >>>> Hello all >>>> >>>> >>>> I'm coming across a problem with context definitions: >>>> >>>> \layout { >>>> \context { >>>> \name P >>>> \alias Voice >>>> } >>>> >>>> This blows up with the error >>>> >>>> Interpreting music...ERROR: In procedure symbol->string: >>>> ERROR: Wrong type argument in position 1 (expecting symbol): () >>>> Exited with return code 1. >>>> >>>> If I comment out the '\accepts' compilation finishes, (but ignores the >>>> context P obviously). >>> >>> From: NR 5.1.6 Defining new contexts >>> >>> "The mechanisms with which contexts communicate are established by declaring >>> the context \type. Within a \layout block, most contexts will be of type >>> Engraver_group. >>> [...] >>> Copying and modifying an existing context definition will also fill in >>> the type." >>> >>> >>> So (see comments): >>> >>> >>> \layout { >>> %% define "P" from scratch >>> \context { >>> \type "Engraver_group" >>> \name P >>> \alias Voice >>> %% put in engravers for what you want >>> %% otherwise no output >>> } >> >> Trigger and wording of error message are not overly helpful here. This >> should likely be caught at an earlier point of time. >> >> -- >> David Kastrup > > Out of curiosity, could you point me to where the current error is triggered? > > I've added some debugging code: > > (define (print-book-with parser book process-procedure) > (let* ((paper (ly:parser-lookup parser '$defaultpaper)) > (layout (ly:parser-lookup parser '$defaultlayout)) > (outfile-name (get-outfile-name parser book))) > > (pretty-print > (list > book > paper > (map > (lambda (sym) > (cons > (ly:context-def-lookup > (assoc-get 'P (ly:module->alist > (ly:output-def-scope layout))) > sym) > sym)) > (list > 'default-child > 'consists > 'description > 'aliases > 'accepts > 'property-ops > 'context-name > 'group-type)) > (assoc-get 'P (ly:module->alist (ly:output-def-scope layout))) > outfile-name)) > > (process-procedure > book > paper > layout > outfile-name))) > > returning: > > (#<Book> > #< Output_def> > ((() . default-child) > (() . consists) > (() . description) > ((Voice) . aliases) > (() . accepts) > (() . property-ops) > (P . context-name) > (() . group-type)) > #<Context_def P atest-55.ly:636:5> > "atest-55") > > Though, I don't see symbol->string applied anywhere there.
My guess is lily/context.cc: void Context::create_context_from_event (SCM sev) { Stream_event *ev = unsmob<Stream_event> (sev); string id = ly_scm2string (ev->get_property ("id")); SCM ops = ev->get_property ("ops"); SCM type_scm = ev->get_property ("type"); string type = ly_symbol2string (type_scm); It's probably the last line quoted that gives this error. The "accepts" stuff is likely a red herring: if a context is not acceptable, it won't get created in the first place and thus not trigger the error. -- David Kastrup _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user