| 27 | } |
| 28 | |
| 29 | func (vmw *VMWrapper) GetFunction(name string) (goja.Callable, bool) { |
| 30 | |
| 31 | fn, ok := vmw.callableCache[name] |
| 32 | |
| 33 | if ok { |
| 34 | return fn, fn != nil |
| 35 | } |
| 36 | |
| 37 | fn, ok = goja.AssertFunction(vmw.VM.Get(name)) |
| 38 | |
| 39 | if vmw.maxCacheSize == 0 || vmw.cacheSize < vmw.maxCacheSize { |
| 40 | vmw.cacheSize++ |
| 41 | vmw.callableCache[name] = fn |
| 42 | } |
| 43 | |
| 44 | return fn, ok |
| 45 | } |
| 46 | |
| 47 | // loadVM compiles and runs script source in a new Goja VM, returning a ready |
| 48 | // VMWrapper. scriptLabel is used in compile error messages (e.g. "room-42"). |