module Foreign.Lua.Module
( requirehs
, preloadhs
, addfield
, addfunction
, create
)
where
import Control.Monad (unless)
import Foreign.Lua.Core
import Foreign.Lua.Types (Pushable, push)
import Foreign.Lua.FunctionCalling (ToHaskellFunction, pushHaskellFunction)
requirehs :: String -> Lua () -> Lua ()
requirehs :: String -> Lua () -> Lua ()
requirehs modname :: String
modname pushMod :: Lua ()
pushMod = do
StackIndex -> String -> Lua ()
getfield StackIndex
registryindex String
loadedTableRegistryField
StackIndex -> String -> Lua ()
getfield StackIndex
stackTop String
modname
Bool
alreadyLoaded <- StackIndex -> Lua Bool
toboolean StackIndex
stackTop
Bool -> Lua () -> Lua ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless Bool
alreadyLoaded (Lua () -> Lua ()) -> Lua () -> Lua ()
forall a b. (a -> b) -> a -> b
$ do
StackIndex -> Lua ()
pop 1
Lua ()
pushMod
StackIndex -> Lua ()
pushvalue StackIndex
stackTop
StackIndex -> String -> Lua ()
setfield (CInt -> StackIndex
nthFromTop 3) String
modname
StackIndex -> Lua ()
remove (CInt -> StackIndex
nthFromTop 2)
preloadhs :: String -> Lua NumResults -> Lua ()
preloadhs :: String -> Lua NumResults -> Lua ()
preloadhs name :: String
name pushMod :: Lua NumResults
pushMod = do
StackIndex -> String -> Lua ()
getfield StackIndex
registryindex String
preloadTableRegistryField
Lua NumResults -> Lua ()
forall a. ToHaskellFunction a => a -> Lua ()
pushHaskellFunction Lua NumResults
pushMod
StackIndex -> String -> Lua ()
setfield (CInt -> StackIndex
nthFromTop 2) String
name
StackIndex -> Lua ()
pop 1
addfield :: Pushable a => String -> a -> Lua ()
addfield :: String -> a -> Lua ()
addfield name :: String
name value :: a
value = do
String -> Lua ()
forall a. Pushable a => a -> Lua ()
push String
name
a -> Lua ()
forall a. Pushable a => a -> Lua ()
push a
value
StackIndex -> Lua ()
rawset (CInt -> StackIndex
nthFromTop 3)
addfunction :: ToHaskellFunction a => String -> a -> Lua ()
addfunction :: String -> a -> Lua ()
addfunction name :: String
name fn :: a
fn = do
String -> Lua ()
forall a. Pushable a => a -> Lua ()
push String
name
a -> Lua ()
forall a. ToHaskellFunction a => a -> Lua ()
pushHaskellFunction a
fn
StackIndex -> Lua ()
rawset (CInt -> StackIndex
nthFromTop 3)
create :: Lua ()
create :: Lua ()
create = Lua ()
newtable