diff options
| author | Marc Vertes <mvertes@free.fr> | 2023-08-29 18:22:13 +0200 |
|---|---|---|
| committer | Marc Vertes <mvertes@free.fr> | 2023-08-29 18:22:13 +0200 |
| commit | 0f4bfe6e70263fbeb580014b62632f403b29b414 (patch) | |
| tree | de750b60a6c0027b36accf9f0596c3e651309cda /parser | |
| parent | a3ab9ef5be74cb54a87674aa48abb0c46f9c58f6 (diff) | |
gint: add an interactive REPL
Diffstat (limited to 'parser')
| -rw-r--r-- | parser/dot.go | 17 |
1 files changed, 13 insertions, 4 deletions
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 } |
