aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeer <himbeer@disroot.org>2024-09-05 13:30:43 +0200
committerHimbeer <himbeer@disroot.org>2024-09-05 13:35:45 +0200
commit89a3d3440109abdff7a873b07440c0d1c5e9b2c2 (patch)
tree7ee170177c66c70f22b2e33163f43a88a37d7468
parentfdfcd6d8d0fe79138a2e5bf66ae7c476c8db9c75 (diff)
Fix IL generation error handling being unreliable
-rw-r--r--cer.go20
-rw-r--r--generate.go2
-rw-r--r--lex.go1
-rw-r--r--parse.go1
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)
}