summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorMarc Vertes <mvertes@free.fr>2025-11-26 15:42:21 +0100
committerMarc Vertes <mvertes@free.fr>2025-11-26 15:42:21 +0100
commitaed20c1c453e50f716c454c0bd7e4995a0f5d898 (patch)
tree91af798989300451113e5b865a20fb2eae777938 /main.go
parent31054164870b413db797572b8e3d5a00c41d328e (diff)
Chore: improve tracing of code emits
Diffstat (limited to 'main.go')
-rw-r--r--main.go18
1 files changed, 14 insertions, 4 deletions
diff --git a/main.go b/main.go
index 232e122..1293bd6 100644
--- a/main.go
+++ b/main.go
@@ -9,6 +9,7 @@ import (
"log"
"os"
"reflect"
+ "strings"
"github.com/mvertes/parscan/lang/golang"
"github.com/mvertes/parscan/parser"
@@ -62,12 +63,14 @@ func repl(interp Interpreter, in io.Reader) (err error) {
}
func run(arg []string) (err error) {
+ var str string
rflag := flag.NewFlagSet("run", flag.ContinueOnError)
rflag.Usage = func() {
fmt.Println("Usage: parscan run [options] [path] [args]")
- // fmt.Println("Options:")
- // rflag.PrintDefaults()
+ fmt.Println("Options:")
+ rflag.PrintDefaults()
}
+ rflag.StringVar(&str, "e", "", "string to eval")
if err = rflag.Parse(arg); err != nil {
return err
}
@@ -75,12 +78,19 @@ func run(arg []string) (err error) {
interp := parser.NewInterpreter(scanner.NewScanner(golang.GoSpec))
- in := os.Stdin
+ var in io.Reader
+ if str != "" {
+ in = strings.NewReader(str)
+ } else {
+ in = os.Stdin
+ }
if len(args) > 0 {
if in, err = os.Open(arg[0]); err != nil {
return err
}
- defer in.Close()
+ if i2, ok := in.(io.ReadCloser); ok {
+ defer i2.Close()
+ }
}
if isatty(in) {