## Version 3.0 * Moved to C++17 as minimum supported standard C++ version. * Reworked the whole library to be able to use it without c++ exceptions enabled. * Lot of optimisations have been added, and now the library is *fast*, nearly in the same league as sol2 v3.x. * Breaking Change: The method `Stack::push` now takes a `std::error_code&` as last parameter and returns a `bool`. * Breaking Change: The class `LuaException` has been reworked and it now take a `std::error_code` instead of a int. * Breaking Change: The class `LuaException` is now thrown if a unregistered class is pushed via the Stack class, also when calling `LuaRef::operator()`, but only if exceptions are enabled. * Breaking Change: `LuaRef::operator()` now returns the class `LuaResult`, where it is possible to obtain the call results or error message. * Breaking Change: LuaBridge does not silently enable exceptions when calling `getGlobalNamespace`. Call `enableExceptions(lua_State*)` if you want to enable them explicitly. * Breaking Change: Removed `RefCounterPtr`, maintaining the reference counts in a unsynchronized global table is not production quality. * Breaking Change: Removed `Class::addStaticData`, it was just an alias for `Class::addStaticProperty`. * Breaking Change: Removed `Class::addCFunction`, it was just an alias for `Class::addFunction`. * Breaking Change: Removed `Class::addStaticCFunction`, it was just an alias for `Class::addStaticFunction`. * Allow specifying a non virtual base class method when declaring class members (functions or variables) not exposed in the inherited class. * Allow using capturing lambdas in `Namespace::addFunction`, `Namespace::addProperty`, `Class::addFunction`, `Class::addStaticFunction`, `Class::addProperty` and `Class::addStaticProperty`. * Added multiple inheritance support: `deriveClass` now accepts more than one registered base class (e.g. `deriveClass`). * Added C++20 coroutine integration: `CppCoroutine` type that can be registered via `Namespace::addCoroutine()` to expose C++ generators to Lua using `co_yield` and `co_return`. * Added `LuaCoroutine` awaitable to resume a child Lua thread synchronously from inside a `CppCoroutine` body using `co_await`. * Added `lua_resume_x` and `lua_isyieldable_x` portable helpers in `LuaBridge/detail/LuaHelpers.h`. * Added `LUABRIDGE_HAS_CXX20_COROUTINES` feature-detection macro; opt out with `LUABRIDGE_DISABLE_CXX20_COROUTINES`. * Added `ErrorCode::CoroutineYieldFromNonCoroutine` and `ErrorCode::CoroutineAlreadyDone` error codes. * Added `Namespace::addVariable` to allow adding a modifiable value by copy into the namespace without incurring in function calls or metatables generation. * Added `luabridge::callWithHandler` free function and `LuaRef::callWithHandler` member to provide a custom Lua message handler during `lua_pcall`. * Added `luabridge::newFunction` free function and `LuaRef::newFunction` static method to wrap any C++ callable into a Lua function exposed as a `LuaRef`. * Added `luabridge::getNamespaceFromStack` function to construct a namespace object from a table on the stack. * Added `luabridge::registerMainThread` function especially useful when using lua 5.1 to register the main lua thread. * Added `std::shared_ptr` support for types intrusively deriving from `std::enable_shared_from_this`. * Added `Class::addConstructor` support for specifying factory functor to do placement new of the object instance. * Added `Class::addDestructor` to register a custom `__destruct` metamethod hook invoked just before the C++ destructor runs. * Added `Class::addFunction` overload taking a `lua_CFunction` as if it were a member. * Added `Class::addIndexMetaMethod` to allow register `__index` metamethod fallback on a registered class. * Added `Class::addNewIndexMetaMethod` to allow register `__newindex` metamethod fallback on a registered class. * Added `Class::addStaticIndexMetaMethod` for fallback `__index` handling on the static class table. * Added `Class::addStaticNewIndexMetaMethod` for fallback `__newindex` handling on the static class table. * Added `LuaRef::isValid` to check when the reference is a LUA_NOREF. * Added `LuaRef::isCallable` to check when the reference is a function or has a `__call` metamethod. * Added `LuaException::state` to return the `lua_State` associated with the exception. * Added `void*` and `const void*` stack specializations mapped transparently to Lua lightuserdata. * Added support for `std::byte` as stack value type. * Added support for `std::string_view` as stack value type. * Added support for `std::tuple` as stack value type. * Added support for `std::optional` as stack value type. * Added support for `std::set` as stack value type by using `LuaBridge/Set.h`. * Added support to `LuaRef` for being hashed with `std::hash` (`LuaRef` properly usable in `std::unordered_map`). * Added `LuaRef::append` and variadic `LuaRef::append(vs...)` to append values to a Lua sequence table using `lua_rawseti`. * Added `LuaRef::call()` now returns a strongly-typed `TypeResult` instead of a generic `LuaResult`; `LuaRef::operator()` returns `TypeResult`. * Added `LUABRIDGE_STRICT_STACK_CONVERSIONS` compile-time flag to enforce strict type-safe stack conversions (`bool` requires `LUA_TBOOLEAN`, `std::string` requires `LUA_TSTRING`). * Added `LuaFunction` strongly-typed wrapper class for invoking Lua functions with compile-time argument and return-type checking. * Added `TypeResult::valueOr(default)` to extract the contained value or return a fallback when a cast fails. * Added `allowOverridingMethods` class option to permit Lua scripts to override C++ methods registered in an extensible class. * Added single header amalgamated distribution file, to simplify including in projects. * Added more asserts for functions and property names. * Renamed `luabridge::Nil` to `luabridge::LuaNil` to allow including LuaBridge in Obj-C sources. * Removed the limitation of maximum 8 parameters in functions. * Removed the limitation of maximum 8 parameters in constructors. * Removed `Class::addData`, it was just an alias for `Class::addProperty`. * Removed `TypeList` from loki, using parameter packs and `std::tuple` with `std::apply`. * Removed juce traces from unit tests, simplified unit tests runs. * Changed all generic functions in `LuaRef` and `TableItem` to accept arguments by const reference instead of by copy. * Fixed `Stack::get` to properly require `LUA_TBOOLEAN` when `LUABRIDGE_STRICT_STACK_CONVERSIONS` is enabled; without the flag, legacy `lua_toboolean` semantics are preserved. * Fixed floating-point `Stack::push`, `get`, and `isInstance` to correctly allow NaN and Inf values to pass through without error. * Fixed issue when `LuaRef::cast<>` fails with exceptions enabled, popping from the now empty stack could trigger the panic handler twice. * Fixed unaligned access in user allocated member pointers in 64bit machines reported by ASAN. * Fixed access of `LuaRef` in garbage collected `lua_thread`. * Included testing against Luau VM * Included testing against Ravi VM * Bumped lua 5.2.x in unit tests from lua 5.2.0 to 5.2.4. * Bumped lua 5.4.x in unit tests from lua 5.4.1 to 5.4.8. * Added Lua 5.3.6 and 5.5.0 in unit tests. * Run against PUC-Lua, Luau, LuaJIT and Ravi in CI. * Converted the manual from html to markdown. * Small improvements to code and doxygen comments readability. * Support for `__fastcall` function pointers. ## Version 2.6 * Added namespace `addFunction()` accepting `std::function` (C++11 only). * Added class `addStaticFunction()` accepting `std::function` (C++11 only). * Update the Doxygen documentation. * Add brief API reference into the manual. * Hide non-public `luabridge` members into the `detail` namespace. * Fix stack cleanup by `LuaRef::isInstance()` method. ## Version 2.5 * Introduce stack `isInstance()` method. * Introduce LuaRef `isInstance()` method. * Added a convenience `isInstance()` function template. ## Version 2.4.1 * Do not call the object destructor then its constructor throws. ## Version 2.4 * String stack get specialization doesn't change the stack value anymore. * Added namespace `addProperty()` accepting C-functions. * Introduce enableExceptions function. ## Version 2.3.2 * Fixed registration continuation for an already registered class. ## Version 2.3.1 * Fixed registration continuation issues. ## Version 2.3 * Added class `addFunction()` accepting proxy functions (C++11 only). * Added class `addFunction()` accepting `std::function` (C++11 only). * Added class `addProperty()` accepting functions with lua_State* parameter. * Added class `addProperty()` accepting `std::function` (C++11 only). * Added stack traits for `std::unordered_map` (`UnorderedMap.h`). * Now using lightuserdata for function pointers. ## Version 2.2.2 * Performance optimization. ## Version 2.2.1 * Refactored namespace and class handling. ## Version 2.2 * Refactored stack operations. * Handle exceptions in stack operations. ## Version 2.1.2 * Added `operator==` and `operator!=` for `RefCountedPtr` template. ## Version 2.1.1 * Support for `__stdcall` function pointers. ## Version 2.1 * Added stack traits for `std::vector` (`Vector.h`). * Added stack traits for `std::list` (`List.h`). * Added stack traits for `std::map` (`Map.h`). * Added ability to use `LuaRef` objects as an `std::map` keys. * Fixed some manual errata. ## Version 2.0 * Numerous bug fixes. * Feature Requests from Github issues. * Added `LuaRef` object. * Rewritten documentation. ## Version 1.1.0 * Split code up into several files. * Add Lua table and type representations (based on Nigel's code). * Reformat documentation as external HTML file. ## Version 1.0.3 * Pass `nil` to Lua when a null pointer is passed for objects with shared lifetime. ## Version 1.0.2 * Option to hide metatables selectable at runtime, default to true. * `addStaticMethod()` renamed to `addStaticFunction()` for consistency. * `addMethod()` renamed to `addFunction()` for consistency. * `addCFunction()` registrations. * Convert null pointers to and from `nil`. * Small performance increase in class pointer extraction. ## Version 1.0.1 * Backward compatibility with Lua 5.1.x. ## Version 1.0 * Explicit lifetime management models. * Generalized containers. * Single header distribution.