/// <inheritdoc/> public bool Transformation(QsCompilation compilation, out QsCompilation transformed) { // random "diagnostic" to check if diagnostics loading works this.GeneratedDiagnostics = new List <IRewriteStep.Diagnostic>() { new IRewriteStep.Diagnostic { Severity = CodeAnalysis.DiagnosticSeverity.Info, Message = "Invokation of the Q# compiler extension for C# generation to demonstrate execution on the simulation framework.", } }; var success = true; var outputFolder = this.AssemblyConstants.TryGetValue(ReservedKeywords.AssemblyConstants.OutputPath, out var path) ? path : null; var allSources = GetSourceFiles.Apply(compilation.Namespaces) // also generate the code for referenced libraries... // ... except when they are one of the packages that currently still already contains the C# code (temporary workaround): .Where(s => !Path.GetFileName(s).StartsWith("Microsoft.Quantum")); foreach (var source in allSources) { var content = SimulationCode.generate(source, CodegenContext.Create(compilation.Namespaces)); try { CompilationLoader.GeneratedFile(source, outputFolder ?? this.Name, ".g.cs", content); } catch { success = false; } } transformed = compilation; return(success); }
private static void GenerateFromBinary(string outputFolder, string pathToBinary) { CompilationLoader.ReadBinary(pathToBinary, out var syntaxTree); var allSources = GetSourceFiles.Apply(syntaxTree); // also generate the code for referenced libraries foreach (var source in allSources) { var content = SimulationCode.generate(source, syntaxTree); CompilationLoader.GeneratedFile(source, outputFolder, ".g.cs", content); } }
private static void GenerateFromBinary(string outputFolder, string pathToBinary) { var syntaxTree = CompilationLoader.ReadBinary(pathToBinary).ToArray(); var allSources = GetSourceFiles.Apply(syntaxTree).Where(file => file.Value.EndsWith(".qs")); foreach (var source in allSources) { var content = SimulationCode.generate(source, syntaxTree); CompilationLoader.GeneratedFile(source, outputFolder, ".g.cs", content); } }
public bool Transformation(QsCompilation compilation, out QsCompilation transformed) { var success = true; var allSources = GetSourceFiles.Apply(compilation.Namespaces) // also generate the code for referenced libraries... // ... except when they are one of the packages that currently still already contains the C# code (temporary workaround): .Where(s => !Path.GetFileName(s.Value).StartsWith("Microsoft.Quantum")); foreach (var source in allSources) { var content = SimulationCode.generate(source, compilation.Namespaces); try { CompilationLoader.GeneratedFile(source, this.OutputFolder ?? this.Name, ".g.cs", content); } catch { success = false; } } transformed = compilation; return(success); }
public bool Transformation(QsCompilation compilation, out QsCompilation transformed) { var context = CodegenContext.Create(compilation, _assemblyConstants); var sources = GetSourceFiles.Apply(compilation.Namespaces); foreach (var source in sources.Where(s => !s.Value.EndsWith(".dll", StringComparison.OrdinalIgnoreCase))) { var content = SimulationCode.generate(source, context); GeneratedFiles.Add(source.Value, content); } if (!compilation.EntryPoints.IsEmpty) { var callable = context.allCallables.First(c => c.Key == compilation.EntryPoints.First()).Value; var content = EntryPoint.generate(context, callable); NonNullable <string> entryPointName = NonNullable <string> .New(callable.SourceFile.Value + ".EntryPoint"); GeneratedFiles.Add(entryPointName.Value, content); } transformed = compilation; return(true); }