Esempio n. 1
0
        public static ScriptRuntime CreateRuntime(bool isEditorRuntime)
        {
            if (!JSApi.IsValid())
            {
                throw new InvalidOperationException("quickjs library is not matched, you need to rebuild it for current platform");
            }

            _rwlock.EnterWriteLock();
            ScriptRuntimeRef freeEntry;
            int slotIndex;

            if (_freeSlot < 0)
            {
                freeEntry = new ScriptRuntimeRef();
                slotIndex = _runtimeRefs.Count;
                _runtimeRefs.Add(freeEntry);
                freeEntry.next = -1;
            }
            else
            {
                slotIndex      = _freeSlot;
                freeEntry      = _runtimeRefs[slotIndex];
                _freeSlot      = freeEntry.next;
                freeEntry.next = -1;
            }

            var runtime = new ScriptRuntime(slotIndex + 1);

            freeEntry.target          = runtime;
            freeEntry.isEditorRuntime = isEditorRuntime;
            runtime.OnAfterDestroy   += OnRuntimeAfterDestroy;
            _rwlock.ExitWriteLock();

            return(runtime);
        }
Esempio n. 2
0
        public static ScriptRuntime CreateRuntime(bool isEditorRuntime)
        {
            _rwlock.EnterWriteLock();
            ScriptRuntimeRef freeEntry;
            int slotIndex;

            if (_freeSlot < 0)
            {
                freeEntry = new ScriptRuntimeRef();
                slotIndex = _runtimeRefs.Count;
                _runtimeRefs.Add(freeEntry);
                freeEntry.next = -1;
            }
            else
            {
                slotIndex      = _freeSlot;
                freeEntry      = _runtimeRefs[slotIndex];
                _freeSlot      = freeEntry.next;
                freeEntry.next = -1;
            }

            var runtime = new ScriptRuntime(slotIndex + 1);

            freeEntry.target          = runtime;
            freeEntry.isEditorRuntime = isEditorRuntime;
            runtime.OnAfterDestroy   += OnRuntimeAfterDestroy;
            _rwlock.ExitWriteLock();

            return(runtime);
        }