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"
"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
}

View File

@ -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)
}
}