assemble: clean up error handling, add src/dest args to main function
This commit is contained in:
parent
224415c008
commit
e7daf5e73c
43
main.go
43
main.go
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user