コード例 #1
0
        /// <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);
            }
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: sw23/qsharp-compiler
        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);
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }