mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-22 17:42:51 -06:00
fix reference counting for concrete revisions
This commit is contained in:
@@ -873,7 +873,7 @@ PgfConcrRevision pgf_create_concrete(PgfDB *db, PgfRevision revision,
|
|||||||
throw pgf_error("The concrete syntax already exists");
|
throw pgf_error("The concrete syntax already exists");
|
||||||
|
|
||||||
concr = PgfDB::malloc<PgfConcr>(name->size+1);
|
concr = PgfDB::malloc<PgfConcr>(name->size+1);
|
||||||
concr->ref_count = 1;
|
concr->ref_count = 2;
|
||||||
concr->ref_count_ex = 1;
|
concr->ref_count_ex = 1;
|
||||||
concr->cflags = 0;
|
concr->cflags = 0;
|
||||||
concr->lins = 0;
|
concr->lins = 0;
|
||||||
@@ -912,7 +912,7 @@ PgfConcrRevision pgf_clone_concrete(PgfDB *db, PgfRevision revision,
|
|||||||
throw pgf_error("Unknown concrete syntax");
|
throw pgf_error("Unknown concrete syntax");
|
||||||
|
|
||||||
ref<PgfConcr> clone = PgfDB::malloc<PgfConcr>(name->size+1);
|
ref<PgfConcr> clone = PgfDB::malloc<PgfConcr>(name->size+1);
|
||||||
clone->ref_count = 1;
|
clone->ref_count = 2;
|
||||||
clone->ref_count_ex = 1;
|
clone->ref_count_ex = 1;
|
||||||
clone->cflags = concr->cflags;
|
clone->cflags = concr->cflags;
|
||||||
clone->lins = concr->lins;
|
clone->lins = concr->lins;
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ foreign import ccall "pgf_free_revision" pgf_free_revision_ :: Ptr PgfDB -> Ptr
|
|||||||
|
|
||||||
foreign import ccall "&pgf_free_revision" pgf_free_revision :: FinalizerEnvPtr PgfDB (PgfRevision PGF)
|
foreign import ccall "&pgf_free_revision" pgf_free_revision :: FinalizerEnvPtr PgfDB (PgfRevision PGF)
|
||||||
|
|
||||||
|
foreign import ccall "pgf_free_concr_revision" pgf_free_concr_revision_ :: Ptr PgfDB -> Ptr (PgfRevision Concr) -> IO ()
|
||||||
|
|
||||||
foreign import ccall "&pgf_free_concr_revision" pgf_free_concr_revision :: FinalizerEnvPtr PgfDB (PgfRevision Concr)
|
foreign import ccall "&pgf_free_concr_revision" pgf_free_concr_revision :: FinalizerEnvPtr PgfDB (PgfRevision Concr)
|
||||||
|
|
||||||
foreign import ccall "pgf_abstract_name"
|
foreign import ccall "pgf_abstract_name"
|
||||||
|
|||||||
@@ -147,7 +147,8 @@ dropCategory name = Transaction $ \c_db c_revision c_exn ->
|
|||||||
createConcrete :: ConcName -> Transaction Concr () -> Transaction PGF ()
|
createConcrete :: ConcName -> Transaction Concr () -> Transaction PGF ()
|
||||||
createConcrete name (Transaction f) = Transaction $ \c_db c_revision c_exn ->
|
createConcrete name (Transaction f) = Transaction $ \c_db c_revision c_exn ->
|
||||||
withText name $ \c_name -> do
|
withText name $ \c_name -> do
|
||||||
c_concr_revision <- pgf_create_concrete c_db c_revision c_name c_exn
|
bracket (pgf_create_concrete c_db c_revision c_name c_exn)
|
||||||
|
(pgf_free_concr_revision_ c_db) $ \c_concr_revision ->
|
||||||
f c_db c_concr_revision c_exn
|
f c_db c_concr_revision c_exn
|
||||||
|
|
||||||
alterConcrete :: ConcName -> Transaction Concr () -> Transaction PGF ()
|
alterConcrete :: ConcName -> Transaction Concr () -> Transaction PGF ()
|
||||||
|
|||||||
Reference in New Issue
Block a user