handle nonExist in parse the tree visualization and reclaim memory

This commit is contained in:
Krasimir Angelov
2023-02-23 14:19:48 +01:00
parent 9d330b6fb2
commit 57126f6d28
3 changed files with 24 additions and 1 deletions

View File

@@ -12,6 +12,7 @@ PgfLinearizationGraphvizOutput::PgfLinearizationGraphvizOutput()
internals = NULL;
leaves.n_nodes = 0;
leaves.nodes = NULL;
nonexist = false;
meta = (PgfText*) malloc(sizeof(PgfText)+2);
meta->text[0] = '?';
@@ -20,6 +21,20 @@ PgfLinearizationGraphvizOutput::PgfLinearizationGraphvizOutput()
PgfLinearizationGraphvizOutput::~PgfLinearizationGraphvizOutput()
{
for (size_t i = 0; i < n_internals; i++) {
ParseLevel *internal = internals[i];
for (size_t j = 0; j < internal->n_nodes; j++) {
delete internal->nodes[j];
}
delete(internal->nodes);
delete[] internal;
}
for (size_t j = 0; j < leaves.n_nodes; j++) {
delete leaves.nodes[j];
}
delete(leaves.nodes);
free(meta);
}
@@ -85,6 +100,7 @@ void PgfLinearizationGraphvizOutput::end_phrase(PgfText *cat, int fid, PgfText *
void PgfLinearizationGraphvizOutput::symbol_ne()
{
nonexist = true;
}
void PgfLinearizationGraphvizOutput::symbol_bind()
@@ -174,6 +190,9 @@ void PgfLinearizationGraphvizOutput::generate_graphviz_level(PgfPrinter *printer
PgfText *PgfLinearizationGraphvizOutput::generate_graphviz(PgfGraphvizOptions* opts)
{
if (nonexist)
return NULL;
PgfPrinter printer(NULL, 0, NULL);
printer.puts("graph {\n");

View File

@@ -28,6 +28,8 @@ class PGF_INTERNAL_DECL PgfLinearizationGraphvizOutput : public PgfLinearization
PgfText *meta;
bool nonexist;
void generate_graphviz_level(PgfPrinter *printer, PgfGraphvizOptions* opts, ParseLevel *level);
public:

View File

@@ -1179,7 +1179,9 @@ graphvizParseTree c opts e =
withForeignPtr marshaller $ \m ->
withGraphvizOptions opts $ \c_opts ->
bracket (withPgfExn "graphvizParseTree" (pgf_graphviz_parse_tree (c_db c) c_revision c_e nullPtr m c_opts)) free $ \c_text ->
peekText c_text
if c_text == nullPtr
then return ""
else peekText c_text
graphvizWordAlignment :: [Concr] -> GraphvizOptions -> Expr -> String
graphvizWordAlignment cs opts e = error "TODO: graphvizWordAlignment"