From e7daf5e73c27a9429101270a952479a0ba3b9ef8 Mon Sep 17 00:00:00 2001 From: mappu Date: Mon, 11 Dec 2023 19:32:29 +1300 Subject: [PATCH] assemble: clean up error handling, add src/dest args to main function --- main.go | 43 ++++++++++++++++++++++++++++++++++--------- main_test.go | 5 ++++- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/main.go b/main.go index efb895c..1c9b248 100644 --- a/main.go +++ b/main.go @@ -5,25 +5,47 @@ import ( "flag" "fmt" "io" - "io/ioutil" "os" ) // func main() { - src := flag.String("Src", "", "Input file") + srcName := flag.String("Src", "-", "Input file (default: stdin)") + destName := flag.String("Dest", "-", "Output file (default: stdout)") flag.Parse() - fh, err := os.OpenFile(*src, os.O_RDONLY, 0644) + var ( + err error + srch io.Reader + desth io.Writer + ) + + if *srcName == "-" { + srch = os.Stdin + } else { + srch, err = os.OpenFile(*srcName, os.O_RDONLY, 0644) + if err != nil { + panic(err) + } + } + + if *destName == "-" { + desth = os.Stdout + } else { + desth, err = os.OpenFile(*destName, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) + if err != nil { + panic(err) + } + } + + err = assemble(srch, desth) if err != nil { panic(err) } - - assemble(fh, ioutil.Discard) } -func assemble(src io.Reader, dest io.Writer) { +func assemble(src io.Reader, dest io.Writer) error { lx := NewLexer(src) cc := NewCompiler() @@ -38,20 +60,23 @@ mainloop: } // Real error - panic(err) + return fmt.Errorf("lexer: %w", err) } fmt.Printf("[line %d] %#v\n", lx.lineno, tok) err = cc.Compile(tok) if err != nil { - panic(err) + return fmt.Errorf("compile: %w", err) } } err := cc.Finalize(dest) if err != nil { - panic(err) + return fmt.Errorf("finalize: %w", err) } + + // Success + return nil } diff --git a/main_test.go b/main_test.go index 022a7d0..e812999 100644 --- a/main_test.go +++ b/main_test.go @@ -52,6 +52,9 @@ global _start: ;tell linker entry point panic(err) } - assemble(strings.NewReader(src), fh) // ioutil.Discard) + err = assemble(strings.NewReader(src), fh) // ioutil.Discard) + if err != nil { + panic(err) + } }