From f2bc7ec7b64973bd8147d4394a937d6c491a71fd Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Thu, 28 Sep 2017 16:33:34 +0200 Subject: added exprSubstitute in the C runtime for substituting meta variables --- src/runtime/haskell-bind/PGF2.hsc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/runtime/haskell-bind/PGF2.hsc') diff --git a/src/runtime/haskell-bind/PGF2.hsc b/src/runtime/haskell-bind/PGF2.hsc index 0d1d46be6..733e29c74 100644 --- a/src/runtime/haskell-bind/PGF2.hsc +++ b/src/runtime/haskell-bind/PGF2.hsc @@ -39,7 +39,7 @@ module PGF2 (-- * PGF mkFloat,unFloat, mkMeta,unMeta, mkCId, - exprHash, exprSize, exprFunctions, + exprHash, exprSize, exprFunctions, exprSubstitute, treeProbability, -- ** Types @@ -366,6 +366,20 @@ exprFunctions (Expr c_expr touch) = touch return funs +exprSubstitute :: Expr -> [Expr] -> Expr +exprSubstitute (Expr c_expr touch) meta_values = + unsafePerformIO $ + withGuPool $ \tmpPl -> do + c_meta_values <- newSequence (#size PgfExpr) pokeExpr meta_values tmpPl + exprPl <- gu_new_pool + c_expr <- pgf_expr_substitute c_expr c_meta_values exprPl + touch + exprFPl <- newForeignPtr gu_pool_finalizer exprPl + let touch' = sequence_ (touchForeignPtr exprFPl : map touchExpr meta_values) + return (Expr c_expr touch') + where + pokeExpr ptr (Expr c_expr _) = poke ptr c_expr + ----------------------------------------------------------------------------- -- Graphviz -- cgit v1.2.3