Robin Gareus
520dcf8cdf
Since lua functions are closures, C++ methods that pass arguments by reference cannot be used directly. The previous approach (boost::ref) failed with clang. Assume the following: void foo (float&) { } static inline float& bar () { boost::reference_wrapper<float> r (42); return r.get (); } foo ( bar () ); With gcc, "r" goes out of scope after foo's arguments are processed and all is well. But with clang, "r" already leave scope when *inlined* bar() returns. Solution: allocate some user-data on the lua-stack to hold the reference. There is no reference to this user-data so lua will eventually garbage collect it. (theoretically, creating the table which holds the return-values could trigger an emergency garbage collection when memory is low and free the reference just while they're being pushed to the table, then gain FuncArgs<Params> already dereferenced them all as variable on the C stack -- probably again compiler specific) |
||
---|---|---|
.. | ||
appleutility | ||
ardour | ||
ardouralsautil | ||
audiographer | ||
backends | ||
canvas | ||
clearlooks-newer | ||
clearlooks-older | ||
evoral | ||
fst | ||
gtkmm2ext | ||
libltc | ||
lua | ||
midi++2 | ||
panners | ||
pbd | ||
plugins | ||
ptformat | ||
qm-dsp | ||
surfaces | ||
timecode | ||
vamp-plugins | ||
vfork |