public CompilerErrorCollection Run(params string[] args){
var referencedAssemblies = ExtractAssemblies();
var pipeline = ExtractPipeline() ?? new CompileToFile();
var parameters = new CompilerParameters(true);
//parameters.Ducky = true;
parameters.LibPaths.Add(Environment.CurrentDirectory);
parameters.LibPaths.Add(Path.Combine(Environment.CurrentDirectory, "bin"));
parameters.OutputAssembly = "script.dll";
foreach (var assembly in referencedAssemblies){
parameters.AddAssembly(assembly);
parameters.References.Add(assembly);
}
parameters.Pipeline = pipeline;
var compiler = new BooCompiler(parameters);
parameters.Input.Add(new ReaderInput("script", new StringReader(BooScript)));
var result = compiler.Run();
if (result.Errors.yes()) return result.Errors;
var resultAssembly = result.GeneratedAssembly;
var global__ = resultAssembly.getTypesWithAttribute<GlobalsHandlingClassAttribute>();
var global = global__.no() ? null : global__.FirstOrDefault();
if (global.yes() && Globals.Count != 0){
foreach (var pair in Globals){
var pi = global.GetProperty(pair.Key, BindingFlags.Static | BindingFlags.Public | BindingFlags.SetProperty);
if (null == pi) throw new Exception("Нет статического свойства с именем " + pair.Key);
pi.SetValue(null, pair.Key, null);
}
}
resultAssembly.EntryPoint.Invoke(null, new[]{args});
return null;
}