On 27 avr. 2012, at 19:58, Keith OHara wrote: > On Fri, 27 Apr 2012 03:02:51 -0700, m...@apollinemike.com > <m...@apollinemike.com> wrote: > >> On 27 avr. 2012, at 09:45, Keith OHara wrote: >> >>> On Thu, 26 Apr 2012 23:44:24 -0700, <m...@mikesolomon.org> wrote: >>> >>>> lily/beam.cc:1743: Beam::pure_rest_collision_callback (SCM smob, SCM >>>> prev_offset, >>>> >>>> You're right - this is an error. Do you want me to fix it or are you >>>> working on a patch into which the fix could be incorporated? >>> >>> I am re-ordering the arguments in that one C function, but I don't read >>> Scheme so I am not sure if the observed order of the data is the intended >>> order, or the conventional order. >>> >>> Your addition to the docs is pretty explicit that 'start' and 'end' are >>> always the last two arguments, even in a chained-offset-callback where >>> there are extra arguments. On the other hand, call-pure-function seems to >>> put 'start' and 'end' in slots 2 and 3, with any other arguments attached >>> later. >>> >> >> >> Call pure function puts start and end in the final two slots. The optional >> arguments are passed in in slot two as a variable called `args' (check out >> lily/grob-property.cc and scm/define-grobs.scm). >> > > I did check them out; that's how I know I don't read Scheme. > > 326 SCM > 327 call_pure_function (SCM unpure, SCM args, int start, int end) > 328 { > 329 SCM scm_call_pure_function = ly_lily_module_constant > ("call-pure-function"); > 330 > 331 return scm_apply_0 (scm_call_pure_function, > 332 scm_list_4 (unpure, args, scm_from_int (start), > scm_from_int (end))); > 333 } > 334 > > 2749 (define-public (call-pure-function unpure args start end) > 2750 (if (ly:unpure-pure-container? unpure) > (...) ;; the true branch > 2760 (if (ly:simple-closure? unpure) > 2761 (ly:eval-simple-closure (car args) unpure start end) > 2762 (if (not (procedure? unpure)) > 2763 unpure > 2764 (if (memq unpure pure-functions) > 2765 (apply unpure args) > 2766 (let ((pure (assq unpure pure-conversions-alist))) > 2767 (if pure > 2768 (apply (cdr pure) > 2769 (append > 2770 (list (car args) start end) > 2771 (cdr args)))))))))) > > I think this assembles > (,pure-chain-offset-callback (car args) start end (cdr args)) > > it seems the address register would hold the Grob* and the decrement register > a lists of remaining arguments (prev_offset in my case). >
Your right that, in the code above, the function gleaned from (cdr pure) gets passed (list (car args) start end (cdr args)). I'm not exactly sure what that signifies, but that's what's going on. When in doubt, I always just use pretty prints (format #t "foo ~a\n" args) to see what's going on. Cheers, MS _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel