~john-koepi/ubuntu/trusty/golang/default

« back to all changes in this revision

Viewing changes to src/pkg/exp/eval/main.go

  • Committer: Bazaar Package Importer
  • Author(s): Ondřej Surý
  • Date: 2011-04-20 17:36:48 UTC
  • Revision ID: james.westby@ubuntu.com-20110420173648-ifergoxyrm832trd
Tags: upstream-2011.03.07.1
Import upstream version 2011.03.07.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2009 The Go Authors.  All rights reserved.
 
2
// Use of this source code is governed by a BSD-style
 
3
// license that can be found in the LICENSE file.
 
4
 
 
5
package main
 
6
 
 
7
import (
 
8
        "bufio"
 
9
        "exp/eval"
 
10
        "flag"
 
11
        "go/parser"
 
12
        "go/scanner"
 
13
        "go/token"
 
14
        "io/ioutil"
 
15
        "os"
 
16
)
 
17
 
 
18
var fset = token.NewFileSet()
 
19
var filename = flag.String("f", "", "file to run")
 
20
 
 
21
func main() {
 
22
        flag.Parse()
 
23
        w := eval.NewWorld()
 
24
        if *filename != "" {
 
25
                data, err := ioutil.ReadFile(*filename)
 
26
                if err != nil {
 
27
                        println(err.String())
 
28
                        os.Exit(1)
 
29
                }
 
30
                file, err := parser.ParseFile(fset, *filename, data, 0)
 
31
                if err != nil {
 
32
                        println(err.String())
 
33
                        os.Exit(1)
 
34
                }
 
35
                code, err := w.CompileDeclList(fset, file.Decls)
 
36
                if err != nil {
 
37
                        if list, ok := err.(scanner.ErrorList); ok {
 
38
                                for _, e := range list {
 
39
                                        println(e.String())
 
40
                                }
 
41
                        } else {
 
42
                                println(err.String())
 
43
                        }
 
44
                        os.Exit(1)
 
45
                }
 
46
                _, err = code.Run()
 
47
                if err != nil {
 
48
                        println(err.String())
 
49
                        os.Exit(1)
 
50
                }
 
51
                code, err = w.Compile(fset, "init()")
 
52
                if code != nil {
 
53
                        _, err := code.Run()
 
54
                        if err != nil {
 
55
                                println(err.String())
 
56
                                os.Exit(1)
 
57
                        }
 
58
                }
 
59
                code, err = w.Compile(fset, "main()")
 
60
                if err != nil {
 
61
                        println(err.String())
 
62
                        os.Exit(1)
 
63
                }
 
64
                _, err = code.Run()
 
65
                if err != nil {
 
66
                        println(err.String())
 
67
                        os.Exit(1)
 
68
                }
 
69
                os.Exit(0)
 
70
        }
 
71
 
 
72
        r := bufio.NewReader(os.Stdin)
 
73
        for {
 
74
                print("; ")
 
75
                line, err := r.ReadString('\n')
 
76
                if err != nil {
 
77
                        break
 
78
                }
 
79
                code, err := w.Compile(fset, line)
 
80
                if err != nil {
 
81
                        println(err.String())
 
82
                        continue
 
83
                }
 
84
                v, err := code.Run()
 
85
                if err != nil {
 
86
                        println(err.String())
 
87
                        continue
 
88
                }
 
89
                if v != nil {
 
90
                        println(v.String())
 
91
                }
 
92
        }
 
93
}