X-Git-Url: http://git.lukelau.me/?a=blobdiff_plain;f=Main.hs;h=468573d865ab4fccb350bc78bf446d4e9d400563;hb=7b8ef6725099f09b81f8c39ca6f00dec14213bed;hp=bc7c3077f9b6bbdda78273381921826110acf62a;hpb=18c4b939a6ba1099cd7296b839428f829533f3c8;p=kaleidoscope-hs.git diff --git a/Main.hs b/Main.hs index bc7c307..468573d 100644 --- a/Main.hs +++ b/Main.hs @@ -9,6 +9,7 @@ import Control.Monad.IO.Class import Data.String import qualified Data.Map as Map import qualified Data.Text.Lazy.IO as Text +import Foreign.Ptr import LLVM.AST.AddrSpace import LLVM.AST.Constant import LLVM.AST.Float @@ -27,6 +28,8 @@ import System.IO import System.IO.Error import Text.Read (readMaybe) +foreign import ccall "dynamic" mkFun :: FunPtr (IO Double) -> IO Double + data JITEnv = JITEnv { jitEnvContext :: Context , jitEnvCompileLayer :: IRCompileLayer ObjectLinkingLayer @@ -83,8 +86,10 @@ repl = do jit :: JITEnv -> Module -> IO Double jit JITEnv{jitEnvCompileLayer=compLayer, jitEnvModuleKey=mdlKey} mdl = - withModule compLayer mdlKey mdl $ - return 0 + withModule compLayer mdlKey mdl $ do + mangled <- mangleSymbol compLayer "__anon_expr" + Right (JITSymbol fPtr _) <- findSymbolIn compLayer mdlKey mangled False + mkFun (castPtrToFunPtr (wordPtrToPtr fPtr)) type Binds = Map.Map String Operand