Merge pull request #882 from zsfelfoldi/develop
Otto.ToValue concurrency error fixed
This commit is contained in:
commit
f819ac7158
19
jsre/jsre.go
19
jsre/jsre.go
@ -286,7 +286,7 @@ func (self *JSRE) loadScript(call otto.FunctionCall) otto.Value {
|
|||||||
// uses the "prettyPrint" JS function to format a value
|
// uses the "prettyPrint" JS function to format a value
|
||||||
func (self *JSRE) PrettyPrint(v interface{}) (val otto.Value, err error) {
|
func (self *JSRE) PrettyPrint(v interface{}) (val otto.Value, err error) {
|
||||||
var method otto.Value
|
var method otto.Value
|
||||||
v, err = self.vm.ToValue(v)
|
v, err = self.ToValue(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -297,8 +297,23 @@ func (self *JSRE) PrettyPrint(v interface{}) (val otto.Value, err error) {
|
|||||||
return method.Call(method, v)
|
return method.Call(method, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
// creates an otto value from a go type
|
// creates an otto value from a go type (serialized version)
|
||||||
|
func (self *JSRE) ToValue(v interface{}) (otto.Value, error) {
|
||||||
|
done := make(chan bool)
|
||||||
|
req := &evalReq{
|
||||||
|
fn: func(res *evalResult) {
|
||||||
|
res.result, res.err = self.vm.ToValue(v)
|
||||||
|
},
|
||||||
|
done: done,
|
||||||
|
}
|
||||||
|
self.evalQueue <- req
|
||||||
|
<-done
|
||||||
|
return req.res.result, req.res.err
|
||||||
|
}
|
||||||
|
|
||||||
|
// creates an otto value from a go type (non-serialized version)
|
||||||
func (self *JSRE) ToVal(v interface{}) otto.Value {
|
func (self *JSRE) ToVal(v interface{}) otto.Value {
|
||||||
|
|
||||||
result, err := self.vm.ToValue(v)
|
result, err := self.vm.ToValue(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Value unknown:", err)
|
fmt.Println("Value unknown:", err)
|
||||||
|
Loading…
Reference in New Issue
Block a user