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) |
||
---|---|---|
cfgtool | ||
doc | ||
export | ||
gtk2_ardour | ||
headless | ||
libs | ||
mcp | ||
midi_maps | ||
msvc_extra_headers | ||
MSVCardour3 | ||
MSVCMixbus3 | ||
MSVCvst_scan | ||
patches | ||
patchfiles | ||
scripts | ||
session_utils | ||
templates | ||
tools | ||
vst | ||
.dir-locals.el | ||
.gitattributes | ||
.gitignore | ||
ardour-3.ttl | ||
ardour.1 | ||
ardour.1.es | ||
ardour.1.fr | ||
ardour.1.ru | ||
COPYING | ||
foo.cc | ||
instant.xml | ||
instant.xml.sae | ||
Makefile | ||
msvc32-fixup.pl | ||
PACKAGER_README | ||
README | ||
system_config | ||
testfile.flac | ||
testfile.ogg | ||
TRANSLATORS | ||
waf | ||
wscript |
Please see the Ardour web site at http://ardour.org/ for all documentation.. For information on building ardour: http://ardour.org/development.html