From 0f4bfe6e70263fbeb580014b62632f403b29b414 Mon Sep 17 00:00:00 2001 From: Marc Vertes Date: Tue, 29 Aug 2023 18:22:13 +0200 Subject: gint: add an interactive REPL --- parser/dot.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'parser/dot.go') diff --git a/parser/dot.go b/parser/dot.go index cef1acb..aae5c5f 100644 --- a/parser/dot.go +++ b/parser/dot.go @@ -17,7 +17,13 @@ func (*Parser) Adot(nodes []*Node, c string) { n.Dot(c, "") } -func (n *Node) Dot(c, s string) { n.astDot(dotWriter(c), s) } +func (n *Node) Dot(c, s string) { + dw, cmd := dotWriter(c) + n.astDot(dw, s) + if cmd != nil { + cmd.Wait() + } +} func (n *Node) Sdot(s string) string { var buf bytes.Buffer @@ -49,6 +55,9 @@ func (n *Node) astDot(out io.Writer, label string) { return true }, nil) fmt.Fprintf(out, "}") + if c, ok := out.(io.Closer); ok { + c.Close() + } } type nopCloser struct { @@ -57,9 +66,9 @@ type nopCloser struct { func (nopCloser) Close() error { return nil } -func dotWriter(dotCmd string) io.WriteCloser { +func dotWriter(dotCmd string) (io.WriteCloser, *exec.Cmd) { if dotCmd == "" { - return nopCloser{io.Discard} + return nopCloser{io.Discard}, nil } fields := strings.Fields(dotCmd) cmd := exec.Command(fields[0], fields[1:]...) @@ -70,5 +79,5 @@ func dotWriter(dotCmd string) io.WriteCloser { if err = cmd.Start(); err != nil { log.Fatal(err) } - return dotin + return dotin, cmd } -- cgit v1.2.3