public override int Execute() { if (!System.IO.File.Exists(_path)) { Echo(String.Format("Script file is not found '{0}'", _path)); return(2); } SystemLogger.SetWriter(this); var hostedScript = new HostedScriptEngine(); hostedScript.CustomConfig = ScriptFileHelper.CustomConfigPath(_path); ScriptFileHelper.OnBeforeScriptRead(hostedScript); var source = hostedScript.Loader.FromFile(_path); Process process; try { process = hostedScript.CreateProcess(this, source); } catch (Exception e) { this.ShowExceptionInfo(e); return(1); } var result = process.Start(); hostedScript.Finalize(); return(result); }
public override int Execute() { var hostedScript = new HostedScriptEngine { CustomConfig = ScriptFileHelper.CustomConfigPath(_path) }; hostedScript.Initialize(); ScriptFileHelper.OnBeforeScriptRead(hostedScript); var source = hostedScript.Loader.FromFile(_path); var compiler = hostedScript.GetCompilerService(); hostedScript.SetGlobalEnvironment(new DoNothingHost(), source); var writer = new ModuleWriter(compiler); try { writer.Write(Console.Out, source); } catch (ScriptException e) { Output.WriteLine(e.Message); return(1); } return(0); }
public override int Execute() { var hostedScript = new HostedScriptEngine(); hostedScript.CustomConfig = ScriptFileHelper.CustomConfigPath(_path); hostedScript.Initialize(); ScriptFileHelper.OnBeforeScriptRead(hostedScript); var source = hostedScript.Loader.FromFile(_path); try { if (_envFile != null) { var envCompiler = hostedScript.GetCompilerService(); var envSrc = hostedScript.Loader.FromFile(_envFile); envCompiler.CreateModule(envSrc); } var compiler = hostedScript.GetCompilerService(); compiler.CreateModule(source); } catch (ScriptException e) { Output.WriteLine(e.Message); return(1); } Output.WriteLine("No errors."); return(0); }
private void CreateDump(Stream output) { var offset = (int)output.Length; var engine = new HostedScriptEngine { CustomConfig = ScriptFileHelper.CustomConfigPath(_codePath) }; engine.Initialize(); ScriptFileHelper.OnBeforeScriptRead(engine); var source = engine.Loader.FromFile(_codePath); var compiler = engine.GetCompilerService(); engine.SetGlobalEnvironment(new DoNothingHost(), source); var entry = compiler.Compile(source); var embeddedContext = engine.GetUserAddedScripts(); var templates = GlobalsManager.GetGlobalContext <TemplateStorage>(); var dump = new ApplicationDump(); dump.Scripts = new UserAddedScript[] { new UserAddedScript() { Image = entry, Symbol = "$entry", Type = UserAddedScriptType.Module } }.Concat(embeddedContext) .ToArray(); dump.Resources = templates.GetTemplates() .Select(SerializeTemplate) .ToArray(); using (var bw = new BinaryWriter(output)) { var serializer = new BinaryFormatter(); serializer.Serialize(output, dump); var signature = new byte[] { 0x4f, 0x53, 0x4d, 0x44 }; output.Write(signature, 0, signature.Length); bw.Write(offset); OutputToFile(output); } }
private void CreateExe() { using (var exeStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("oscript.StandaloneRunner.exe")) using (var output = new MemoryStream()) { exeStream?.CopyTo(output); var offset = (int)output.Length; var engine = new HostedScriptEngine { CustomConfig = ScriptFileHelper.CustomConfigPath(_codePath) }; engine.Initialize(); ScriptFileHelper.OnBeforeScriptRead(engine); var source = engine.Loader.FromFile(_codePath); var compiler = engine.GetCompilerService(); engine.SetGlobalEnvironment(new DoNothingHost(), source); var entry = compiler.CreateModule(source); var embeddedContext = engine.GetUserAddedScripts(); using (var bw = new BinaryWriter(output)) { var userAddedScripts = embeddedContext as IList <UserAddedScript> ?? embeddedContext.ToList(); bw.Write(userAddedScripts.Count + 1); var persistor = new ModulePersistor(); persistor.Save(new UserAddedScript { Type = UserAddedScriptType.Module, Symbol = "$entry", Module = entry }, output); foreach (var item in userAddedScripts) { persistor.Save(item, output); } var signature = new byte[] { 0x4f, 0x53, 0x4d, 0x44 }; output.Write(signature, 0, signature.Length); bw.Write(offset); OutputToFile(output); } } }
private void CreateDump(Stream output) { var offset = (int)output.Length; var engine = new HostedScriptEngine { CustomConfig = ScriptFileHelper.CustomConfigPath(_codePath) }; engine.Initialize(); ScriptFileHelper.OnBeforeScriptRead(engine); var source = engine.Loader.FromFile(_codePath); var compiler = engine.GetCompilerService(); engine.SetGlobalEnvironment(new DoNothingHost(), source); var entry = compiler.Compile(source); var embeddedContext = engine.GetUserAddedScripts(); using (var bw = new BinaryWriter(output)) { var userAddedScripts = embeddedContext as IList <UserAddedScript> ?? embeddedContext.ToList(); bw.Write(userAddedScripts.Count + 1); var persistor = new ModulePersistor(); persistor.Save(new UserAddedScript { Type = UserAddedScriptType.Module, Symbol = "$entry", Image = entry }, output); foreach (var item in userAddedScripts) { persistor.Save(item, output); } var signature = new byte[] { 0x4f, 0x53, 0x4d, 0x44 }; output.Write(signature, 0, signature.Length); bw.Write(offset); OutputToFile(output); } }
private static AppBehavior EnableCodeStatistics(CmdLineHelper helper) { var param = helper.Parse(helper.Current()); if (string.IsNullOrEmpty(param.Value)) { return(null); } var outputStatFile = param.Value; ScriptFileHelper.EnableCodeStatistics(outputStatFile); return(Select(helper.Tail())); }
public override int Execute() { Output.WriteLine("Make started..."); using (var exeStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("oscript.StandaloneRunner.exe")) using (var output = new FileStream(_exePath, FileMode.Create)) { exeStream.CopyTo(output); int offset = (int)output.Length; var engine = new HostedScriptEngine(); engine.CustomConfig = ScriptFileHelper.CustomConfigPath(_codePath); engine.Initialize(); ScriptFileHelper.OnBeforeScriptRead(engine); var source = engine.Loader.FromFile(_codePath); var compiler = engine.GetCompilerService(); var entry = compiler.CreateModule(source); var embeddedContext = engine.GetUserAddedScripts(); using (var bw = new BinaryWriter(output)) { bw.Write(embeddedContext.Count() + 1); var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); var persistor = new ScriptEngine.Compiler.ModulePersistor(formatter); persistor.Save(new UserAddedScript() { Type = UserAddedScriptType.Module, Symbol = "$entry", Module = entry }, output); foreach (var item in embeddedContext) { persistor.Save(item, output); } byte[] signature = new byte[4] { 0x4f, 0x53, 0x4d, 0x44 }; output.Write(signature, 0, signature.Length); bw.Write(offset); } } Output.WriteLine("Make completed"); return(0); }
public override int Execute() { var engine = new HostedScriptEngine { CustomConfig = ScriptFileHelper.CustomConfigPath(_path) }; engine.Initialize(); ScriptFileHelper.OnBeforeScriptRead(engine); var source = engine.Loader.FromFile(_path); var compiler = engine.GetCompilerService(); engine.SetGlobalEnvironment(new DoNothingHost(), source); var entry = compiler.Compile(source); var embeddedContext = engine.GetExternalLibraries(); var serializer = new JsonSerializer(); var sb = new StringBuilder(); using (var textWriter = new StringWriter(sb)) { var writer = new JsonTextWriter(textWriter); writer.WriteStartArray(); WriteImage(new UserAddedScript { Type = UserAddedScriptType.Module, Symbol = "$entry", Image = entry }, writer, serializer); foreach (var item in embeddedContext) { item.Classes.ForEach(x => WriteImage(x, writer, serializer)); item.Modules.ForEach(x => WriteImage(x, writer, serializer)); } writer.WriteEndArray(); } string result = sb.ToString(); Output.WriteLine(result); return(0); }
public override int Execute() { var hostedScript = new HostedScriptEngine { CustomConfig = ScriptFileHelper.CustomConfigPath(_path) }; hostedScript.Initialize(); if (_isCgi) { var request = ValueFactory.Create(); hostedScript.InjectGlobalProperty("ВебЗапрос", request, true); hostedScript.InjectGlobalProperty("WebRequest", request, true); } ScriptFileHelper.OnBeforeScriptRead(hostedScript); var source = hostedScript.Loader.FromFile(_path); hostedScript.SetGlobalEnvironment(new DoNothingHost(), source); try { if (_envFile != null) { var envCompiler = hostedScript.GetCompilerService(); var envSrc = hostedScript.Loader.FromFile(_envFile); envCompiler.Compile(envSrc); } var compiler = hostedScript.GetCompilerService(); compiler.Compile(source); } catch (ScriptException e) { Output.WriteLine(e.Message); return(1); } Output.WriteLine("No errors."); return(0); }
private int RunCGIMode(string scriptFile) { var engine = new HostedScriptEngine { CustomConfig = ScriptFileHelper.CustomConfigPath(scriptFile) }; engine.AttachAssembly(Assembly.GetExecutingAssembly()); var request = new WebRequestContext(); engine.InjectGlobalProperty("ВебЗапрос", request, true); engine.InjectGlobalProperty("WebRequest", request, true); engine.InjectObject(this, false); ScriptFileHelper.OnBeforeScriptRead(engine); var source = engine.Loader.FromFile(scriptFile); Process process; try { process = engine.CreateProcess(this, source); } catch (Exception e) { ShowExceptionInfo(e); return(1); } var exitCode = process.Start(); if (!_isContentEchoed) { Echo(""); } return(exitCode); }
private static AppBehavior SelectParametrized(CmdLineHelper helper) { var param = helper.Current().ToLowerInvariant(); if (param == "-measure") { var path = helper.Next(); if (path != null) { return(new MeasureBehavior(path, helper.Tail())); } } else if (param == "-compile") { var path = helper.Next(); if (path != null) { return(new ShowCompiledBehavior(path)); } } else if (param == "-check") { return(ProcessCheckKey(helper)); } else if (param == "-make") { var codepath = helper.Next(); var output = helper.Next(); var makeBin = helper.Next(); if (output != null && codepath != null) { var appMaker = new MakeAppBehavior(codepath, output); if (makeBin != null && makeBin == "-bin") { appMaker.CreateDumpOnly = true; } return(appMaker); } } else if (param == "-cgi") { return(new CgiBehavior()); } else if (param == "-version" || param == "-v") { return(new ShowVersionBehavior()); } else if (param.StartsWith("-encoding=")) { return(ProcessEncodingKey(helper)); } else if (param.StartsWith("-codestat=")) { var prefixLen = ("-codestat=").Length; if (param.Length > prefixLen) { var outputStatFile = param.Substring(prefixLen); ScriptFileHelper.EnableCodeStatistics(outputStatFile); return(Select(helper.Tail())); } } else if (param == "-debug") { var arg = helper.Next(); int port = 2801; if (arg != null && arg.StartsWith("-port=")) { var prefixLen = ("-port=").Length; if (arg.Length > prefixLen) { var value = arg.Substring(prefixLen); if (!Int32.TryParse(value, out port)) { Output.WriteLine("Incorrect port: " + value); return(null); } } } else if (arg != null) { var path = arg; return(new DebugBehavior(port, path, helper.Tail())); } } else if (param == "-serialize") { var path = helper.Next(); if (path != null) { return(new SerializeModuleBehavior(path)); } return(new ShowUsageBehavior()); } return(null); }
public static AppBehavior Select(string[] cmdLineArgs) { if (cmdLineArgs.Length == 0) { return(new ShowUsageBehavior()); } else { if (!cmdLineArgs[0].StartsWith("-")) { var path = cmdLineArgs[0]; return(new ExecuteScriptBehavior(path, cmdLineArgs.Skip(1).ToArray())); } else if (cmdLineArgs[0].ToLower() == "-measure") { if (cmdLineArgs.Length > 1) { var path = cmdLineArgs[1]; return(new MeasureBehavior(path, cmdLineArgs.Skip(2).ToArray())); } } else if (cmdLineArgs[0].ToLower() == "-compile") { if (cmdLineArgs.Length > 1) { var path = cmdLineArgs[1]; return(new ShowCompiledBehavior(path)); } } else if (cmdLineArgs[0].ToLower() == "-check") { if (cmdLineArgs.Length > 1) { bool cgi_mode = false; int paramIndex = 1; if (cmdLineArgs[paramIndex].ToLower() == "-cgi") { ++paramIndex; cgi_mode = true; } var path = cmdLineArgs[paramIndex]; ++paramIndex; string env = null; if (cmdLineArgs.Length > paramIndex && cmdLineArgs[paramIndex].StartsWith("-env=")) { env = cmdLineArgs[paramIndex].Substring(5); } return(new CheckSyntaxBehavior(path, env, cgi_mode)); } } else if (cmdLineArgs[0].ToLower() == "-make") { if (cmdLineArgs.Length == 3) { var codepath = cmdLineArgs[1]; var output = cmdLineArgs[2]; return(new MakeAppBehavior(codepath, output)); } } else if (cmdLineArgs[0].ToLower() == "-cgi") { return(new CgiBehavior()); } else if (cmdLineArgs[0].ToLower() == "-version") { return(new ShowVersionBehavior()); } else if (cmdLineArgs[0].StartsWith("-encoding=")) { var prefixLen = ("-encoding=").Length; if (cmdLineArgs[0].Length > prefixLen) { var encValue = cmdLineArgs[0].Substring(prefixLen); Encoding encoding; try { encoding = Encoding.GetEncoding(encValue); } catch { Output.WriteLine("Wrong console encoding"); encoding = null; } if (encoding != null) { Program.ConsoleOutputEncoding = encoding; } return(Select(cmdLineArgs.Skip(1).ToArray())); } } else if (cmdLineArgs[0].StartsWith("-codestat=")) { var prefixLen = ("-codestat=").Length; if (cmdLineArgs[0].Length > prefixLen) { var outputStatFile = cmdLineArgs[0].Substring(prefixLen); ScriptFileHelper.EnableCodeStatistics(outputStatFile); return(Select(cmdLineArgs.Skip(1).ToArray())); } } } return(new ShowUsageBehavior()); }