I'm happy to announce the release of luabind 0.9! There have been a lot
of improvements since 0.8.1. Among the more interesting ones are the
automatic handling of down casts, as well as better smart pointer
support, and of course the improved performance.
Many thanks to Athena Capital Research who funded a large part of the
development for this release.
User visible changes since 0.8.1
* Major optimizations. For example, calling member functions should be
close to twice as fast.
* Can now automatically handle conversion of any pointer like type
that implements a get_pointer() overload.
* Now handles virtual and multiple inheritance properly.
* Automatically perform down-casts as well as up-casts when converting
arguments from Lua to C++.
* When converting from C++ to Lua, polymorphic instances are
automatically cast to their most derived type.
* Memory optimizations.
* Added `table<>` object wrapper. Can be used to limit a function
parameter to tables.
void f(object const& x)
// assert that x is table
void f(table<object> const& x)
* Uses standard luaL_ref() and luaL_unref() functions. This should
simplify integration with other libraries that make use of the
* Deprecated the `raw()` converter policy. lua_State* arguments are now
automatically handled by the library.
* Fixed common problem where objects would reference a garbage
* Dropped support for using a custom type_info.
* `get_const_holder()' was removed, and by extension the automatic
smart_ptr<X> -> smart_ptr<X const>.
Changes since 0.8.1:
Daniel Wallin (109):
Remove a lot of unused code.
Remove unnecessary dependency on Boost.Python.
Don't use boost::function.
Remove a bunch of dead code and unnecessary includes.
Use mpl::vector instead of mpl::list in class_<>.
Simplify parameter deduction code in class_<> template.
Use partial specialization for is_bases<>.
Move "bases<>" definition to class.hpp.
Add missing <stdexcept> include.
Replace ref/unref with luaL_ref/luaL_unref.
Use luaL_ref/luaL_unref in weak_ref.
Add type_info wrapper class.
Add table<> object wrapper.
Fix placeholder macro for GCC4.0.
Replace include with forward declaration.
New instance holders. Can hold instance by any pointer type.
New instance storage implementation. Cleaner and faster.
Add default converter for boost::shared_ptr<>.
Use luaL_ref/luaL_unref instead of old ref() mechanism.
Don't try to return void* from Lua in test.
Add missing LUABIND_API to luabind::open().
Add test for creating instances in Lua threads.
Add luabind::get_main_thread() API.
Create instance table reference in the main thread.
New recursive overload resolver.
Compute argument indices with converters.
Automatically convert lua_State* arguments.
Test user defined converter that consumes 2 parameters.
Inline more calls when invoking functions. Improves code on GCC.
Cache conversion result from the scoring stage.
Reduce the number of API calls for numeric converters.
Use lua_rawgeti() instead of lua_pushnumber, lua_rawget pair.
Make adopt_policy::match() stateful.
Make const_pointer_converter stateful.
Make shared_ptr_converter stateful.
Fix builtin converter test. All converters need both conversion stages.
Fix tests. Need to contain subconverters.
Add missing detail/ref.hpp include.
New inheritance graph code.
Add make_instance() helper function.
Add tests for new inheritance code.
Add missing <luabind/wrapper_base.hpp> include.
Use add_cast() for wrappers as well.
Handle null pointer in shared_ptr_converter.
Rework local_id allocation in class_id_map.
Fix bug in id allocation.
Make shared_ptr_converter public.
Test object identity with shared_ptr_converter.
Handle NULL smart pointers.
Remove use of conversion_storage.
Test that adopt() leaves a weak pointer in the Lua object.
Hold a weak pointer in instance_holder when ownership is released.
Use false : x : 0 idiom to avoid evaluating x.
Suppress unused variable warning.
Keep overload chain alive in function_object.
Remove old unused table ref member from object_rep.
Store dependency refs directly in the registry.
Update version.hpp for v0.9.
Silence uninitialized variable warning.
Cache conversion result in value_converter.
Update version for 0.9 in Jamroot.
Add test for extending exported classes in Lua.
Associate polymorphic wrapper back reference with the main thread.
Remove some stale code.
Handle returning references to smart pointers.
Allocate storage for instances with object_rep::allocate().
Add missing LUABIND_API to invoke_context.
Use boost::scoped_ptr<> for pimpl.
Add missing LUABIND_API to class_id_map.
Fix bug where local class ids would become incorrect.
Supress int->bool warnings on MSVC.
Add missing LUABIND_BUILDING define to inheritance.cpp.
Use std::size_t instead of int for dependency count.
Const holder conversion isn't supported any more. Don't test it.
Use lua_tointeger() instead of casting the result of lua_tonumber().
Suppress a bunch of "unreferenced parameter" warnings.
Suppress MSVC alignment warning (C4121).
Suppress MSVC unreachable code warning.
Suppress MSVC "assignment operator could not be generated" warning.
Make object_rep noncopyable.
Cast to lua_Integer and lua_Number explicitly in converter.
Remove compute_arity(). This isn't used any more.
Revert 5134297. This caused overload ambiguities.
Fix leak in "super" upvalue.
Store main thread lua_State* in shared_ptr_deleter.
Fix class_info() calling lua_typename() with stack index.
Kill old detail::is_class_object() function.
Fix set_instance_value() bug that overwrote class values.
Don't test smart ptr features that have been removed.
docs: Rewrite section on smart pointers.
docs: Remove note about library being in beta phase.
Use lua_pushliteral() where possible.
Don't use lua_tointeger() for unsigned int on MSVC.
Suppress int->bool warnings on MSVC.
Don't leak cast-graph objects.
docs: Add note about functions returning smart pointers.
Accept "nil" in char const* converter.
Always use lua_tonumber() for unsigned int/long.
cast_graph::cast() should return the score as int.
Fix placeholder definitions to match changes in Boost 1.39.
Remove old unused files accidentally left around.
Prevent max() macro substitution.
Remove double lua_isnil() check in ref_converter.
Fix class_id allocation from DLL.
docs: Add note about raw() being deprecated.
docs: Remove VC6/7 from compatible compiler list.
docs: Fix spelling.
docs: Update list of configuration defines.
Allow calling luabind::open() more than once.
Evan Wies (3):
Don't crash if class_info() is called on non-luabind objects.
Add Lua function class_names() giving a list of registered types.
Test that class_info() don't crash when passed non-luabind objects.
Jiao Hang (1):
Fix iterator_policy destruction bug.
Kenny Peng (1):
Address a name conflict with termios.h.
Nigel Atkinson (1):
Don't use same name for parameter and type.