Update examples
This commit is contained in:
43
testsuite/objc/expression_parser/PluginEvalAux.hs
Normal file
43
testsuite/objc/expression_parser/PluginEvalAux.hs
Normal file
@ -0,0 +1,43 @@
|
||||
{-# OPTIONS -fglasgow-exts -fffi #-}
|
||||
|
||||
module PluginEvalAux where
|
||||
|
||||
import System.Plugins.Make
|
||||
import System.Plugins.Load
|
||||
import System.Plugins.Utils
|
||||
|
||||
import Foreign.C
|
||||
import Control.Exception ( evaluate )
|
||||
import System.IO
|
||||
import System.Directory ( renameFile, removeFile )
|
||||
|
||||
symbol = "resource"
|
||||
|
||||
evalWithStringResult :: FilePath -> String -> IO String
|
||||
evalWithStringResult srcFile s = do
|
||||
status <- make srcFile ["-Onot"]
|
||||
case status of
|
||||
MakeFailure err -> putStrLn "error occured" >> return (show err)
|
||||
MakeSuccess _ obj -> load' obj
|
||||
where
|
||||
load' obj = do
|
||||
loadResult <- load obj [] [] symbol
|
||||
case loadResult of
|
||||
LoadFailure errs -> putStrLn "load error" >> return (show errs)
|
||||
LoadSuccess m (rsrc :: String -> IO String) -> do
|
||||
v' <- rsrc s
|
||||
unload m
|
||||
mapM_ removeFile [ obj, replaceSuffix obj ".hi" ]
|
||||
return v'
|
||||
|
||||
foreign export ccall evalhaskell_CString :: CString -> CString -> IO CString
|
||||
|
||||
evalhaskell_CString :: CString -> CString -> IO CString
|
||||
evalhaskell_CString filePathCS sCS = do
|
||||
s <- peekCString sCS
|
||||
filePath <- peekCString filePathCS
|
||||
retval <- evalWithStringResult filePath s
|
||||
newCString retval
|
||||
|
||||
-- vi:sw=2 sts=2
|
||||
|
Reference in New Issue
Block a user