Freeing StablePtr's in PyGF.

This commit is contained in:
jordi.saludes
2010-07-16 13:17:49 +00:00
parent 5b14dd8da5
commit f715e053b9
2 changed files with 17 additions and 6 deletions

View File

@@ -9,6 +9,11 @@ import Foreign.C.Types
#include "pygf.h" #include "pygf.h"
-- type PyPtr = Ptr Py -- type PyPtr = Ptr Py
freeSp :: String -> Ptr a -> IO ()
freeSp tname p = do
sp <- (#peek PyGF, sp) p
freeStablePtr sp
putStrLn $ "freeing " ++ tname ++ " at " ++ (show p)
instance Storable PGF where instance Storable PGF where
sizeOf _ = (#size PyGF) sizeOf _ = (#size PyGF)
@@ -50,6 +55,13 @@ instance Storable Tree where
sp <- (#peek PyGF, sp) p sp <- (#peek PyGF, sp) p
deRefStablePtr sp deRefStablePtr sp
foreign export ccall gf_freePGF :: Ptr PGF -> IO ()
foreign export ccall gf_freeType :: Ptr Type -> IO ()
foreign export ccall gf_freeLanguage :: Ptr Language -> IO ()
gf_freePGF = freeSp "pgf"
gf_freeType = freeSp "type"
gf_freeLanguage = freeSp "language"
{-foreign export ccall gf_printCId :: Ptr CId-> IO CString {-foreign export ccall gf_printCId :: Ptr CId-> IO CString
gf_printCId p = do gf_printCId p = do

View File

@@ -56,11 +56,10 @@ int main(int argc, char *argv[])
} while (*p && k < 5); } while (*p && k < 5);
} else } else
puts("no match"); puts("no match");
gf_freeTrees(result); gf_freeTrees(result); */
gf_freeType(cat); gf_freeType(&cat);
gf_freeLanguage(lang); gf_freeLanguage(&lang);
gf_freePGF(pgf); */ gf_freePGF(&pgf);
gf_exit(); gf_exit();
return 0; return 0;
} }