|
From: | Keith OHara |
Subject: | Re: Better pure height approximations for beamed rests. (issue 4860043) |
Date: | Fri, 27 Apr 2012 10:58:34 -0700 |
User-agent: | Opera Mail/11.62 (Win32) |
On Fri, 27 Apr 2012 03:02:51 -0700, address@hidden <address@hidden> wrote:
On 27 avr. 2012, at 09:45, Keith OHara wrote:On Thu, 26 Apr 2012 23:44:24 -0700, <address@hidden> 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).
[Prev in Thread] | Current Thread | [Next in Thread] |