()
| 25 | } |
| 26 | |
| 27 | func NewVM() (*VM, error) { |
| 28 | ovm := otto.New() |
| 29 | ovm.Interrupt = make(chan func(), 1) |
| 30 | vm := &VM{ |
| 31 | o: ovm, |
| 32 | vms: make(map[*otto.Otto]*VM), |
| 33 | vmsMu: &sync.RWMutex{}, |
| 34 | disposables: make(map[any]struct{}), |
| 35 | } |
| 36 | |
| 37 | if e := vm.init(); e != nil { |
| 38 | return nil, e |
| 39 | } |
| 40 | |
| 41 | return vm, nil |
| 42 | } |
| 43 | |
| 44 | func (v *VM) init() error { |
| 45 | initVarsForVm(v) |