Ejemplo n.º 1
0
        void InitializeExecutionEngine(bool loadConfig, bool showHelp)
        {
            Debug.Assert(execState == null);
            if (execState != null)
            {
                throw new InvalidOperationException();
            }

            execState = new ExecState(this, new CancellationTokenSource());
            var execStateCache = execState;

            Task.Run(() => {
                AppCulture.InitializeCulture();
                execStateCache.CancellationTokenSource.Token.ThrowIfCancellationRequested();

                var userOpts = new UserScriptOptions();
                if (loadConfig)
                {
                    userOpts.LibPaths.AddRange(GetDefaultLibPaths());
                    userOpts.LoadPaths.AddRange(GetDefaultLoadPaths());
                    InitializeUserScriptOptions(userOpts);
                }
                var opts = ScriptOptions.Default;
                opts     = opts.WithMetadataResolver(ScriptMetadataResolver.Default
                                                     .WithBaseDirectory(AppDirectories.BinDirectory)
                                                     .WithSearchPaths(userOpts.LibPaths.Distinct(StringComparer.OrdinalIgnoreCase)));
                opts = opts.WithSourceResolver(ScriptSourceResolver.Default
                                               .WithBaseDirectory(AppDirectories.BinDirectory)
                                               .WithSearchPaths(userOpts.LoadPaths.Distinct(StringComparer.OrdinalIgnoreCase)));
                opts = opts.WithImports(userOpts.Imports);
                opts = opts.WithReferences(userOpts.References);
                execStateCache.ScriptOptions = opts;

                var script = Create <object>(string.Empty, execStateCache.ScriptOptions, typeof(IScriptGlobals), null);
                execStateCache.CancellationTokenSource.Token.ThrowIfCancellationRequested();
                execStateCache.ScriptState = script.RunAsync(execStateCache.Globals, execStateCache.CancellationTokenSource.Token).Result;
                if (showHelp)
                {
                    this.replEditor.OutputPrintLine(Help);
                }
            }, execStateCache.CancellationTokenSource.Token)
            .ContinueWith(t => {
                execStateCache.IsInitializing = false;
                var ex = t.Exception;
                if (!t.IsCanceled && !t.IsFaulted)
                {
                    CommandExecuted();
                }
                else
                {
                    replEditor.OutputPrintLine(string.Format("Could not create the script:\n\n{0}", ex));
                }
            }, CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
        }
Ejemplo n.º 2
0
 protected abstract void InitializeUserScriptOptions(UserScriptOptions options);