diff --git a/src/runtime/c/pgf/data.cxx b/src/runtime/c/pgf/data.cxx index 660ac2dee..b04a46492 100644 --- a/src/runtime/c/pgf/data.cxx +++ b/src/runtime/c/pgf/data.cxx @@ -63,6 +63,13 @@ void pgf_symbol_free(PgfSymbol sym) PgfDB::free(sym_kp); break; } + case PgfSymbolBIND::tag: + case PgfSymbolSOFTBIND::tag: + case PgfSymbolNE::tag: + case PgfSymbolSOFTSPACE::tag: + case PgfSymbolCAPIT::tag: + case PgfSymbolALLCAPIT::tag: + break; default: PgfDB::free(ref::untagged(sym)); } @@ -87,7 +94,8 @@ void PgfConcrLin::release(ref lin) for (size_t i = 0; i < lin->res->len; i++) { ref res = *vector_elem(lin->res, i); - PgfDB::free(res->vars); + if (res->vars != 0) + PgfDB::free(res->vars); PgfDB::free(res); } PgfDB::free(lin->res); @@ -95,7 +103,7 @@ void PgfConcrLin::release(ref lin) for (size_t i = 0; i < lin->seqs->len; i++) { ref> syms = *vector_elem(lin->seqs, i); for (size_t j = 0; j < syms->len; j++) { - PgfSymbol sym = *vector_elem(syms, i); + PgfSymbol sym = *vector_elem(syms, j); pgf_symbol_free(sym); } PgfDB::free(syms); diff --git a/src/runtime/c/pgf/pgf.cxx b/src/runtime/c/pgf/pgf.cxx index c658f4a12..91fa38e91 100644 --- a/src/runtime/c/pgf/pgf.cxx +++ b/src/runtime/c/pgf/pgf.cxx @@ -1610,6 +1610,7 @@ public: throw pgf_error(builder_error_msg); *vector_elem(syms, sym_index) = ref::tagged(0); + sym_index++; } PGF_API_END }