Exemplo n.º 1
0
        public int Run()
        {
            try
            {
                Stream codeStream = LocateCode();
                var formatter = new BinaryFormatter();
                var reader = new ScriptEngine.Compiler.ModulePersistor(formatter);
                var moduleHandle = reader.Read(codeStream);
                var engine = new HostedScriptEngine();
                var src = new BinaryCodeSource(moduleHandle);

                var process = engine.CreateProcess(this, moduleHandle, src);
                return process.Start();
                
            }
            catch (ScriptInterruptionException e)
            {
                return e.ExitCode;
            }
            catch (Exception e)
            {
                this.ShowExceptionInfo(e);
                return 1;
            }

        }
Exemplo n.º 2
0
        public override int Execute()
        {
            Console.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.Initialize();
                var source = engine.Loader.FromFile(_codePath);
                var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                var persistor = new ScriptEngine.Compiler.ModulePersistor(formatter);
                var compiler = engine.GetCompilerService();
                persistor.Save(compiler.CreateModule(source), output);

                byte[] signature = new byte[4]
                    {
                        0x4f,0x53,0x4d,0x44
                    };
                output.Write(signature, 0, signature.Length);
                using (var bw = new BinaryWriter(output))
                {
                    bw.Write(offset);
                }
            }
            Console.WriteLine("Make completed");
            return 0;
        }
Exemplo n.º 3
0
        public override int Execute()
        {
            Console.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.Initialize();
                    var source    = engine.Loader.FromFile(_codePath);
                    var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                    var persistor = new ScriptEngine.Compiler.ModulePersistor(formatter);
                    var compiler  = engine.GetCompilerService();
                    persistor.Save(compiler.CreateModule(source), output);

                    byte[] signature = new byte[4]
                    {
                        0x4f, 0x53, 0x4d, 0x44
                    };
                    output.Write(signature, 0, signature.Length);
                    using (var bw = new BinaryWriter(output))
                    {
                        bw.Write(offset);
                    }
                }
            Console.WriteLine("Make completed");
            return(0);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        public int Run()
        {
            try
            {
                ScriptModuleHandle module;
                var engine = new HostedScriptEngine();
                engine.Initialize();

                using (Stream codeStream = LocateCode())
                    using (var binReader = new BinaryReader(codeStream))
                    {
                        int modulesCount;
                        modulesCount = binReader.ReadInt32();


                        var formatter = new BinaryFormatter();
                        var reader    = new ScriptEngine.Compiler.ModulePersistor(formatter);

                        var entry = reader.Read(codeStream);
                        --modulesCount;

                        while (modulesCount-- > 0)
                        {
                            var userScript = reader.Read(codeStream);
                            engine.LoadUserScript(userScript);
                        }

                        module = entry.Module;
                    }

                var src     = new BinaryCodeSource(module);
                var process = engine.CreateProcess(this, module, src);

                return(process.Start());
            }
            catch (ScriptInterruptionException e)
            {
                return(e.ExitCode);
            }
            catch (Exception e)
            {
                this.ShowExceptionInfo(e);
                return(1);
            }
        }
Exemplo n.º 6
0
        public int Run()
        {
            try
            {
                Stream codeStream   = LocateCode();
                var    formatter    = new BinaryFormatter();
                var    reader       = new ScriptEngine.Compiler.ModulePersistor(formatter);
                var    moduleHandle = reader.Read(codeStream);
                var    engine       = new HostedScriptEngine();
                var    src          = new BinaryCodeSource(moduleHandle);

                var process = engine.CreateProcess(this, moduleHandle, src);
                return(process.Start());
            }
            catch (Exception e)
            {
                Console.Write(e.ToString());
                return(-1);
            }
        }
Exemplo n.º 7
0
        public int Run()
        {
            try
            {
                Stream codeStream   = LocateCode();
                var    formatter    = new BinaryFormatter();
                var    reader       = new ScriptEngine.Compiler.ModulePersistor(formatter);
                var    moduleHandle = reader.Read(codeStream);
                var    engine       = new HostedScriptEngine();
                var    src          = new BinaryCodeSource(moduleHandle);

                var process = engine.CreateProcess(this, moduleHandle, src);
                return(process.Start());
            }
            catch (ScriptInterruptionException e)
            {
                return(e.ExitCode);
            }
            catch (Exception e)
            {
                this.ShowExceptionInfo(e);
                return(1);
            }
        }
        public static CompilerResults CompileAssemblyFromFile(CompilerParameters options, params string[] fileNames)
        {
            var result = new CompilerResults(new TempFileCollection());
            var engine = new ScriptEngine.HostedScript.HostedScriptEngine();

            engine.Initialize();
            var compilerService = engine.GetCompilerService();
            // TODO: Применить options

            var modules  = new List <ScriptEngine.Environment.ScriptModuleHandle>();
            var compiled = true;

            foreach (var fileName in fileNames)
            {
                var codeSource = engine.Loader.FromFile(fileName);
                try
                {
                    var module = compilerService.CreateModule(codeSource);
                    modules.Add(module);
                }
                catch (Exception exc)
                {
                    var error = new CompilerError(fileName, 1, 1, "", exc.Message);
                    result.Errors.Add(error);
                    compiled = false;
                }
            }

            if (!compiled)
            {
                return(result);
            }

            var exePath = options.OutputAssembly;

            using (var output = new FileStream(exePath, FileMode.Create))
            {
                using (var exeStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("OneScript.MonoBinding.StandaloneRunner.exe"))
                {
                    exeStream.CopyTo(output);
                }
                var offset = (int)output.Length;

                var embeddedContext = engine.GetUserAddedScripts();
                using (var modulesDataWriter = new BinaryWriter(output))
                {
                    modulesDataWriter.Write(embeddedContext.Count() + 1);
                    var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                    var persistor = new ScriptEngine.Compiler.ModulePersistor(formatter);
                    persistor.Save(new ScriptEngine.UserAddedScript()
                    {
                        Type   = ScriptEngine.UserAddedScriptType.Module,
                        Symbol = "$entry",
                        Module = modules[0]                         // TODO: Внятно определять точку входа
                    }, output);

                    foreach (var item in embeddedContext)
                    {
                        persistor.Save(item, output);
                    }

                    // Magic "OSMD"
                    var signature = new byte[4] {
                        0x4f, 0x53, 0x4d, 0x44
                    };
                    output.Write(signature, 0, signature.Length);

                    modulesDataWriter.Write(offset);
                }
            }

            result.PathToAssembly = exePath;
            result.Output.Add("Compile complete!");

            return(result);
        }