# Changelog

`lua` uses [PVP Versioning][].

## lua-2.3.1

Released 2023-03-17.

-   New module *Lua.Debug*: the module provides bindings to a
    subset of functions of the Lua debug interface. Currently the
    module only binds `lua_getupvalue` and `lua_setupvalue`.

## lua-2.3.0

Released 2023-03-13.

-   New function `hslua_setwarnf`: The function allows to set a
    C function as a hook that is called on all complete warning
    messages. It is intended as a simple way to set a custom
    warning function.

-   Export version and copyright info from Lua.Constants: the
    following patterns are made available, with content identical
    to that of the respective C functions: `LUA_VERSION`,
    `LUA_RELEASE`, and `LUA_COPYRIGHT`.

-   Added a new flag `cross-compile`. When enabled, the code is
    setup in a way that allows cross-compilation of the package,
    but some of the string constants will be hard-coded and may
    not match the Lua version against which the library is
    compiled.

-   `Type` is now an instance of `Read`.

## lua-2.2.1

Released 2022-06-19.

-   Make string-peeking independent of the current foreign
    encoding: always use char8 encoding to retrieve values of
    `LUA_PRELOAD_TABLE` and `LUA_LOADED_TABLE`.

## lua-2.2.0

Released 2022-02-19.

-   Update to Lua 5.4, include Lua 5.4.4 by default.

-   Removed `hardcode-reg-keys` flag: this is no longer required
    for Lua 5.4.

-   Support arbitrary number of uservalues: Lua 5.4 allows an
    arbitrary number of uservalues to be associated with userdata
    objects. The functions `lua_newuserdata`, `lua_getuservalue`,
    and `lua_setuservalue` are replaced with the new functions
    `lua_newuserdatauv`, `lua_getiuservalue`, and
    `lua_setiuservalue`, respectively.

    The function `hslua_newhsuserdata` is renamed to
    `hslua_newhsuserdatauv` and takes the number of associated
    uservalues as an additional argument.

-   Support for the new warnings system: export binding to
    `lua_warning`.

-   The function `lua_gc` now takes three data arguments of type
    CInt. This is a workaround for the fact that the C function
    has become variadic.

-   The new patterns `LUA_GCGEN` and `LUA_GCINC` are usable with
    `lua_gc` to switch to generational and incremental garbage
    collection, respectively.

## lua-2.1.0

Released 29-01-2022.

-   The functions `lua_rawget` and `lua_rawgeti` now return the
    type of the value that was pushed to the stack.

-   Added bindings to unsafe function `lua_arith`. A new type
    `ArithOPCode` for arithmetic operations is added, as are
    pattern synonyms for the supported operations. These are:

    -   LUA_OPADD
    -   LUA_OPSUB
    -   LUA_OPMUL
    -   LUA_OPDIV
    -   LUA_OPIDIV
    -   LUA_OPMOD
    -   LUA_OPPOW
    -   LUA_OPUNM
    -   LUA_OPBNOT
    -   LUA_OPBAND
    -   LUA_OPBOR
    -   LUA_OPBXOR
    -   LUA_OPSHL
    -   LUA_OPSHR

-   Added ersatz functions `hslua_arith` and `hsluaL_requiref`,
    wrapping `lua_artih` and `luaL_requiref`, respectively. Both
    functions catch any error resulting from the call.

-   Made types `OPCode`, `StatusCode`, and `GCCode` instances of
    type class `Show`.

-   The `Show` instances of Integer and Number now behave like
    those of the wrapped types. Both types are now also instance
    of `Read`.

-   Removed `hslua_userdata_gc` from `hslua.h`.

## lua-2.0.2

Released 2021-11-26.

-   Make sure lualib.h is available through this package. The
    header file contains info on how and under which name the
    standard library is loaded.

## lua-2.0.1

Released 2021-11-03.

-   Added bindings to `lua_rotate` and `lua_version`.

## lua-2.0.0.1

Released 2021-10-30.

-   Only install includes when using the Lua code shipped with the
    package (Ellie Hermaszewska). Cabal no longer tries to install
    the header files if a system-wide installation is used.

## lua-2.0.0

Released 2021-10-21.

-   Module hierarchy moved from `Foreign.Lua.Raw` to `Lua`.

-   Documentation has been improved.

-   Added new function `withNewState` to run Lua operations.

-   New modules `Lua.Ersatz` containing all bindings to safe
    ersatz functions.

-   Higher level and enum types have been removed, only the
    low-level “code” types are kept in this package.

-   Constants are now represented as pattern synonyms like
    `LUA_OK`.

-   Provide bindings to more functions:

    -   `lua_is...` type-checking functions;
    -   `lua_pushstring` to push plain CStrings;
    -   auxiliary functions
        -   `luaL_loadfile`, and
        -   `luaL_loadfilex`;
    -   unsafe functions
        -   `lua_gettable`,
        -   `lua_settable`,
        -   `lua_getglobal`, and
        -   `lua_setglobal`.

-   The function `lua_pop` now expects a `CInt` instead of a
    `StackIndex`.

-   New StackIndex constructor functions `nthTop`, `nthBottom`,
    `nth`, and `top`.

-   Avoid unnecessary modification of HSFUN metatable.

-   Various cleanups and test improvements.

## lua-1.0.0

Released 2021-02-18.

-   Initially created. Contains all modules in the
    `Foreign.Lua.Raw` hierarchy from `hslua-1.3`. Documentation
    has been improved.

  [PVP Versioning]: https://pvp.haskell.org
