Age | Commit message (Collapse) | Author |
|
|
|
|
|
This add support for Lua bindings for static member
functions in weak/share ptr class bindings.
|
|
|
|
This is useful for MIDI bytes amongst other things
|
|
Add custom API to prevent Lua Objects from being garbage collected.
This is intended to for Ardour LuaBridge bindings (~1MB Objects:
tables, functions and userdata).
The bindings are persistent and the gc can skip them in mark & sweep
phases. This is a significant performance improvement for garbage
collection.
Note. The next version of Lua (5.4) will come with a generational-gc
rather than an incremental, so extending the API at this point in time
is acceptable.
|
|
|
|
|
|
Shared pointer reference accessors can't be const
|
|
This fixes an crashing issue with ArdourUI.SelectionList a bug
introduced in 6dc3bdf252c and 35dcd46d7d.
Since removal of the special cases in 35dcd46d7d, when using
a C-pointer in a std::list<>,
std::list<class*>::push_back(TypeListValue)
TypeListValues<>'s Head was expanded to "class*& const"
implied by void ::push_back(const T& value);
This resulted in lifetime issues with a classes that derive
from sigc::trackable (e.g. Ardour's Selection).
The reference leaves scope and isn't duplicated when it is pushed back
to the std::list<>.
The script scripts/select_every_2nd_region.lua crashed because entries
in the SelectionList were no longer valid.
Previously (before 6dc3bdf252c) TypeListValues explicitly
copy-constructed the value to work around the lifetime issue.
This new solution bypasses the issue by directly using the c-pointer
without dereferencing it.
|
|
|
|
extended to the other libs)
Stage 1 of 3 (more to follow)
|
|
(Mixbus itself will probably need extra changes)
|
|
Add custom API to prevent Lua Objects from being garbage collected.
This is intended to for Ardour LuaBridge bindings (~1MB Objects:
tables, functions and userdata).
The bindings are persistent and the gc can skip them in mark & sweep
phases. This is a significant performance improvement for garbage
collection.
Note. The next version of Lua (5.4) will come with a generational-gc
rather than an incremental, so extending the API at this point in time
is acceptable.
|
|
|
|
using different versions of the SESSION_FILE format
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This fixes iterators on const std::lists<>& and const std::map<>&
|
|
since 6dc3bdf, a const string reference would leave scope with Lua code
fn("text")
calling a C++
fn (const std::string&)
before the C++ function is called.
|
|
|
|
Determining the class type copy constructed references.
Const-references passed to C++ functions were copies.
|
|
|
|
|
|
This deprecated explicit the "sameinstance()" method
|
|
"class C*" cannot be defined nor resolved, so STL containers
to class instance pointers need to be special-cased.
|
|
Support passing "T*" as as "const T* &" argument
e.g. std::list<T*>::push_back ( const T* & )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
file format (ver 5) rather than the older v3 format
|
|
|
|
|
|
|
|
fixes OOM with extreme automation in HP/LP.
|
|
|
|
In preparation to expose ARDOUR::SessionConfiguration.
Also change the return-type to bool to match Ardour's set/get API
|
|
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)
|
|
|
|
|
|
in particular: lua-lifefime (!) C++ instances.
This allows for dynamic allocation of custom user-data, bound to
the lifetime of the allocating lua-context.
|
|
lua C++ bindings require ~400KB worth of tables now; so bump memory
available to rt-safe scripts (full interpreter) to 2MB.
Also switch to incremental GC.
|