mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-30 17:03:06 +01:00
Mirror of Ardour Source Code
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