diff --git a/src/compiler/GF/Compile/GrammarToPGF.hs b/src/compiler/GF/Compile/GrammarToPGF.hs index 66bb7417b..54a09164b 100644 --- a/src/compiler/GF/Compile/GrammarToPGF.hs +++ b/src/compiler/GF/Compile/GrammarToPGF.hs @@ -51,7 +51,7 @@ grammar2PGF opts gr am probs = do modifyPGF gr $ do sequence_ [setAbstractFlag name value | (name,value) <- flags] sequence_ [createCategory c ctxt p | (c,ctxt,p) <- cats] - sequence_ [createFunction f ty p | (f,ty,_,_,p) <- funs] + sequence_ [createFunction f ty arity p | (f,ty,arity,_,p) <- funs] where adefs = [((cPredefAbs,c), AbsCat (Just (L NoLoc []))) | c <- [cFloat,cInt,cString]] ++ diff --git a/src/runtime/c/pgf/pgf.cxx b/src/runtime/c/pgf/pgf.cxx index 6c7a79c8e..1374d3667 100644 --- a/src/runtime/c/pgf/pgf.cxx +++ b/src/runtime/c/pgf/pgf.cxx @@ -638,7 +638,7 @@ PgfRevision pgf_checkout_revision(PgfDB *db, PgfText *name, PGF_API void pgf_create_function(PgfDB *db, PgfRevision revision, PgfText *name, - PgfType ty, prob_t prob, + PgfType ty, size_t arity, prob_t prob, PgfMarshaller *m, PgfExn *err) { @@ -651,7 +651,7 @@ void pgf_create_function(PgfDB *db, PgfRevision revision, ref absfun = PgfDB::malloc(name->size+1); absfun->ref_count = 1; absfun->type = m->match_type(&u, ty); - absfun->arity = 0; + absfun->arity = arity; absfun->defns = 0; absfun->ep.prob = prob; ref efun = diff --git a/src/runtime/c/pgf/pgf.h b/src/runtime/c/pgf/pgf.h index d13d9ace8..f9a8dd8b2 100644 --- a/src/runtime/c/pgf/pgf.h +++ b/src/runtime/c/pgf/pgf.h @@ -368,7 +368,7 @@ PgfRevision pgf_checkout_revision(PgfDB *db, PgfText *name, PGF_API_DECL void pgf_create_function(PgfDB *db, PgfRevision revision, PgfText *name, - PgfType ty, prob_t prob, + PgfType ty, size_t arity, prob_t prob, PgfMarshaller *m, PgfExn *err); diff --git a/src/runtime/haskell/PGF2/FFI.hsc b/src/runtime/haskell/PGF2/FFI.hsc index c327269b8..6dad479e4 100644 --- a/src/runtime/haskell/PGF2/FFI.hsc +++ b/src/runtime/haskell/PGF2/FFI.hsc @@ -127,7 +127,7 @@ foreign import ccall pgf_commit_revision :: Ptr PgfDB -> Ptr PgfRevision -> Ptr foreign import ccall pgf_checkout_revision :: Ptr PgfDB -> Ptr PgfText -> Ptr PgfExn -> IO (Ptr PgfRevision) -foreign import ccall pgf_create_function :: Ptr PgfDB -> Ptr PgfRevision -> Ptr PgfText -> StablePtr Type -> (#type prob_t) -> Ptr PgfMarshaller -> Ptr PgfExn -> IO () +foreign import ccall pgf_create_function :: Ptr PgfDB -> Ptr PgfRevision -> Ptr PgfText -> StablePtr Type -> CSize -> (#type prob_t) -> Ptr PgfMarshaller -> Ptr PgfExn -> IO () foreign import ccall pgf_drop_function :: Ptr PgfDB -> Ptr PgfRevision -> Ptr PgfText -> Ptr PgfExn -> IO () diff --git a/src/runtime/haskell/PGF2/Transactions.hsc b/src/runtime/haskell/PGF2/Transactions.hsc index 24582cdd3..c43c9b6bb 100644 --- a/src/runtime/haskell/PGF2/Transactions.hsc +++ b/src/runtime/haskell/PGF2/Transactions.hsc @@ -109,12 +109,12 @@ checkoutPGF p name = else do fptr2 <- C.newForeignPtr c_revision (withForeignPtr (a_db p) (\c_db -> pgf_free_revision c_db c_revision)) return (Just (PGF (a_db p) fptr2 (languages p))) -createFunction :: Fun -> Type -> Float -> Transaction () -createFunction name ty prob = Transaction $ \c_db c_revision c_exn -> +createFunction :: Fun -> Type -> Int -> Float -> Transaction () +createFunction name ty arity prob = Transaction $ \c_db c_revision c_exn -> withText name $ \c_name -> bracket (newStablePtr ty) freeStablePtr $ \c_ty -> withForeignPtr marshaller $ \m -> do - pgf_create_function c_db c_revision c_name c_ty prob m c_exn + pgf_create_function c_db c_revision c_name c_ty (fromIntegral arity) prob m c_exn dropFunction :: Fun -> Transaction () dropFunction name = Transaction $ \c_db c_revision c_exn ->