cex: derivation reference counting

* src/derivation.h, src/derivation.c: Make derivation struct opaque.
Add derivation_list type for clarity.
(derivation_list_new): New.
(derivation_list_append): New.
(derivation_list_prepend): New.
(derivation_new_leaf): New constructor for derivations with no
children.
* src/counterexample.c, src/parse-simulation.c,
* src/parse-simulation.h: Replace uses of gl_list_t containing
derivations with derivation_list and its API.
Replace calls of dervation_new using null children with
derivation_new_leaf.
* src/parse-simulation.c: replace ps_chunk and its API with typed
versions si_chunk and deriv_chunk.
* src/parse-simlation.h, src/parse-simulation.c: Remove
parse_state_retain_deriv in favor of derivation reference counting.
* src/counterexample.c: Remove search_state_retain_deriv.
This commit is contained in:
Vincent Imbimbo
2020-05-21 22:13:11 -04:00
committed by Akim Demaille
parent fc39ccab6b
commit 35c4a8e65e
5 changed files with 224 additions and 140 deletions

View File

@@ -20,7 +20,7 @@
#ifndef DERIVATION_H
# define DERIVATION_H
# include <gl_list.h>
# include <gl_xlist.h>
# include "gram.h"
@@ -29,18 +29,30 @@
relevant to the counterexample. The leaves of a derivation form a
counterexample when printed. */
typedef struct derivation
{
symbol_number sym;
gl_list_t children;
} derivation;
typedef gl_list_t derivation_list;
typedef struct derivation derivation;
derivation *derivation_new (symbol_number sym, gl_list_t children);
static inline derivation_list derivation_list_new (void)
{
return gl_list_create_empty (GL_LINKED_LIST, NULL, NULL, NULL, true);
}
void derivation_list_append (derivation_list dl, derivation *d);
void derivation_list_prepend (derivation_list dl, derivation *d);
void derivation_list_free (derivation_list dl);
derivation *derivation_new (symbol_number sym, derivation_list children);
static inline derivation *derivation_new_leaf (symbol_number sym)
{
return derivation_new (sym, NULL);
}
size_t derivation_size (const derivation *deriv);
void derivation_print (const derivation *deriv, FILE *f);
void derivation_print_leaves (const derivation *deriv, FILE *f);
void derivation_free (derivation *deriv);
void derivation_retain (derivation *deriv);
const derivation *derivation_dot (void);
derivation *derivation_dot (void);
#endif /* DERIVATION_H */