diff options
author | Himbeer <himbeer@disroot.org> | 2024-09-05 13:30:43 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-09-05 13:35:45 +0200 |
commit | 89a3d3440109abdff7a873b07440c0d1c5e9b2c2 (patch) | |
tree | 7ee170177c66c70f22b2e33163f43a88a37d7468 | |
parent | fdfcd6d8d0fe79138a2e5bf66ae7c476c8db9c75 (diff) |
Fix IL generation error handling being unreliable
-rw-r--r-- | cer.go | 20 | ||||
-rw-r--r-- | generate.go | 2 | ||||
-rw-r--r-- | lex.go | 1 | ||||
-rw-r--r-- | parse.go | 1 |
4 files changed, 7 insertions, 17 deletions
@@ -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 { @@ -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 } @@ -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) } |