示例#1
0
文件: main.go 项目: rainycape/otto
func main() {
	flag.Parse()

	if !*flag_underscore {
		underscore.Disable()
	}

	err := func() error {
		src, err := readSource(flag.Arg(0))
		if err != nil {
			return err
		}

		vm := otto.New()
		_, err = vm.Run(src)
		return err
	}()
	if err != nil {
		switch err := err.(type) {
		case *otto.Error:
			fmt.Print(err.String())
		default:
			fmt.Println(err)
		}
		os.Exit(64)
	}
}
示例#2
0
func newContext(c *cache) (*Context, error) {
	vm := otto.New()
	vm.SetMode(otto.RegExpErrorOnUse)
	ctx := &Context{
		Stdout: os.Stdout,
		Stderr: os.Stderr,
		vm:     vm,
	}
	if c == nil {
		c = newCache()
	}
	ctx.cache = c
	if err := ctx.loadRuntime(); err != nil {
		return nil, err
	}
	return ctx, nil
}
示例#3
0
文件: tester.go 项目: rainycape/otto
func test(filename string) error {
	script, err := ioutil.ReadFile(filename)
	if err != nil {
		return err
	}

	if !*flag_report {
		fmt.Fprintln(os.Stdout, filename, len(script))
	}

	parse := false
	option := target[filename]

	if option != "parse" {
		vm := otto.New()
		_, err = vm.Run(string(script))
		if err != nil {
			value := err.Error()
			switch {
			case match_ReferenceError_not_defined.MatchString(value):
			case match_TypeError_undefined.MatchString(value):
			case match_lookahead.MatchString(value):
			case match_backreference.MatchString(value):
			default:
				return err
			}
			parse = true
		}
	}

	if parse {
		_, err = parser.ParseFile(nil, filename, string(script), parser.IgnoreRegExpErrors)
		if err != nil {
			return err
		}
		target[filename] = "parse"
	}

	return nil
}