diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2014-12-19 08:47:00 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2014-12-19 08:47:00 +0000 |
| commit | bb1c1dd27c8adc007ef64546cae67ac729b05422 (patch) | |
| tree | d5ab77b7512a5df29bbf13333ddbfa7517a62971 /src/runtime/haskell-bind | |
| parent | 6b2ef03af929aaaef3ecb58401a1718a805530a2 (diff) | |
added mkApp to the Haskell binding
Diffstat (limited to 'src/runtime/haskell-bind')
| -rw-r--r-- | src/runtime/haskell-bind/PGF2.hsc | 17 | ||||
| -rw-r--r-- | src/runtime/haskell-bind/PGF2/FFI.hs | 5 |
2 files changed, 20 insertions, 2 deletions
diff --git a/src/runtime/haskell-bind/PGF2.hsc b/src/runtime/haskell-bind/PGF2.hsc index ca38dedfb..f8a68bf42 100644 --- a/src/runtime/haskell-bind/PGF2.hsc +++ b/src/runtime/haskell-bind/PGF2.hsc @@ -17,7 +17,7 @@ module PGF2 (-- * PGF -- * Concrete syntax Concr,languages,parse,parseWithHeuristics,linearize, -- * Trees - Expr,readExpr,showExpr,unApp, + Expr,readExpr,showExpr,mkApp,unApp, -- * Morphology MorphoAnalysis, lookupMorpho, fullFormLexicon, -- * Exceptions @@ -139,6 +139,21 @@ data Expr = forall a . Expr {expr :: PgfExpr, exprMaster :: a} instance Show Expr where show = showExpr +mkApp :: String -> [Expr] -> Expr +mkApp fun args = + unsafePerformIO $ + withCString fun $ \cfun -> + allocaBytes ((#size PgfApplication) + len * sizeOf (undefined :: PgfExpr)) $ \papp -> do + (#poke PgfApplication, fun) papp cfun + (#poke PgfApplication, n_args) papp len + pokeArray (papp `plusPtr` (#offset PgfApplication, args)) (map expr args) + exprPl <- gu_new_pool + c_expr <- pgf_expr_apply papp exprPl + exprFPl <- newForeignPtr gu_pool_finalizer exprPl + return (Expr c_expr (exprFPl,args)) + where + len = length args + unApp :: Expr -> Maybe (String,[Expr]) unApp (Expr expr master) = unsafePerformIO $ diff --git a/src/runtime/haskell-bind/PGF2/FFI.hs b/src/runtime/haskell-bind/PGF2/FFI.hs index 863431bca..528b80ea8 100644 --- a/src/runtime/haskell-bind/PGF2/FFI.hs +++ b/src/runtime/haskell-bind/PGF2/FFI.hs @@ -178,7 +178,10 @@ foreign import ccall "pgf/pgf.h pgf_fullform_get_string" foreign import ccall "pgf/pgf.h pgf_fullform_get_analyses" pgf_fullform_get_analyses :: Ptr PgfFullFormEntry -> Ptr PgfMorphoCallback -> Ptr GuExn -> IO () - + +foreign import ccall "pgf/pgf.h pgf_expr_apply" + pgf_expr_apply :: Ptr PgfApplication -> Ptr GuPool -> IO PgfExpr + foreign import ccall "pgf/pgf.h pgf_expr_unapply" pgf_expr_unapply :: PgfExpr -> Ptr GuPool -> IO (Ptr PgfApplication) |
