content: {-|
  Module      : Lua.Ersatz.Auxiliary
  Copyright   : © 2007–2012 Gracjan Polak;
                © 2012–2016 Ömer Sinan Ağacan;
                © 2017-2024 Albert Krewinkel
  License     : MIT
  Maintainer  : Albert Krewinkel <tarleb@hslua.org>
  Stability   : beta
  Portability : non-portable (depends on GHC)
  
  Raw bindings to ersatz functions of the auxiliary library.
  -}
  module Lua.Ersatz.Auxiliary
    ( -- * Auxiliary Library
      hsluaL_newstate
    , hsluaL_requiref
    , hsluaL_tolstring
    ) where
  
  import Foreign.C (CChar, CInt (CInt), CSize)
  import Lua.Types (CFunction, StackIndex, StatusCode)
  import Foreign.Ptr (Ptr)
  import qualified Lua.Types as Lua
  
  -- | Creates a new Lua state and set extra registry values for error
  -- bookkeeping.
  foreign import ccall unsafe "hslauxlib.h hsluaL_newstate"
    hsluaL_newstate :: IO Lua.State
  
  -- | If @modname@ is not already present in @package.loaded@. calls
  -- function @openf@ with string @modname@ as an argument and sets the
  -- call result in @package.loaded[modname]@, as if that function has
  -- been called through
  -- <https://www.lua.org/manual/5.4/manual.html#pdf-require require>.
  --
  -- If @glb@ is true, also stores the module into global @modname@.
  --
  -- Leaves a copy of the module on the stack.
  foreign import ccall unsafe "hslauxlib.c hsluaL_requiref"
    hsluaL_requiref :: Lua.State
                    -> Ptr CChar   -- ^ modname
                    -> CFunction   -- ^ openf
                    -> Lua.LuaBool -- ^ glb
                    -> Ptr StatusCode
                    -> IO ()
  
  -- | Converts object to string, respecting any metamethods; returns
  -- @NULL@ if an error occurs.
  foreign import ccall safe "hslauxlib.h hsluaL_tolstring"
    hsluaL_tolstring :: Lua.State -> StackIndex -> Ptr CSize -> IO (Ptr CChar)
  