jsre: expose Do

This commit is contained in:
Felix Lange 2016-02-20 14:28:34 +01:00
parent b34b130fb5
commit 5542b51b50
2 changed files with 11 additions and 9 deletions

View File

@ -27,7 +27,9 @@ import (
// evaluated, callers need to make sure that evaluating line does not have side effects. // evaluated, callers need to make sure that evaluating line does not have side effects.
func (jsre *JSRE) CompleteKeywords(line string) []string { func (jsre *JSRE) CompleteKeywords(line string) []string {
var results []string var results []string
jsre.do(func(vm *otto.Otto) { results = getCompletions(vm, line) }) jsre.Do(func(vm *otto.Otto) {
results = getCompletions(vm, line)
})
return results return results
} }

View File

@ -214,8 +214,8 @@ loop:
self.loopWg.Done() self.loopWg.Done()
} }
// do schedules the given function on the event loop. // Do executes the given function on the JS event loop.
func (self *JSRE) do(fn func(*otto.Otto)) { func (self *JSRE) Do(fn func(*otto.Otto)) {
done := make(chan bool) done := make(chan bool)
req := &evalReq{fn, done} req := &evalReq{fn, done}
self.evalQueue <- req self.evalQueue <- req
@ -235,7 +235,7 @@ func (self *JSRE) Exec(file string) error {
if err != nil { if err != nil {
return err return err
} }
self.do(func(vm *otto.Otto) { _, err = vm.Run(code) }) self.Do(func(vm *otto.Otto) { _, err = vm.Run(code) })
return err return err
} }
@ -247,19 +247,19 @@ func (self *JSRE) Bind(name string, v interface{}) error {
// Run runs a piece of JS code. // Run runs a piece of JS code.
func (self *JSRE) Run(code string) (v otto.Value, err error) { func (self *JSRE) Run(code string) (v otto.Value, err error) {
self.do(func(vm *otto.Otto) { v, err = vm.Run(code) }) self.Do(func(vm *otto.Otto) { v, err = vm.Run(code) })
return v, err return v, err
} }
// Get returns the value of a variable in the JS environment. // Get returns the value of a variable in the JS environment.
func (self *JSRE) Get(ns string) (v otto.Value, err error) { func (self *JSRE) Get(ns string) (v otto.Value, err error) {
self.do(func(vm *otto.Otto) { v, err = vm.Get(ns) }) self.Do(func(vm *otto.Otto) { v, err = vm.Get(ns) })
return v, err return v, err
} }
// Set assigns value v to a variable in the JS environment. // Set assigns value v to a variable in the JS environment.
func (self *JSRE) Set(ns string, v interface{}) (err error) { func (self *JSRE) Set(ns string, v interface{}) (err error) {
self.do(func(vm *otto.Otto) { err = vm.Set(ns, v) }) self.Do(func(vm *otto.Otto) { err = vm.Set(ns, v) })
return err return err
} }
@ -288,7 +288,7 @@ func (self *JSRE) loadScript(call otto.FunctionCall) otto.Value {
// EvalAndPrettyPrint evaluates code and pretty prints the result to // EvalAndPrettyPrint evaluates code and pretty prints the result to
// standard output. // standard output.
func (self *JSRE) EvalAndPrettyPrint(code string) (err error) { func (self *JSRE) EvalAndPrettyPrint(code string) (err error) {
self.do(func(vm *otto.Otto) { self.Do(func(vm *otto.Otto) {
var val otto.Value var val otto.Value
val, err = vm.Run(code) val, err = vm.Run(code)
if err != nil { if err != nil {
@ -302,7 +302,7 @@ func (self *JSRE) EvalAndPrettyPrint(code string) (err error) {
// Compile compiles and then runs a piece of JS code. // Compile compiles and then runs a piece of JS code.
func (self *JSRE) Compile(filename string, src interface{}) (err error) { func (self *JSRE) Compile(filename string, src interface{}) (err error) {
self.do(func(vm *otto.Otto) { _, err = compileAndRun(vm, filename, src) }) self.Do(func(vm *otto.Otto) { _, err = compileAndRun(vm, filename, src) })
return err return err
} }