/// <summary> /// Prints a stored representation of each application in the compound that has its "request_dump" flag set. /// </summary> public void PrintCompound() { var tasks = Application.Compound.Where(app => app.Meta[DumpRequestFlag].Switch).Select( app => new KeyValuePair<ModuleName, Task<ITarget>>(app.Module.Name, ModuleCache.BuildAsync(app.Module.Name))) .ToDictionary(k => k.Key, k => k.Value); foreach (var entry in tasks) { var name = entry.Key; var target = entry.Value.Result; Console.WriteLine(); Console.WriteLine("################################## begin of stored representation for {0} ",name); var opt = new LoaderOptions(Engine, new Application(target.Module), target.Symbols) {ReconstructSymbols = false, RegisterCommands = false, StoreSymbols = true}; var ldr = new Loader(opt); ldr.Store(Console.Out); Console.WriteLine("################################## end of stored representation for {0} ----------", name); } }
/// <summary> /// Writes the application to the supplied <paramref name = "writer" /> using the default settings. /// </summary> /// <param name = "writer">The <see cref = "TextWriter" /> to write the application to.</param> /// <remarks> /// <para> /// <c>Store</c> is always superior to <see cref = "StoreInString" />. /// </para> /// <example> /// <para> /// If you want to write the application to stdout, use <see cref = "Store" /> and not <see /// cref = "StoreInString" /> like in the following example: /// </para> /// <code> /// public void WriteApplicationToStdOut(Application app) /// { /// app.Store(Console.Out); /// //instead of /// // Console.Write(app.StoreInString()); /// } /// </code> /// <para> /// By using the <see cref = "Store" />, everything Prexonite assembles is immedeately sent to stdout. /// </para> /// </example> /// </remarks> public void Store(TextWriter writer) { //Create a crippled engine for this process var eng = new Engine {ExecutionProhibited = true}; var ldr = new Loader(eng, this); ldr.Store(writer); }