assemble: clean up error handling, add src/dest args to main function

This commit is contained in:
mappu 2023-12-11 19:32:29 +13:00
parent 224415c008
commit e7daf5e73c
2 changed files with 38 additions and 10 deletions

43
main.go
View File

@ -5,25 +5,47 @@ import (
"flag" "flag"
"fmt" "fmt"
"io" "io"
"io/ioutil"
"os" "os"
) )
// //
func main() { 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() 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 { if err != nil {
panic(err) 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) lx := NewLexer(src)
cc := NewCompiler() cc := NewCompiler()
@ -38,20 +60,23 @@ mainloop:
} }
// Real error // Real error
panic(err) return fmt.Errorf("lexer: %w", err)
} }
fmt.Printf("[line %d] %#v\n", lx.lineno, tok) fmt.Printf("[line %d] %#v\n", lx.lineno, tok)
err = cc.Compile(tok) err = cc.Compile(tok)
if err != nil { if err != nil {
panic(err) return fmt.Errorf("compile: %w", err)
} }
} }
err := cc.Finalize(dest) err := cc.Finalize(dest)
if err != nil { if err != nil {
panic(err) return fmt.Errorf("finalize: %w", err)
} }
// Success
return nil
} }

View File

@ -52,6 +52,9 @@ global _start: ;tell linker entry point
panic(err) panic(err)
} }
assemble(strings.NewReader(src), fh) // ioutil.Discard) err = assemble(strings.NewReader(src), fh) // ioutil.Discard)
if err != nil {
panic(err)
}
} }