content: {-|
  Module      : Lua.Debug
  Copyright   : © 2023-2024 Albert Krewinkel
  License     : MIT
  Maintainer  : Albert Krewinkel <tarleb@hslua.org>
  
  Haskell bindings to Lua's debug interface.
  -}
  module Lua.Debug
    ( lua_getupvalue
    , lua_setupvalue
    )
  where
  
  import Foreign.C
  import Lua.Types as Lua
  
  -- | Gets information about the @n@-th upvalue of the closure at index
  -- @funcindex@. It pushes the upvalue\'s value onto the stack and
  -- returns its name. Returns @NULL@ (and pushes nothing) when the index
  -- @n@ is greater than the number of upvalues.
  --
  -- See
  -- <https://www.lua.org/manual/5.4/manual.html#pdf-debug.getupvalue debug.getupvalue>
  -- for more information about upvalues.
  --
  -- @[0, +(0|1), -]@
  --
  -- <https://www.lua.org/manual/5.4/manual.html#lua_getupvalue lua_getupvalue>.
  foreign import ccall unsafe "lua.h lua_getupvalue"
    lua_getupvalue :: Lua.State
                   -> StackIndex  -- ^ funcindex
                   -> CInt        -- ^ n
                   -> IO CString
  
  -- | Sets the value of a closure’s upvalue. It assigns the value on the
  -- top of the stack to the upvalue and returns its name. It also pops
  -- the value from the stack.
  --
  -- Returns @NULL@ (and pops nothing) when the index @n@ is greater than
  -- the number of upvalues.
  --
  -- Parameters @funcindex@ and @n@ are as in the function
  -- 'lua_getupvalue'.
  --
  -- @[-(0|1), +0, -]@
  --
  -- <https://www.lua.org/manual/5.4/manual.html#lua_setupvalue lua_setupvalue>.
  foreign import ccall unsafe "lua.h lua_setupvalue"
    lua_setupvalue :: Lua.State
                   -> StackIndex  -- ^ funcindex
                   -> CInt        -- ^ n
                   -> IO CString
  