private bool CheckAndCompileScript() { LoadedAsset loadedScript; lock (_assetAndCompileLock) { if (_waitingForCompilation.Count == 0) { return(false); } loadedScript = _waitingForCompilation.Dequeue(); } List <Types.ILSLListener> subListeners = new List <Types.ILSLListener>(); foreach (LoadUnloadRequest request in loadedScript.Requests) { if (request.Listener != null) { subListeners.Add(new CompilationListenerAdaptor(request.Listener)); } } //perform compilation Glue.CompilerFrontend frontend; if (subListeners.Count == 0) { frontend = new Glue.CompilerFrontend(new LogOutputListener(loadedScript.Requests), "."); } else { frontend = new Glue.CompilerFrontend(new MulticastCompilerListener(subListeners), "."); } try { _stopwatch.Start(); CompiledScript comp = frontend.Compile(loadedScript.ScriptText); _stopwatch.Stop(); if (comp != null) { comp.AssetId = loadedScript.AssetId; //save the script this.CacheCompiledScript(comp); _log.InfoFormat("[Phlox]: Compiled script {0} ({1}ms) in {2}", loadedScript.AssetId, _stopwatch.ElapsedMilliseconds, loadedScript.LocalId); foreach (LoadUnloadRequest request in loadedScript.Requests) { this.BeginScriptRun(request, comp); } _loadedScripts[comp.AssetId] = new LoadedScript { Script = comp, RefCount = loadedScript.Requests.Count }; } else { _log.ErrorFormat("[Phlox]: Compilation failed for {0} item {1} in {2}", loadedScript.AssetId, loadedScript.ItemId, loadedScript.LocalId); } return(true); } catch (Exception e) { _log.ErrorFormat("[Phlox]: Exception while compiling {0} item {1} in {2}: {3}", loadedScript.AssetId, loadedScript.ItemId, loadedScript.LocalId, e); } finally { frontend.Listener.CompilationFinished(); _stopwatch.Reset(); } return(false); }
private bool CheckAndCompileScript() { LoadedAsset loadedScript; lock (_assetAndCompileLock) { if (_waitingForCompilation.Count == 0) { return false; } loadedScript = _waitingForCompilation.Dequeue(); } List<Types.ILSLListener> subListeners = new List<Types.ILSLListener>(); foreach (LoadUnloadRequest request in loadedScript.Requests) { if (request.Listener != null) { subListeners.Add(new CompilationListenerAdaptor(request.Listener)); } } //perform compilation Glue.CompilerFrontend frontend; if (subListeners.Count == 0) { frontend = new Glue.CompilerFrontend(new LogOutputListener(loadedScript.Requests), "."); } else { frontend = new Glue.CompilerFrontend(new MulticastCompilerListener(subListeners), "."); } try { _stopwatch.Start(); CompiledScript comp = frontend.Compile(loadedScript.ScriptText); _stopwatch.Stop(); if (comp != null) { comp.AssetId = loadedScript.AssetId; //save the script this.CacheCompiledScript(comp); _log.InfoFormat("[Phlox]: Compiled script {0} ({1}ms) in {2}", loadedScript.AssetId, _stopwatch.ElapsedMilliseconds, loadedScript.LocalId); foreach (LoadUnloadRequest request in loadedScript.Requests) { this.BeginScriptRun(request, comp); } _loadedScripts[comp.AssetId] = new LoadedScript { Script = comp, RefCount = loadedScript.Requests.Count }; } else { _log.ErrorFormat("[Phlox]: Compilation failed for {0} item {1} in {2}", loadedScript.AssetId, loadedScript.ItemId, loadedScript.LocalId); } return true; } catch (Exception e) { _log.ErrorFormat("[Phlox]: Exception while compiling {0} item {1} in {2}: {3}", loadedScript.AssetId, loadedScript.ItemId, loadedScript.LocalId, e); } finally { frontend.Listener.CompilationFinished(); _stopwatch.Reset(); } return false; }