diff options
author | Josh Bleecher Snyder <josharian@gmail.com> | 2018-12-07 14:21:37 -0800 |
---|---|---|
committer | alandonovan <adonovan@google.com> | 2018-12-07 17:21:37 -0500 |
commit | d1cdecf78e879f31cc80cd5931df18af04cff9d8 (patch) | |
tree | 62425eb45306c673f2063f2d0e6159f95b1dc365 /cmd | |
parent | 2f5aafdcfb56c1605470af9ca9dfaa59d76bba02 (diff) | |
download | starlark-go-d1cdecf78e879f31cc80cd5931df18af04cff9d8.tar.gz |
cmd/starlark: add -c flag to execute cmdline program (#47)
-c was chosen to match Python. Sample:
$ starlark -c "print(max(range(10)))"
9
$ starlark -c "a = 'hi'" -showenv
a = "hi"
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/starlark/starlark.go | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/cmd/starlark/starlark.go b/cmd/starlark/starlark.go index d9dbd02..46dc598 100644 --- a/cmd/starlark/starlark.go +++ b/cmd/starlark/starlark.go @@ -24,6 +24,7 @@ import ( var ( cpuprofile = flag.String("cpuprofile", "", "gather CPU profile in this file") showenv = flag.Bool("showenv", false, "on success, print final global environment") + execprog = flag.String("c", "", "execute program `prog`") ) // non-standard dialect flags @@ -55,19 +56,29 @@ func main() { thread := &starlark.Thread{Load: repl.MakeLoad()} globals := make(starlark.StringDict) - switch len(flag.Args()) { - case 0: - fmt.Println("Welcome to Starlark (go.starlark.net)") - repl.REPL(thread, globals) - case 1: - // Execute specified file. - filename := flag.Args()[0] - var err error - globals, err = starlark.ExecFile(thread, filename, nil, nil) + switch { + case flag.NArg() == 1 || *execprog != "": + var ( + filename string + src interface{} + err error + ) + if *execprog != "" { + // Execute provided program. + filename = "cmdline" + src = *execprog + } else { + // Execute specified file. + filename = flag.Arg(0) + } + globals, err = starlark.ExecFile(thread, filename, src, nil) if err != nil { repl.PrintError(err) os.Exit(1) } + case flag.NArg() == 0: + fmt.Println("Welcome to Starlark (go.starlark.net)") + repl.REPL(thread, globals) default: log.Fatal("want at most one Starlark file name") } |