Fix cimpiled ruby library system

This commit is contained in:
2026-07-15 14:44:05 +01:00
parent 1d5acfdc94
commit 12d5815fb6
10 changed files with 40 additions and 31 deletions
+13 -10
View File
@@ -1,20 +1,11 @@
{-# 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.C (CChar, CInt (CInt), 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"
@@ -30,3 +21,15 @@ runRuby :: Ptr MrbState -> String -> IO ()
runRuby mrb code =
withCString code $ \cstr ->
c_mrb_load_string mrb cstr
foreign import capi "ruby_compiled.h value mgems"
c_mgems :: Ptr CChar
foreign import capi "ruby_compiled.h value mgems_len"
c_mgems_len :: CInt
foreign import capi "mruby/irep.h mrb_load_irep_buf"
c_mrb_load_irep_buf :: Ptr MrbState -> Ptr CChar -> CInt -> IO ()
loadRubyLibs :: Ptr MrbState -> IO ()
loadRubyLibs mrb = c_mrb_load_irep_buf mrb c_mgems c_mgems_len