From 3cb475f26539cbb6a2edbef1d6285b39a409288c Mon Sep 17 00:00:00 2001 From: Matthew Fernandez Date: Mon, 25 Apr 2022 07:59:01 -0700 Subject: [PATCH] gvpr: replace use of alternative stack implementation with Graphviz generic one Similar to previous changes to `gc` in 4e2875fd7376338259dcb3ccc8f029d58bdf22dd, this replaces some duplicated functionality with the generic Graphviz stack implementation. This also adds checks for allocation failures that were previously missing. Gitlab: #1793 --- lib/gvpr/gvpr.c | 10 +++++----- lib/gvpr/queue.h | 2 -- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/lib/gvpr/gvpr.c b/lib/gvpr/gvpr.c index 1ae3e49e4..e43713196 100644 --- a/lib/gvpr/gvpr.c +++ b/lib/gvpr/gvpr.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -583,7 +584,7 @@ static void travBFS(Gpr_t * state, Expr_t* prog, comp_block * xprog) static void travDFS(Gpr_t * state, Expr_t* prog, comp_block * xprog, trav_fns * fns) { Agnode_t *n; - queue *stk; + gv_stack_t stk = {0}; Agnode_t *curn; Agedge_t *cure; Agedge_t *entry; @@ -592,7 +593,6 @@ static void travDFS(Gpr_t * state, Expr_t* prog, comp_block * xprog, trav_fns * nodestream nodes; Agedgepair_t seed; - stk = mkStack(); nodes.oldroot = 0; nodes.prev = 0; while ((n = nextNode(state, &nodes))) { @@ -630,7 +630,7 @@ static void travDFS(Gpr_t * state, Expr_t* prog, comp_block * xprog, trav_fns * evalEdge(state, prog, xprog, cure); } else { evalEdge(state, prog, xprog, cure); - push(stk, entry); + stack_push_or_exit(&stk, entry); state->tvedge = entry = cure; curn = cure->node; cure = 0; @@ -645,7 +645,7 @@ static void travDFS(Gpr_t * state, Expr_t* prog, comp_block * xprog, trav_fns * nd = nData(curn); POP(nd); cure = entry; - entry = (Agedge_t *) pull(stk); + entry = stack_is_empty(&stk) ? NULL : stack_pop(&stk); if (entry == &(seed.out)) state->tvedge = 0; else @@ -658,7 +658,7 @@ static void travDFS(Gpr_t * state, Expr_t* prog, comp_block * xprog, trav_fns * } } state->tvedge = 0; - freeQ(stk); + stack_reset(&stk); } static void travNodes(Gpr_t * state, Expr_t* prog, comp_block * xprog) diff --git a/lib/gvpr/queue.h b/lib/gvpr/queue.h index 506aa1aee..bed779912 100644 --- a/lib/gvpr/queue.h +++ b/lib/gvpr/queue.h @@ -24,13 +24,11 @@ extern "C" { extern void freeQ(queue *); /* pseudo-functions: -extern queue* mkStack(); extern queue* mkQueue(); extern void* pull(queue*); extern void* head(queue*); */ -#define mkStack() mkQ(Dtstack) #define mkQueue() mkQ(Dtqueue) #define pull(q) (pop(q,1)) #define head(q) (pop(q,0)) -- 2.40.0