Example #1
0
        /// <summary>Registers a script block on a page.</summary>
        /// <param name="page">The page onto which to added the script.</param>
        /// <param name="script">The script to add.</param>
        /// <param name="position">Where to add the script.</param>
        /// <param name="options">Script registration options.</param>
        public static void JavaScript(this Page page, string script, ScriptPosition position, ScriptOptions options)
        {
            if (page == null) throw new ArgumentNullException("page");

            if (position == ScriptPosition.Header)
            {
                JavaScript(page, script, options);
            }
            else if (position == ScriptPosition.Bottom)
            {
                string key = script.GetHashCode().ToString();
                if (options.Is(ScriptOptions.None))
                    page.ClientScript.RegisterStartupScript(typeof(Register), key, script);
                else if (options.Is(ScriptOptions.ScriptTags))
                    page.ClientScript.RegisterStartupScript(typeof(Register), key, script, true);
                else if (options.Is(ScriptOptions.DocumentReady))
                {
                    page.JQuery();
                    page.ClientScript.RegisterStartupScript(typeof(Register), key, EmbedDocumentReady(script), true);
                }
                else if (options.Is(ScriptOptions.Include))
                    page.ClientScript.RegisterClientScriptInclude(key, Url.ResolveTokens(script));
                else
                    throw new ArgumentException("options");
            }
            else
                throw new ArgumentException("position");
        }
Example #2
0
        /// <summary>Registers a script block on a page.</summary>
        /// <param name="page">The page onto which to added the script.</param>
        /// <param name="script">The script to add.</param>
        /// <param name="position">Where to add the script.</param>
        /// <param name="options">Script registration options.</param>
        public static void JavaScript(Page page, string script, ScriptPosition position, ScriptOptions options)
        {
            if (page == null) throw new ArgumentNullException("page");

            if (position == ScriptPosition.Header)
            {
                JavaScript(page, script, options);
            }
            else if (position == ScriptPosition.Bottom)
            {
                string key = script.GetHashCode().ToString();
                if (Is(options, ScriptOptions.None))
                    page.ClientScript.RegisterClientScriptBlock(typeof (Register), key, script);
                else if (Is(options, ScriptOptions.ScriptTags))
                    page.ClientScript.RegisterClientScriptBlock(typeof (Register), key, script, true);
                else if (Is(options, ScriptOptions.DocumentReady))
                {
                    JQuery(page);
                    page.ClientScript.RegisterClientScriptBlock(typeof (Register), key, EmbedDocumentReady(script), true);
                }
                else if (Is(options, ScriptOptions.Include))
                    page.ClientScript.RegisterClientScriptInclude(key, page.Engine().ManagementPaths.ResolveResourceUrl(script));
                else
                    throw new ArgumentException("options");
            }
            else
                throw new ArgumentException("position");
        }
Example #3
0
        public static void JavaScript(Page page, string script, ScriptOptions options)
        {
            if (page == null) throw new ArgumentNullException("page");

            if (page.Items[script] == null)
            {
                PlaceHolder holder = GetPlaceHolder(page);

                if (Is(options, ScriptOptions.Include))
                {
                    AddScriptInclude(page, script, holder, Is(options, ScriptOptions.Prioritize));
                }
                else if (Is(options, ScriptOptions.None))
                {
                    holder.Page.Items[script] = AddString(script, holder, Is(options, ScriptOptions.Prioritize));
                }
                else
                {
                    Script scriptHolder = GetScriptHolder(page);
                    if (Is(options, ScriptOptions.ScriptTags))
                    {
                        holder.Page.Items[script] = AddString(script + Environment.NewLine, scriptHolder, Is(options, ScriptOptions.Prioritize));
                    }
                    else if (Is(options, ScriptOptions.DocumentReady))
                    {
                        JQuery(page);
                        holder.Page.Items[script] = AddString(EmbedDocumentReady(script) + Environment.NewLine, scriptHolder, Is(options, ScriptOptions.Prioritize));
                    }
                }
            }
        }
        public void GenerateJavaScriptOptionsDoesAlwaysQuotingObjecLiteralKeys()
        {
            var literal = JS.Object(new {name = "Dave", function = "Developer"});

            var without = new ScriptOptions {AlwaysQuoteObjectLiteralKeys = false, PreferredQuoteChar = '"'};
            var with = new ScriptOptions {AlwaysQuoteObjectLiteralKeys = true, PreferredQuoteChar = '"'};

            Assert.AreEqual("{name:\"Dave\",function:\"Developer\"};", literal.ToString(true, without, false));
            Assert.AreEqual("{\"name\":\"Dave\",\"function\":\"Developer\"};", literal.ToString(true, with, false));
        }
        public void GenerateJavaScriptOptionsCanBeSet()
        {
            ScriptOptions options = new ScriptOptions();

            options.PreferredQuoteChar = '\'';

            Assert.AreEqual('\'', options.PreferredQuoteChar);

            Expect.Throw<ArgumentException>(
                "The preferred quote char can only be one of the allowed quote chars.\r\nParameter name: value",
                () => options.PreferredQuoteChar = '@');
        }
Example #6
0
 internal override Script Make(string code, string path, ScriptOptions options, Type globalsType, Type returnType, ScriptBuilder builder, Script previous)
 {
     return(new CSharpScript(code, path, options, globalsType, returnType, builder, previous));
 }
 public override Script <T> CreateScript <T>(string code, ScriptOptions options, Type globalsTypeOpt, InteractiveAssemblyLoader assemblyLoader)
 {
     return(CSharpScript.Create <T>(code, options, globalsTypeOpt, assemblyLoader));
 }
Example #8
0
 private static bool Is(this ScriptOptions options, ScriptOptions expectedOption)
 {
     return (options & expectedOption) == expectedOption;
 }
Example #9
0
        private bool TryBuildAndRun(Script<object> newScript, InteractiveScriptGlobals globals, ref ScriptState<object> state, ref ScriptOptions options, CancellationToken cancellationToken)
        {
            var diagnostics = newScript.Compile(cancellationToken);
            DisplayDiagnostics(diagnostics);
            if (diagnostics.HasAnyErrors())
            {
                return false;
            }

            try
            {
                var task = (state == null) ?
                    newScript.RunAsync(globals, cancellationToken) :
                    newScript.ContinueAsync(state, cancellationToken);

                state = task.GetAwaiter().GetResult();
            }
            catch (FileLoadException e) when (e.InnerException is InteractiveAssemblyLoaderException)
            {
                var oldColor = _console.ForegroundColor;
                try
                {
                    _console.ForegroundColor = ConsoleColor.Red;
                    _console.Out.WriteLine(e.InnerException.Message);
                }
                finally
                {
                    _console.ForegroundColor = oldColor;
                }

                return false;
            }
            catch (Exception e)
            {
                DisplayException(e);
                return false;
            }

            options = UpdateOptions(options, globals);

            return true;
        }
Example #10
0
        public ScriptResult Execute(string code, string[] scriptArgs, AssemblyReferences references, IEnumerable <string> namespaces, ScriptPackSession scriptPackSession)
        {
            if (scriptPackSession == null)
            {
                throw new ArgumentNullException("scriptPackSession");
            }

            if (references == null)
            {
                throw new ArgumentNullException("references");
            }

            _log.Debug("Starting to create execution components");
            _log.Debug("Creating script host");

            var executionReferences = new AssemblyReferences(references.Assemblies, references.Paths);

            executionReferences.Union(scriptPackSession.References);

            ScriptResult scriptResult;
            SessionState <ScriptState> sessionState;

            var isFirstExecution = !scriptPackSession.State.ContainsKey(SessionKey);

            if (isFirstExecution)
            {
                var host = _scriptHostFactory.CreateScriptHost(
                    new ScriptPackManager(scriptPackSession.Contexts), scriptArgs);

                ScriptLibraryWrapper.SetHost(host);
                _log.Debug("Creating session");

                var hostType = host.GetType();

                ScriptOptions = ScriptOptions.AddReferences(hostType.Assembly);

                var allNamespaces = namespaces.Union(scriptPackSession.Namespaces).Distinct();

                foreach (var reference in executionReferences.Paths)
                {
                    _log.DebugFormat("Adding reference to {0}", reference);
                    ScriptOptions = ScriptOptions.AddReferences(reference);
                }

                foreach (var assembly in executionReferences.Assemblies)
                {
                    _log.DebugFormat("Adding reference to {0}", assembly.FullName);
                    ScriptOptions = ScriptOptions.AddReferences(assembly);
                }

                foreach (var @namespace in allNamespaces)
                {
                    _log.DebugFormat("Importing namespace {0}", @namespace);
                    ScriptOptions = ScriptOptions.AddNamespaces(@namespace);
                }

                sessionState = new SessionState <ScriptState> {
                    References = executionReferences, Namespaces = new HashSet <string>(allNamespaces)
                };
                scriptPackSession.State[SessionKey] = sessionState;

                scriptResult = Execute(code, host, sessionState);
            }
            else
            {
                _log.Debug("Reusing existing session");
                sessionState = (SessionState <ScriptState>)scriptPackSession.State[SessionKey];

                if (sessionState.References == null)
                {
                    sessionState.References = new AssemblyReferences();
                }

                if (sessionState.Namespaces == null)
                {
                    sessionState.Namespaces = new HashSet <string>();
                }

                var newReferences = executionReferences.Except(sessionState.References);

                foreach (var reference in newReferences.Paths)
                {
                    _log.DebugFormat("Adding reference to {0}", reference);
                    ScriptOptions           = ScriptOptions.AddReferences(reference);
                    sessionState.References = sessionState.References.Union(new[] { reference });
                }

                foreach (var assembly in newReferences.Assemblies)
                {
                    _log.DebugFormat("Adding reference to {0}", assembly.FullName);
                    ScriptOptions           = ScriptOptions.AddReferences(assembly);
                    sessionState.References = sessionState.References.Union(new[] { assembly });
                }

                var newNamespaces = namespaces.Except(sessionState.Namespaces);

                foreach (var @namespace in newNamespaces)
                {
                    _log.DebugFormat("Importing namespace {0}", @namespace);
                    ScriptOptions = ScriptOptions.AddNamespaces(@namespace);
                    sessionState.Namespaces.Add(@namespace);
                }

                if (string.IsNullOrWhiteSpace(code))
                {
                    return(ScriptResult.Empty);
                }

                scriptResult = Execute(code, sessionState.Session, sessionState);
            }

            return(scriptResult);

            //todo handle namespace failures
            //https://github.com/dotnet/roslyn/issues/1012
        }
Example #11
0
 private Func <IQueuedTaskToken, long> CompileCalculateDelayTicksTaskAfterFailureFnFromConfig(StakhanoviseSetupDefaultsConfig defaultsConfig,
                                                                                              ScriptOptions parseOptions)
 {
     if (!string.IsNullOrEmpty(defaultsConfig.CalculateDelayTicksTaskAfterFailure))
     {
         return(CSharpScript.EvaluateAsync <Func <IQueuedTaskToken, long> >(defaultsConfig.CalculateDelayTicksTaskAfterFailure,
                                                                            options: parseOptions)
                .Result);
     }
     else
     {
         return(null);
     }
 }
Example #12
0
        /// <summary>
        /// Parses the given source code by using the supplied type name
        /// (otherwise it is text/css) and returns the created stylesheet.
        /// </summary>
        /// <param name="configuration">The configuration to use.</param>
        /// <param name="response">
        /// The response with the stream representing the source of the script.
        /// </param>
        /// <param name="options">
        /// The options for running the script.
        /// </param>
        /// <param name="type">
        /// The optional mime-type of the source code.
        /// </param>
        public static void RunScript(this IConfiguration configuration, IResponse response, ScriptOptions options, String type = null)
        {
            if (configuration.IsScripting)
            {
                var engine = configuration.GetScriptEngine(type ?? MimeTypes.DefaultJavaScript);

                if (engine != null)
                {
                    engine.Evaluate(response, options);
                }
            }
        }
Example #13
0
 /// <summary>
 /// Run a C# script.
 /// </summary>
 /// <param name="code">The source code of the script.</param>
 /// <param name="options">The script options.</param>
 /// <param name="globals">An object instance whose members can be accessed by the script as global variables,
 /// or a <see cref="ScriptState"/> instance that was the output from a previously run script.</param>
 public static ScriptState Run(string code, ScriptOptions options, object globals)
 {
     return(Create(code, options).Run(globals));
 }
Example #14
0
        private void BuildAndRun(Script<object> newScript, InteractiveScriptGlobals globals, ref ScriptState<object> state, ref ScriptOptions options, bool displayResult, CancellationToken cancellationToken)
        {
            var diagnostics = newScript.Compile(cancellationToken);
            DisplayDiagnostics(diagnostics);
            if (diagnostics.HasAnyErrors())
            {
                return;
            }

            var task = (state == null) ?
                newScript.RunAsync(globals, catchException: e => true, cancellationToken: cancellationToken) :
                newScript.RunFromAsync(state, catchException: e => true, cancellationToken: cancellationToken);

            state = task.GetAwaiter().GetResult();
            if (state.Exception != null)
            {
                DisplayException(state.Exception);
            }
            else if (displayResult && newScript.HasReturnValue())
            {
                globals.Print(state.ReturnValue);
            }

            options = UpdateOptions(options, globals);
        }
Example #15
0
 private void AddScripts(IEnumerable<string> names, ScriptOptions options)
 {
     if (null != names)
     {
         foreach (var script in names)
         {
             Converter.AddScript(script, options);
         }
     }
 }
Example #16
0
        private void RunInteractiveLoop(ScriptOptions options, CancellationToken cancellationToken)
        {
            var globals = new InteractiveScriptGlobals(_console.Out, _objectFormatter);
            globals.Args.AddRange(_compiler.Arguments.ScriptArguments);

            ScriptState <object> state = null;

            while (true)
            {
                _console.Out.Write("> ");
                var input = new StringBuilder();
                string line;
                bool cancelSubmission = false;

                while (true)
                {
                    line = _console.In.ReadLine();
                    if (line == null)
                    {
                        if (input.Length == 0)
                        {
                            return;
                        }

                        cancelSubmission = true;
                        break;
                    }

                    input.AppendLine(line);

                    var tree = _scriptCompiler.ParseSubmission(SourceText.From(input.ToString()), cancellationToken);
                    if (_scriptCompiler.IsCompleteSubmission(tree))
                    {
                        break;
                    }

                    _console.Out.Write(". ");
                }

                if (cancelSubmission)
                {
                    continue;
                }

                string code = input.ToString();

                Script<object> newScript;
                if (state == null)
                {
                    newScript = Script.CreateInitialScript<object>(_scriptCompiler, code, options, globals.GetType(), assemblyLoaderOpt: null);
                }
                else
                {
                    newScript = state.Script.ContinueWith(code, options);
                }

                var newCompilation = newScript.GetCompilation();

                try
                {
                    newScript.Build(cancellationToken);

                    // display warnings:
                    DisplayDiagnostics(newCompilation.GetDiagnostics(cancellationToken).Where(d => d.Severity == DiagnosticSeverity.Warning));
                }
                catch (CompilationErrorException e)
                {
                    DisplayDiagnostics(e.Diagnostics.Where(d => d.Severity == DiagnosticSeverity.Error || d.Severity == DiagnosticSeverity.Warning));
                    continue;
                }

                try
                {
                    var task = (state == null) ?
                        newScript.RunAsync(globals, cancellationToken) :
                        newScript.ContinueAsync(state, cancellationToken);

                    state = task.GetAwaiter().GetResult();
                }
                catch (Exception e)
                {
                    DisplayException(e);
                    continue;
                }

                bool hasValue;
                ITypeSymbol resultType = newCompilation.GetSubmissionResultType(out hasValue);
                if (hasValue)
                {
                    if (resultType != null && resultType.SpecialType == SpecialType.System_Void)
                    {
                        _console.Out.WriteLine(_objectFormatter.VoidDisplayString);
                    }
                    else
                    {
                        globals.Print(state.ReturnValue);
                    }
                }
            }
        }
        public void AddScript(string filename, ScriptOptions options)
        {
            switch(options)
            {
                case ScriptOptions.Framework:
                    _frameworkscripts.Add(filename);
                    break;

                case ScriptOptions.Before:
                    _scriptsbefore.Add(filename);
                    break;

                case ScriptOptions.After:
                    _scriptsafter.Add(filename);
                    break;

                default:
                    throw new ArgumentException("invalid script option specified.");
            }
        }
Example #18
0
 /// <summary>
 /// Run a C# script and return its resulting value.
 /// </summary>
 /// <param name="code">The source code of the script.</param>
 /// <param name="options">The script options.</param>
 /// <param name="globals">An object instance whose members can be accessed by the script as global variables,
 /// or a <see cref="ScriptState"/> instance that was the output from a previously run script.</param>
 /// <return>Returns the value returned by running the script.</return>
 public static object Eval(string code, ScriptOptions options, object globals)
 {
     return(Run(code, options, globals).ReturnValue);
 }
Example #19
0
 private CSharpScript(string code, string path, ScriptOptions options, Type globalsType, Type returnType, ScriptBuilder builder, Script previous)
     : base(code, path, options, globalsType, returnType, builder, previous)
 {
 }
Example #20
0
		public static void JavaScript(this Page page, string script, ScriptOptions options)
		{
			if (page == null) return;

			if (page.Items[script] == null)
			{
				PlaceHolder holder = GetPlaceHolder(page);

				if (options.Is(ScriptOptions.Include))
				{
					AddScriptInclude(page, script, holder, options.Is(ScriptOptions.Prioritize));
				}
				else if (options.Is(ScriptOptions.None))
				{
					holder.Page.Items[script] = AddString(holder, script, options.Is(ScriptOptions.Prioritize));
				}
				else
				{
					Script scriptHolder = GetScriptHolder(page);
					if (options.Is(ScriptOptions.ScriptTags))
					{
						holder.Page.Items[script] = AddString(scriptHolder, script + Environment.NewLine, Is(options, ScriptOptions.Prioritize));
					}
					else if (options.Is(ScriptOptions.DocumentReady))
					{
						JQuery(page);
						holder.Page.Items[script] = AddString(scriptHolder, EmbedDocumentReady(script) + Environment.NewLine, options.Is(ScriptOptions.Prioritize));
					}
				}
			}
		}
Example #21
0
 internal override Script Make(string code, string path, ScriptOptions options, Type globalsType, Type returnType, ScriptBuilder builder, Script previous)
 {
     return new CSharpScript(code, path, options, globalsType, returnType, builder, previous);
 }
Example #22
0
        private void RunInteractiveLoop(
            ScriptOptions options,
            string initialScriptCodeOpt,
            CancellationToken cancellationToken
            )
        {
            var globals = new InteractiveScriptGlobals(_console.Out, _objectFormatter);

            globals.Args.AddRange(_compiler.Arguments.ScriptArguments);

            ScriptState <object> state = null;

            if (initialScriptCodeOpt != null)
            {
                var script = Script.CreateInitialScript <object>(
                    _scriptCompiler,
                    SourceText.From(initialScriptCodeOpt),
                    options,
                    globals.GetType(),
                    assemblyLoaderOpt: null
                    );
                BuildAndRun(
                    script,
                    globals,
                    ref state,
                    ref options,
                    displayResult: false,
                    cancellationToken: cancellationToken
                    );
            }

            while (true)
            {
                _console.Out.Write("> ");
                var    input = new StringBuilder();
                string line;
                bool   cancelSubmission = false;

                while (true)
                {
                    line = _console.In.ReadLine();
                    if (line == null)
                    {
                        if (input.Length == 0)
                        {
                            return;
                        }

                        cancelSubmission = true;
                        break;
                    }

                    input.AppendLine(line);

                    var tree = _scriptCompiler.ParseSubmission(
                        SourceText.From(input.ToString()),
                        options.ParseOptions,
                        cancellationToken
                        );
                    if (_scriptCompiler.IsCompleteSubmission(tree))
                    {
                        break;
                    }

                    _console.Out.Write(". ");
                }

                if (cancelSubmission)
                {
                    continue;
                }

                string code = input.ToString();

                if (IsHelpCommand(code))
                {
                    DisplayHelpText();
                    continue;
                }

                Script <object> newScript;
                if (state == null)
                {
                    newScript = Script.CreateInitialScript <object>(
                        _scriptCompiler,
                        SourceText.From(code ?? string.Empty),
                        options,
                        globals.GetType(),
                        assemblyLoaderOpt: null
                        );
                }
                else
                {
                    newScript = state.Script.ContinueWith(code, options);
                }

                BuildAndRun(
                    newScript,
                    globals,
                    ref state,
                    ref options,
                    displayResult: true,
                    cancellationToken: cancellationToken
                    );
            }
        }
Example #23
0
 /// <summary>
 /// Create a new C# script.
 /// <param name="code">The source code of the script.</param>
 /// <param name="options">The script options.</param>
 /// </summary>
 public static Script Create(string code, ScriptOptions options)
 {
     return new CSharpScript(code, null, options, null, typeof(object), null, null);
 }
Example #24
0
		public static string JavaScript(ICollection<string> stateCollection, string script, ScriptOptions options)
		{
			const string scriptFormat = "<script type=\"text/javascript\">//<![CDATA[\n{0}//]]></script>";

			if (IsRegistered(stateCollection, script))
				return null;

			RegisterResource(stateCollection, script);

			if (options == ScriptOptions.Include)
				return JavaScript(stateCollection, script);
			if (options == ScriptOptions.None)
				return script;
			if (options == ScriptOptions.ScriptTags)
				return String.Format(scriptFormat, script);
			if (options == ScriptOptions.DocumentReady)
				return String.Format(scriptFormat, EmbedDocumentReady(script));

			throw new NotSupportedException(options + " not supported");
		}
Example #25
0
 /// <summary>
 /// Run a C# script.
 /// </summary>
 /// <param name="code">The source code of the script.</param>
 /// <param name="options">The script options.</param>
 /// <param name="globals">An object instance whose members can be accessed by the script as global variables, 
 /// or a <see cref="ScriptState"/> instance that was the output from a previously run script.</param>
 public static ScriptState Run(string code, ScriptOptions options, object globals)
 {
     return Create(code, options).Run(globals);
 }
Example #26
0
 public ResourcesHelper JavaScript(string script, ScriptOptions options)
 {
     Writer.Write(N2.Resources.Register.JavaScript(ViewData, script, options));
     return this;
 }
Example #27
0
 /// <summary>
 /// Run a C# script.
 /// </summary>
 /// <param name="code">The source code of the script.</param>
 /// <param name="options">The script options.</param>
 public static ScriptState Run(string code, ScriptOptions options)
 {
     return Run(code, options, globals: null);
 }
Example #28
0
        private int RunScript(ScriptOptions options, string code, ErrorLogger errorLogger, CancellationToken cancellationToken)
        {
            var globals = new CommandLineScriptGlobals(_console.Out, _objectFormatter);
            globals.Args.AddRange(_compiler.Arguments.ScriptArguments);

            var script = Script.CreateInitialScript<object>(_scriptCompiler, code, options, globals.GetType(), assemblyLoaderOpt: null);
            try
            {
                script.RunAsync(globals, cancellationToken).Wait();

                // TODO: use the return value of the script https://github.com/dotnet/roslyn/issues/5773
                return CommonCompiler.Succeeded;
            }
            catch (CompilationErrorException e)
            {
                _compiler.ReportErrors(e.Diagnostics, _console.Out, errorLogger);
                return CommonCompiler.Failed;
            }
        }
Example #29
0
 /// <summary>
 /// Run a C# script and return its resulting value.
 /// </summary>
 /// <param name="code">The source code of the script.</param>
 /// <param name="options">The script options.</param>
 /// <param name="globals">An object instance whose members can be accessed by the script as global variables, 
 /// or a <see cref="ScriptState"/> instance that was the output from a previously run script.</param>
 /// <return>Returns the value returned by running the script.</return>
 public static object Eval(string code, ScriptOptions options, object globals)
 {
     return Run(code, options, globals).ReturnValue;
 }
Example #30
0
 static ComputedString()
 {
     Options = ScriptOptions.Default
               .WithReferences(typeof(Console).Assembly, typeof(MemberExpression).Assembly)
               .WithImports("System", "System.Text", "System.Linq", "System.Collections.Generic");
 }
Example #31
0
            private Script <object> TryCompile(Script previousScript, string code, string path, ScriptOptions options)
            {
                Script script;

                var scriptOptions = options.WithFilePath(path);

                if (previousScript != null)
                {
                    script = previousScript.ContinueWith(code, scriptOptions);
                }
                else
                {
                    script = _replServiceProvider.CreateScript <object>(code, scriptOptions, _globals.GetType(), _assemblyLoader);
                }

                var diagnostics = script.Compile();

                if (diagnostics.Any(d => d.Severity == DiagnosticSeverity.Error))
                {
                    DisplayInteractiveErrors(diagnostics, Console.Error);
                    return(null);
                }

                return((Script <object>)script);
            }
Example #32
0
 private CSharpScript(string code, string path, ScriptOptions options, Type globalsType, Type returnType, ScriptBuilder builder, Script previous)
     : base(code, path, options, globalsType, returnType, builder, previous)
 {
 }
 public ScriptCompilationContext(Script <TReturn> script, SourceText sourceText, InteractiveAssemblyLoader loader, ScriptOptions scriptOptions, RuntimeDependency[] runtimeDependencies)
 {
     Script              = script;
     SourceText          = sourceText;
     ScriptOptions       = scriptOptions;
     Loader              = loader;
     RuntimeDependencies = runtimeDependencies;
 }
Example #34
0
 /// <summary>
 /// Create a new C# script.
 /// <param name="code">The source code of the script.</param>
 /// <param name="options">The script options.</param>
 /// </summary>
 public static Script Create(string code, ScriptOptions options)
 {
     return(new CSharpScript(code, null, options, null, typeof(object), null, null));
 }
Example #35
0
        public void RunScript(string comPort, string host, string path)
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

            string[]      template = File.ReadAllLines(TemplateFile);
            string[]      script   = File.ReadAllLines(path);
            List <string> builder  = new List <string>();
            bool          skip     = false;
            int           offset   = 0;
            int           count    = 0;

            foreach (var line in template)
            {
                string trimed = line.Trim().ToUpper();
                if (trimed.StartsWith("//[*"))
                {
                    skip = true;
                }
                else if (trimed.StartsWith("//*]"))
                {
                    skip = false;
                }
                else if (trimed.StartsWith("//[SCRIPT]"))
                {
                    offset = count;
                    builder.AddRange(script);
                }
                else
                {
                    if (!skip)
                    {
                        count++;
                        builder.Add(line);
                    }
                }
            }
            string text = string.Join("\r\n", builder) + $"\r\nnew {Template}(\"{comPort}\",\"{host}\")";

            try
            {
                ScriptOptions options = ScriptOptions.Default
                                        .WithImports("System", "System.Text", "System.Math", "System.Collections.Generic",
                                                     "System.Net", "Codeplex.Data", "System.IO.Ports", "System.Timers", "System.Threading", "System.Threading.Tasks",
                                                     "MQTTnet", "MQTTnet.Client", "MQTTnet.Client.Options"
                                                     )
                                        .WithReferences(
                    "System.IO.Ports.dll",
                    Path.GetFullPath(@"MQTTnet.dll"),
                    Path.GetFullPath(@"Serial2MQTT.dll")
                    );
                var task = CSharpScript.RunAsync(text, options);
                task.Wait();
            }catch (Exception ex)
            {
                string message = ex.Message;
                var    regex   = new Regex(@"\((\d+),(\d+)\)(.*)");
                var    match   = regex.Match(message);
                if (match.Success)
                {
                    int    line       = Convert.ToInt32(match.Groups[1].Value);
                    int    col        = Convert.ToInt32(match.Groups[2].Value);
                    string body       = match.Groups[3].Value;
                    string cursor     = (new string(' ', col - 1)) + "^";
                    int    scriptLine = line - offset;
                    message = $"{path} ({line-offset},{col}){body}\r\n{builder[line-1]}\r\n{cursor}";
                }
                Console.WriteLine(message);
                Environment.Exit(-1);
            }
        }
Example #36
0
 /// <summary>
 /// Run a C# script.
 /// </summary>
 /// <param name="code">The source code of the script.</param>
 /// <param name="options">The script options.</param>
 public static ScriptState Run(string code, ScriptOptions options)
 {
     return(Run(code, options, globals: null));
 }
			public ResourcesHelper JavaScript(string script, ScriptOptions options)
			{
				Writer.Write(N2.Resources.Register.JavaScript(StateCollection, script, options));
				return this;
			}
        private void BuildAndRun(Script <object> newScript, InteractiveScriptGlobals globals, ref ScriptState <object> state, ref ScriptOptions options, bool displayResult, CancellationToken cancellationToken)
        {
            var diagnostics = newScript.Compile(cancellationToken);

            DisplayDiagnostics(diagnostics);
            if (diagnostics.HasAnyErrors())
            {
                return;
            }

            var task = (state == null) ?
                       newScript.RunAsync(globals, catchException: e => true, cancellationToken: cancellationToken) :
                       newScript.RunFromAsync(state, catchException: e => true, cancellationToken: cancellationToken);

            state = task.GetAwaiter().GetResult();
            if (state.Exception != null)
            {
                DisplayException(state.Exception);
            }
            else if (displayResult && newScript.HasReturnValue())
            {
                globals.Print(state.ReturnValue);
            }

            options = UpdateOptions(options, globals);
        }
Example #39
0
 public SnippetRewriter(Project project)
 {
     options = ScriptOptions.Default
               .AddReferences(project.MetadataReferences)
               .AddReferences(new[] { MetadataReference.CreateFromFile(project.OutputFilePath) });
 }
Example #40
0
        static void Main(string[] args)
        {
            string[] wait = new[] { "o....", ".o...", "..o..", "...o.", "....o" };

            Func <Task <ScriptState <object> >, ScriptState> Execute = t =>
            {
                CancellationTokenSource cts = new CancellationTokenSource();

                t.ContinueWith(_ => { cts.Cancel(); });

                CancellationToken cancellationToken = cts.Token;

                int index = 0;
                while (!cancellationToken.IsCancellationRequested)
                {
                    Console.Write("\r{0}", wait[index]);
                    index = (index + 1) % wait.Length;
                    try
                    {
                        Task.Delay(TimeSpan.FromMilliseconds(100), cancellationToken).GetAwaiter().GetResult();
                    }
                    catch (TaskCanceledException)
                    {
                    }
                }

                Console.Write("\r{0}\r", new string(' ', 20));

                return(t.Result);
            };

            ScriptOptions scriptOptions = ScriptOptions.Default;

            scriptOptions = scriptOptions.WithReferences("System");

            ScriptState scriptState = Execute(CSharpScript.RunAsync("using System;", scriptOptions));

            while (true)
            {
                Console.Write("? ");
                string line = Console.ReadLine();

                try
                {
                    if (line.StartsWith("#"))
                    {
                        if (line.StartsWith("#reference"))
                        {
                            scriptOptions = scriptOptions.WithReferences(line.Substring("#reference".Length).Trim());
                        }

                        if (line == "#quit")
                        {
                            break;
                        }

                        continue;
                    }

                    scriptState = Execute(scriptState.ContinueWithAsync(line, scriptOptions));
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    continue;
                }

                if (scriptState.ReturnValue != null)
                {
                    Console.WriteLine(scriptState.ReturnValue);
                }
            }
        }
Example #41
0
        public ScriptCompilationContext(Script <TReturn> script, SourceText sourceText, InteractiveAssemblyLoader loader, ScriptOptions scriptOptions, RuntimeDependency[] runtimeDependencies, Diagnostic[] diagnostics)
        {
            Script              = script;
            SourceText          = sourceText;
            ScriptOptions       = scriptOptions;
            Loader              = loader;
            RuntimeDependencies = runtimeDependencies;

            Warnings = diagnostics.Where(x => x.Severity == DiagnosticSeverity.Warning).ToArray();
            Errors   = diagnostics.Where(x => x.Severity == DiagnosticSeverity.Error).ToArray();
        }
Example #42
0
        private StakhanoviseSetupDefaults MergeDefaultsFromConfig(StakhanoviseSetupDefaults targetDefaults,
                                                                  StakhanoviseSetupDefaultsConfig defaultsConfig,
                                                                  IConfiguration config)
        {
            ScriptOptions parseOptions = ConstructParseOptions();

            Assembly[] executorAssemblies = ParseExecutorAssembliesFromConfig(defaultsConfig);
            if (executorAssemblies != null)
            {
                targetDefaults.ExecutorAssemblies = executorAssemblies;
            }

            Func <IQueuedTaskToken, long> calculateDelayTicksTaskAfterFailureFn =
                CompileCalculateDelayTicksTaskAfterFailureFnFromConfig(defaultsConfig, parseOptions);

            if (calculateDelayTicksTaskAfterFailureFn != null)
            {
                targetDefaults.CalculateDelayMillisecondsTaskAfterFailure = calculateDelayTicksTaskAfterFailureFn;
            }

            Func <IQueuedTask, Exception, bool> isTaskErrorRecoverableFn =
                CompileIsTaskErrorRecoverableFnFromConfig(defaultsConfig, parseOptions);

            if (isTaskErrorRecoverableFn != null)
            {
                targetDefaults.IsTaskErrorRecoverable = isTaskErrorRecoverableFn;
            }

            if (!string.IsNullOrWhiteSpace(defaultsConfig.ConnectionStringName))
            {
                targetDefaults.ConnectionString = config.GetConnectionString(defaultsConfig.ConnectionStringName);
            }

            QueuedTaskMapping mappingFromConfig =
                GetQueudTaskMappingFromDefaultsConfig(defaultsConfig);

            targetDefaults.Mapping = MergeMappingFromConfig(targetDefaults.Mapping,
                                                            mappingFromConfig);

            if (defaultsConfig.WorkerCount > 0)
            {
                targetDefaults.WorkerCount = defaultsConfig.WorkerCount;
            }

            if (defaultsConfig.FaultErrorThresholdCount > 0)
            {
                targetDefaults.FaultErrorThresholdCount = defaultsConfig.FaultErrorThresholdCount;
            }

            if (defaultsConfig.AppMetricsCollectionIntervalMilliseconds > 0)
            {
                targetDefaults.AppMetricsCollectionIntervalMilliseconds = defaultsConfig.AppMetricsCollectionIntervalMilliseconds;
            }

            if (defaultsConfig.AppMetricsMonitoringEnabled.HasValue)
            {
                targetDefaults.AppMetricsMonitoringEnabled = defaultsConfig.AppMetricsMonitoringEnabled.Value;
            }

            if (defaultsConfig.SetupBuiltInDbAsssets.HasValue)
            {
                targetDefaults.SetupBuiltInDbAsssets = defaultsConfig.SetupBuiltInDbAsssets.Value;
            }

            return(targetDefaults);
        }
Example #43
0
 public ScanScript(ScriptOptions scriptOptions, string sampleName, string ipAddress, string scannerName)
     : base(scriptOptions, sampleName)
 {
     Arguments.Add("IpAddress", ipAddress);
     Arguments.Add("ScannerName", scannerName);
 }
Example #44
0
 private Func <IQueuedTask, Exception, bool> CompileIsTaskErrorRecoverableFnFromConfig(StakhanoviseSetupDefaultsConfig defaultsConfig,
                                                                                       ScriptOptions parseOptions)
 {
     if (!string.IsNullOrEmpty(defaultsConfig.IsTaskErrorRecoverable))
     {
         return(CSharpScript.EvaluateAsync <Func <IQueuedTask, Exception, bool> >(defaultsConfig.IsTaskErrorRecoverable,
                                                                                  options: parseOptions)
                .Result);
     }
     else
     {
         return(null);
     }
 }
Example #45
0
 internal override Script Create(string code, ScriptOptions options, Type globalsType, Type returnType)
 {
     return(CSharpScript.Create(code, options).WithGlobalsType(globalsType).WithReturnType(returnType).WithBuilder(this.Builder));
 }
Example #46
0
 protected override Script <T> Create <T>(string code, ScriptOptions options, Type globalsType, InteractiveAssemblyLoader?assemblyLoader) =>
 VisualBasicScript.Create <T>(code, options, globalsType, assemblyLoader);
Example #47
0
 /// <summary>Register an embedded javascript resource reference in the page header with options.</summary>
 /// <param name="page">The page in whose header to register the javascript.</param>
 /// <param name="type">The type in whose assembly the javascript is embedded.</param>
 /// <param name="resourceName">The name of the embedded resource.</param>
 /// <param name="options">Options flag.</param>
 public static void JavaScript(this Page page, Type type, string resourceName, ScriptOptions options)
 {
     JavaScript(page, page.ClientScript.GetWebResourceUrl(type, resourceName), options);
 }
Example #48
0
 internal override Script Create(string code, ScriptOptions options, Type globalsType, Type returnType)
 {
     return CSharpScript.Create(code, options).WithGlobalsType(globalsType).WithReturnType(returnType).WithBuilder(this.Builder);
 }
Example #49
0
        /// <summary>Registers a script block on a page.</summary>
        /// <param name="page">The page onto which to added the script.</param>
        /// <param name="script">The script to add.</param>
        /// <param name="position">Where to add the script.</param>
        /// <param name="options">Script registration options.</param>
        public static void JavaScript(this Page page, string script, ScriptPosition position, ScriptOptions options)
        {
            if (page == null)
            {
                throw new ArgumentNullException("page");
            }

            if (position == ScriptPosition.Header)
            {
                JavaScript(page, script, options);
            }
            else if (position == ScriptPosition.Bottom)
            {
                string key = script.GetHashCode().ToString();
                if (options.Is(ScriptOptions.None))
                {
                    page.ClientScript.RegisterStartupScript(typeof(Register), key, script);
                }
                else if (options.Is(ScriptOptions.ScriptTags))
                {
                    page.ClientScript.RegisterStartupScript(typeof(Register), key, script, true);
                }
                else if (options.Is(ScriptOptions.DocumentReady))
                {
                    page.JQuery();
                    page.ClientScript.RegisterStartupScript(typeof(Register), key, EmbedDocumentReady(script), true);
                }
                else if (options.Is(ScriptOptions.Include))
                {
                    page.ClientScript.RegisterClientScriptInclude(key, Url.ResolveTokens(script));
                }
                else
                {
                    throw new ArgumentException("options");
                }
            }
            else
            {
                throw new ArgumentException("position");
            }
        }
Example #50
0
        private int RunScript(ScriptOptions options, string code, ErrorLogger errorLogger, CancellationToken cancellationToken)
        {
            var globals = new CommandLineScriptGlobals(_console.Out, _objectFormatter);
            globals.Args.AddRange(_compiler.Arguments.ScriptArguments);

            var script = Script.CreateInitialScript<int>(_scriptCompiler, code, options, globals.GetType(), assemblyLoaderOpt: null);
            try
            {
                return script.RunAsync(globals, cancellationToken).Result.ReturnValue;
            }
            catch (CompilationErrorException e)
            {
                _compiler.ReportErrors(e.Diagnostics, _console.Out, errorLogger);
                return CommonCompiler.Failed;
            }
        }
Example #51
0
 private static bool Is(this ScriptOptions options, ScriptOptions expectedOption)
 {
     return((options & expectedOption) == expectedOption);
 }
Example #52
0
        private static ScriptOptions UpdateOptions(ScriptOptions options, InteractiveScriptGlobals globals)
        {
            var currentMetadataResolver = (RuntimeMetadataReferenceResolver)options.MetadataResolver;
            var currentSourceResolver = (CommonCompiler.LoggingSourceFileResolver)options.SourceResolver;

            string newWorkingDirectory = Directory.GetCurrentDirectory();
            var newReferenceSearchPaths = ImmutableArray.CreateRange(globals.ReferencePaths);
            var newSourceSearchPaths = ImmutableArray.CreateRange(globals.SourcePaths);

            // remove references and imports from the options, they have been applied and will be inherited from now on:
            return options.
                RemoveImportsAndReferences().
                WithMetadataResolver(currentMetadataResolver.
                    WithRelativePathResolver(
                        currentMetadataResolver.PathResolver.
                            WithBaseDirectory(newWorkingDirectory).
                            WithSearchPaths(newReferenceSearchPaths))).
                WithSourceResolver(currentSourceResolver.
                        WithBaseDirectory(newWorkingDirectory).
                        WithSearchPaths(newSourceSearchPaths));
        }
Example #53
0
        public static string JavaScript(ICollection <string> stateCollection, string script, ScriptOptions options)
        {
            if (IsRegistered(stateCollection, script))
            {
                return(null);
            }

            RegisterResource(stateCollection, script);

            if (options == ScriptOptions.Include)
            {
                return(JavaScript(stateCollection, script));
            }
            if (options == ScriptOptions.None)
            {
                return(script);
            }
            if (options == ScriptOptions.ScriptTags)
            {
                return(string.Format(scriptFormat, script));
            }
            if (options == ScriptOptions.DocumentReady)
            {
                return(string.Format(scriptFormat, EmbedDocumentReady(script)));
            }

            throw new NotSupportedException(options + " not supported");
        }
Example #54
0
 /// <summary>Register an embedded javascript resource reference in the page header with options.</summary>
 /// <param name="page">The page in whose header to register the javascript.</param>
 /// <param name="type">The type in whose assembly the javascript is embedded.</param>
 /// <param name="resourceName">The name of the embedded resource.</param>
 /// <param name="options">Options flag.</param>
 public static void JavaScript(this Page page, Type type, string resourceName, ScriptOptions options)
 {
     JavaScript(page, page.ClientScript.GetWebResourceUrl(type, resourceName), options);
 }
 public SignalCompilationService(EntityMetadata entityMetadata, ScriptOptions scriptOptions) : base(entityMetadata, scriptOptions)
 {
 }
Example #56
0
        public static string JavaScript(ICollection<string> stateCollection, string script, ScriptOptions options)
        {
            if (IsRegistered(stateCollection, script))
                return null;

            RegisterResource(stateCollection, script);

            if (options == ScriptOptions.Include)
                return JavaScript(stateCollection, script);
            if (options == ScriptOptions.None)
                return script;
            if (options == ScriptOptions.ScriptTags)
                return string.Format(scriptFormat, script);
            if (options == ScriptOptions.DocumentReady)
                return string.Format(scriptFormat, EmbedDocumentReady(script));

            throw new NotSupportedException(options + " not supported");
        }
Example #57
0
        private static Expression <Func <ICellAccessor, Action> > ConstructVisitNodeAction(ExpressionSyntax traverseAction)
        {
            /***********************************************
            * Syntax: (VISITNODE)
            *
            * 1. VisitNode(FanoutSearch.Action action, IEnumerable<string> select = null)
            * 2. VisitNode(Expression<Func<ICellAccessor, FanoutSearch.Action>> action, IEnumerable<string> select = null)
            *
            * The select part is handled by the caller.
            ***********************************************/

            var action_expr       = TryGet <MemberAccessExpressionSyntax>(traverseAction);
            var lambda_expression = TryGet <LambdaExpressionSyntax>(traverseAction);
            Expression <Func <ICellAccessor, Action> > ret = null;

            if (action_expr != null)
            {
                // Action enum
                var id_expr = Get <IdentifierNameSyntax>(action_expr.Expression);
                if (id_expr.ToString() != s_LIKQ_Action)
                {
                    goto throw_badtype;
                }

                Action result_action;
                ThrowIf(!Enum.TryParse(action_expr.Name.ToString(), out result_action), "Invalid traverse action", action_expr);

                return(ExpressionBuilder.WrapAction(result_action));
            }
            else
            {
                if (lambda_expression == null)
                {
                    goto throw_badtype;
                }

                // FanoutSearch.Action is ambiguous with with System.Action
                var action_visitor = new FanoutSearchActionRewritter();
                lambda_expression = action_visitor.Visit(lambda_expression) as LambdaExpressionSyntax;

                ScriptOptions scriptOptions = ScriptOptions.Default;
                var           mscorlib      = typeof(System.Object).Assembly;
                var           systemCore    = typeof(System.Linq.Enumerable).Assembly;
                var           expression    = typeof(Expression).Assembly;
                var           fanout        = typeof(FanoutSearchModule).Assembly;
                var           trinity       = typeof(Trinity.Global).Assembly;

                scriptOptions = scriptOptions.AddReferences(mscorlib, systemCore, expression, fanout, trinity);

                scriptOptions = scriptOptions.AddImports(
                    "System",
                    "System.Linq",
                    "System.Linq.Expressions",
                    "System.Collections.Generic",
                    "FanoutSearch",
                    "FanoutSearch.LIKQ",
                    "Trinity",
                    "Trinity.Storage");

                try
                {
                    //  Allocate a cancellation token source, which signals after our timeout setting (if we do have timeout setting)
                    CancellationToken cancel_token = default(CancellationToken);
                    if (FanoutSearchModule._QueryTimeoutEnabled())
                    {
                        checked
                        {
                            cancel_token = new CancellationTokenSource((int)FanoutSearchModule.GetQueryTimeout()).Token;
                        }
                    }
                    //  It is guaranteed that the lambda_expression is really a lambda.
                    //  Evaluating a lambda and expecting an expression tree to be obtained now.
                    using (var eval_task = CSharpScript.EvaluateAsync <Expression <Func <ICellAccessor, Action> > >(lambda_expression.ToString(), scriptOptions, cancellationToken: cancel_token))
                    {
                        eval_task.Wait(cancel_token);
                        ret = eval_task.Result;
                    }
                }
                catch (ArithmeticException) { /* that's a fault not an error */ throw; }
                catch { /*swallow roslyn scripting engine exceptions.*/ }

                ThrowIf(null == ret, "Invalid lambda expression.", traverseAction);
                return(ret);
            }

throw_badtype:
            ThrowIf(true, "Expecting an argument of type FanoutSearch.Action, or a lambda expression.", traverseAction);
            return(null);//not going to happen
        }
Example #58
0
        private void RunInteractiveLoop(ScriptOptions options, string initialScriptCodeOpt, CancellationToken cancellationToken)
        {
            var globals = new InteractiveScriptGlobals(_console.Out, _objectFormatter);
            globals.Args.AddRange(_compiler.Arguments.ScriptArguments);

            ScriptState<object> state = null;

            if (initialScriptCodeOpt != null)
            {
                var script = Script.CreateInitialScript<object>(_scriptCompiler, initialScriptCodeOpt, options, globals.GetType(), assemblyLoaderOpt: null);

                Compilation compilation;
                TryBuildAndRun(script, globals, ref state, out compilation, cancellationToken);
            }

            while (true)
            {
                _console.Out.Write("> ");
                var input = new StringBuilder();
                string line;
                bool cancelSubmission = false;

                while (true)
                {
                    line = _console.In.ReadLine();
                    if (line == null)
                    {
                        if (input.Length == 0)
                        {
                            return;
                        }

                        cancelSubmission = true;
                        break;
                    }

                    input.AppendLine(line);

                    var tree = _scriptCompiler.ParseSubmission(SourceText.From(input.ToString()), cancellationToken);
                    if (_scriptCompiler.IsCompleteSubmission(tree))
                    {
                        break;
                    }

                    _console.Out.Write(". ");
                }

                if (cancelSubmission)
                {
                    continue;
                }

                string code = input.ToString();

                if (IsHelpCommand(code))
                {
                    DisplayHelpText();
                    continue;
                }

                Script<object> newScript;
                if (state == null)
                {
                    newScript = Script.CreateInitialScript<object>(_scriptCompiler, code, options, globals.GetType(), assemblyLoaderOpt: null);
                }
                else
                {
                    newScript = state.Script.ContinueWith(code, options);
                }

                Compilation newCompilation;
                if (!TryBuildAndRun(newScript, globals, ref state, out newCompilation, cancellationToken))
                {
                    continue;
                }

                bool hasValue;
                ITypeSymbol resultType = newCompilation.GetSubmissionResultType(out hasValue);
                if (hasValue)
                {
                    if (resultType != null && resultType.SpecialType == SpecialType.System_Void)
                    {
                        _console.Out.WriteLine(_objectFormatter.VoidDisplayString);
                    }
                    else
                    {
                        globals.Print(state.ReturnValue);
                    }
                }
            }
        }
Example #59
0
 private void RunScript(ScriptOptions options, string code, string scriptPath, CommandLineHostObject globals, ErrorLogger errorLogger)
 {
     options = options.WithPath(scriptPath).WithIsInteractive(false);
     var script = Script.CreateInitialScript<object>(_scriptCompiler, code, options, globals.GetType(), assemblyLoaderOpt: null);
     try
     {
         script.RunAsync(globals, globals.CancellationToken).Wait();
     }
     catch (CompilationErrorException e)
     {
         _compiler.ReportErrors(e.Diagnostics, _console.Out, errorLogger);
         globals.ExitCode = CommonCompiler.Failed;
     }
 }