Initial commit
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
{-# LANGUAGE CApiFFI #-}
|
||||
{-# LANGUAGE ForeignFunctionInterface #-}
|
||||
{-# LANGUAGE TemplateHaskell #-}
|
||||
|
||||
module WM.Mruby where
|
||||
|
||||
import Data.FileEmbed (embedFile)
|
||||
import Data.Text qualified as T
|
||||
import Data.Text.Encoding qualified as TE
|
||||
import Data.Text.Encoding.Error qualified as TEE
|
||||
import Foreign.C (CString, withCString)
|
||||
import Foreign.Ptr
|
||||
|
||||
runtimeRb :: String
|
||||
runtimeRb =
|
||||
T.unpack (TE.decodeUtf8With TEE.lenientDecode $(embedFile "./app/ruby/lib.rb"))
|
||||
|
||||
data MrbState
|
||||
|
||||
foreign import capi "mruby.h mrb_open"
|
||||
mrb_open :: IO (Ptr MrbState)
|
||||
|
||||
foreign import capi "mruby.h mrb_close"
|
||||
mrb_close :: Ptr MrbState -> IO ()
|
||||
|
||||
foreign import capi "mruby/compile.h mrb_load_string"
|
||||
c_mrb_load_string :: Ptr MrbState -> CString -> IO ()
|
||||
|
||||
runRuby :: Ptr MrbState -> String -> IO ()
|
||||
runRuby mrb code =
|
||||
withCString code $ \cstr ->
|
||||
c_mrb_load_string mrb cstr
|
||||
Reference in New Issue
Block a user