From 89a3d3440109abdff7a873b07440c0d1c5e9b2c2 Mon Sep 17 00:00:00 2001 From: Himbeer Date: Thu, 5 Sep 2024 13:30:43 +0200 Subject: Fix IL generation error handling being unreliable --- cer.go | 20 ++++++-------------- generate.go | 2 +- lex.go | 1 - parse.go | 1 - 4 files changed, 7 insertions(+), 17 deletions(-) diff --git a/cer.go b/cer.go index 51d9f29..255e453 100644 --- a/cer.go +++ b/cer.go @@ -11,17 +11,10 @@ package main import ( "fmt" "os" - "sync" ) -var wg sync.WaitGroup - func main() { - wg.Add(3) - - errs := make(chan error) - - go readErrs(errs) + errs := make(chan error, 1) toks := make(chan token, 1024) go lex(os.Stdin, toks, errs) @@ -40,10 +33,9 @@ func main() { go generate(<-root, os.Stdout, errs) - wg.Wait() -} - -func readErrs(errs <-chan error) { - fmt.Fprintln(os.Stderr, <-errs) - os.Exit(1) + err := <-errs + if err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } } diff --git a/generate.go b/generate.go index f09ec42..a32040a 100644 --- a/generate.go +++ b/generate.go @@ -58,7 +58,7 @@ func (i invalidToplevel) Error() string { } func generate(root *rootExpr, w io.Writer, errs chan<- error) { - defer wg.Done() + defer close(errs) for _, toplevel := range root.toplevels { if err := generateToplevel(toplevel, w); err != nil { diff --git a/lex.go b/lex.go index 621ed01..d4a4e30 100644 --- a/lex.go +++ b/lex.go @@ -25,7 +25,6 @@ func lex(src *os.File, tokens chan<- token, errs chan<- error) { tok, err := readToken(br, &line) if err != nil { if err == io.EOF { - wg.Done() return } diff --git a/parse.go b/parse.go index 4983c65..b204468 100644 --- a/parse.go +++ b/parse.go @@ -65,7 +65,6 @@ func (t *tokens) mustMatch(kind tokenKind) error { } func parse(toks *tokens, root chan<- *rootExpr, errs chan<- error) { - defer wg.Done() root <- parseRoot(toks, errs) } -- cgit v1.2.3