mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-30 23:02:50 -06:00
implement pre {..}
This commit is contained in:
@@ -46,6 +46,38 @@ void PgfConcrLincat::release(ref<PgfConcrLincat> lincat)
|
||||
PgfDB::free(lincat->fields);
|
||||
}
|
||||
|
||||
PGF_INTERNAL
|
||||
void pgf_symbol_free(PgfSymbol sym)
|
||||
{
|
||||
switch (ref<PgfSymbol>::get_tag(sym)) {
|
||||
case PgfSymbolKP::tag: {
|
||||
auto sym_kp = ref<PgfSymbolKP>::untagged(sym);
|
||||
pgf_symbols_free(sym_kp->default_form);
|
||||
for (size_t i = 0; i < sym_kp->alts.len; i++) {
|
||||
pgf_symbols_free(sym_kp->alts.data[i].form);
|
||||
for (size_t j = 0; j < sym_kp->alts.data[i].prefixes->len; j++) {
|
||||
ref<PgfText> prefix = *vector_elem(sym_kp->alts.data[i].prefixes, j);
|
||||
PgfDB::free(prefix);
|
||||
}
|
||||
}
|
||||
PgfDB::free(sym_kp);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
PgfDB::free(ref<void>::untagged(sym));
|
||||
}
|
||||
}
|
||||
|
||||
PGF_INTERNAL
|
||||
void pgf_symbols_free(ref<Vector<PgfSymbol>> syms)
|
||||
{
|
||||
for (size_t i = 0; i < syms->len; i++) {
|
||||
PgfSymbol sym = *vector_elem(syms, i);
|
||||
pgf_symbol_free(sym);
|
||||
}
|
||||
PgfDB::free(syms);
|
||||
}
|
||||
|
||||
void PgfConcrLin::release(ref<PgfConcrLin> lin)
|
||||
{
|
||||
for (size_t i = 0; i < lin->args->len; i++) {
|
||||
@@ -62,7 +94,7 @@ void PgfConcrLin::release(ref<PgfConcrLin> lin)
|
||||
ref<Vector<PgfSymbol>> syms = *vector_elem(lin->seqs, i);
|
||||
for (size_t j = 0; j < syms->len; j++) {
|
||||
PgfSymbol sym = *vector_elem(syms, i);
|
||||
PgfDB::free(ref<void>::untagged(sym));
|
||||
pgf_symbol_free(sym);
|
||||
}
|
||||
PgfDB::free(syms);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user