public bool EnsureReflectBindTypeLoaded(ScriptContext context, Type type) { ProxyModuleRegister proxy; if (_allProxyModuleRegisters.TryGetValue(type, out proxy)) { if (!proxy.IsLoaded()) { var typeRegister = context.CreateTypeRegister(); proxy.LoadTypes(typeRegister); typeRegister.Finish(); return(true); } } return(false); }
// this method will be marked as private in the future private void Initialize(IFileSystem fileSystem, IPathResolver resolver, IAsyncManager asyncManager, IScriptLogger logger, IO.IByteBufferAllocator byteBufferAllocator, BindAction binder) { if (fileSystem == null) { throw new NullReferenceException(nameof(fileSystem)); } asyncManager.Initialize(_mainThreadId); _isValid = true; _isRunning = true; _logger = logger; // _rwlock = new ReaderWriterLockSlim(); _rt = JSApi.JS_NewRuntime(); JSApi.JS_SetHostPromiseRejectionTracker(_rt, JSApi.PromiseRejectionTracker, IntPtr.Zero); #if UNITY_EDITOR JSApi.JS_SetInterruptHandler(_rt, _InterruptHandler, IntPtr.Zero); #else if (isWorker) { JSApi.JS_SetInterruptHandler(_rt, _InterruptHandler, IntPtr.Zero); } #endif JSApi.JS_SetRuntimeOpaque(_rt, (IntPtr)_runtimeId); JSApi.JS_SetModuleLoaderFunc(_rt, module_normalize, module_loader, IntPtr.Zero); CreateContext(); JSApi.JS_NewClass(_rt, JSApi.class_finalizer); _pathResolver = resolver; _asyncManager = asyncManager; _byteBufferAllocator = byteBufferAllocator; _autorelease = new Utils.AutoReleasePool(); _fileSystem = fileSystem; _objectCache = new ObjectCache(_logger); _timerManager = new TimerManager(_logger); _typeDB = new TypeDB(this, _mainContext); #if !JSB_UNITYLESS _typeDB.AddType(typeof(Unity.JSBehaviour), JSApi.JS_UNDEFINED); _typeDB.AddType(typeof(Unity.JSScriptableObject), JSApi.JS_UNDEFINED); #endif #if UNITY_EDITOR _typeDB.AddType(Values.FindType("QuickJS.Unity.JSEditorWindow"), JSApi.JS_UNDEFINED); _typeDB.AddType(Values.FindType("QuickJS.Unity.JSBehaviourInspector"), JSApi.JS_UNDEFINED); #endif // await Task.Run(() => runner.OnBind(this, register)); try { binder?.Invoke(this); } catch (Exception exception) { _logger?.WriteException(exception); } var register = _mainContext.CreateTypeRegister(); if (!_isWorker) { JSWorker.Bind(register); } TimerManager.Bind(register); extraBinding?.Invoke(this, register); register.Finish(); AddStaticModule("jsb", ScriptContext.Bind); // FindModuleResolver<StaticModuleResolver>().Warmup(_mainContext); _isInitialized = true; OnInitialized?.Invoke(this); }