diff options
author | Russ Cox <rsc@golang.org> | 2009-10-14 18:10:43 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-10-14 18:10:43 -0700 |
commit | 8f49b30671161bc5425c4f2f56cee96ad11befeb (patch) | |
tree | a545d9b275fbbc2346c40d8ea51b2c741ba9faa2 /src/pkg/exp/eval/main.go | |
parent | 9615b0b1cfb8bbfc2b963b471bf9ac2afb7c8662 (diff) | |
download | golang-8f49b30671161bc5425c4f2f56cee96ad11befeb.tar.gz |
move austin/eval and austin/ogle to exp/eval and exp/ogle
R=r
OCL=35736
CL=35746
Diffstat (limited to 'src/pkg/exp/eval/main.go')
-rw-r--r-- | src/pkg/exp/eval/main.go | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/pkg/exp/eval/main.go b/src/pkg/exp/eval/main.go new file mode 100644 index 000000000..2a6d94845 --- /dev/null +++ b/src/pkg/exp/eval/main.go @@ -0,0 +1,92 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "./_obj/eval"; + "bufio"; + "flag"; + "go/parser"; + "go/scanner"; + "io"; + "os"; +) + +var filename = flag.String("f", "", "file to run"); + +func main() { + flag.Parse(); + w := eval.NewWorld(); + if *filename != "" { + data, err := io.ReadFile(*filename); + if err != nil { + println(err.String()); + os.Exit(1); + } + file, err := parser.ParseFile(*filename, data, 0); + if err != nil { + println(err.String()); + os.Exit(1); + } + code, err := w.CompileDeclList(file.Decls); + if err != nil { + if list, ok := err.(scanner.ErrorList); ok { + for _, e := range list { + println(e.String()); + } + } else { + println(err.String()); + } + os.Exit(1); + } + _, err := code.Run(); + if err != nil { + println(err.String()); + os.Exit(1); + } + code, err = w.Compile("init()"); + if code != nil { + _, err := code.Run(); + if err != nil { + println(err.String()); + os.Exit(1); + } + } + code, err = w.Compile("main()"); + if err != nil { + println(err.String()); + os.Exit(1); + } + _, err = code.Run(); + if err != nil { + println(err.String()); + os.Exit(1); + } + os.Exit(0); + } + + r := bufio.NewReader(os.Stdin); + for { + print("; "); + line, err := r.ReadString('\n'); + if err != nil { + break; + } + code, err := w.Compile(line); + if err != nil { + println(err.String()); + continue; + } + v, err := code.Run(); + if err != nil { + println(err.String()); + continue; + } + if v != nil { + println(v.String()); + } + } +} + |