Exemple #1
0
 public void ProcessUnit(GeneratorOutput output)
 {
     foreach (var template in output.Templates)
     {
         WriteHeader(template.FindBlock(BlockKind.Header).Text);
     }
 }
Exemple #2
0
        public IList <float> EvaluateOne(float[] noise, float[] condition)
        {
            //input data maps
            var inputDataMap = new Dictionary <Variable, Value>();

            if (InputConditionSize > 0)
            {
                Value inputConditiondata = Value.CreateBatch(InputConditionGenerator.Shape, condition, Device, true);
                inputDataMap.Add(InputConditionGenerator, inputConditiondata);
            }
            if (InputNoiseSize > 0)
            {
                Value inputNoisedata = Value.CreateBatch(InputNoiseGenerator.Shape, noise, Device, true);
                inputDataMap.Add(InputNoiseGenerator, inputNoisedata);
            }

            //output datamaps
            var outputDataMap = new Dictionary <Variable, Value>()
            {
                { GeneratorOutput, null }
            };


            GeneratorOutput.ToFunction().Evaluate(inputDataMap, outputDataMap, Device);
            var result = outputDataMap[GeneratorOutput].GetDenseData <float>(GeneratorOutput);

            return(result[0]);
        }
        public GeneratorOutput GeneratePremake(Module module)
        {
            if (module == Context.Options.SystemModule)
            {
                return(null);
            }

            var premakeGen = new QuickJSPremakeBuildGenerator(Context, module);

            var output = new GeneratorOutput
            {
                TranslationUnit = new TranslationUnit
                {
                    FilePath = "premake5.lua",
                    Module   = module
                },
                Outputs = new List <CodeGenerator> {
                    premakeGen
                }
            };

            output.Outputs[0].Process();

            return(output);
        }
 private void OnUnitGenerated(GeneratorOutput output)
 {
     needsStreamInclude = false;
     foreach (var template in output.Outputs)
     {
         foreach (var block in template.FindBlocks(CLIBlockKind.MethodBody))
         {
             var method = block.Object as Method;
             VisitMethod(method, block);
         }
         if (needsStreamInclude)
         {
             var sourcesTemplate = template as CLISources;
             if (sourcesTemplate != null)
             {
                 foreach (var block in sourcesTemplate.FindBlocks(CLIBlockKind.Includes))
                 {
                     block.WriteLine("#include <sstream>");
                     block.WriteLine("");
                     break;
                 }
                 break;
             }
         }
     }
 }
        public override GeneratorOutput GenerateModule(Module module)
        {
            if (module == Context.Options.SystemModule)
            {
                return(null);
            }

            var moduleGen = new NAPIModule(Context, module);

            var output = new GeneratorOutput
            {
                TranslationUnit = new TranslationUnit
                {
                    FilePath = $"{module.LibraryName}.cpp",
                    Module   = module
                },
                Outputs = new List <CodeGenerator> {
                    moduleGen
                }
            };

            output.Outputs[0].Process();

            return(output);
        }
Exemple #6
0
 public virtual void VisitGeneratorOutput(GeneratorOutput output)
 {
     foreach (var generator in output.Outputs)
     {
         VisitCodeGenerator(generator);
     }
 }
Exemple #7
0
        public IEnumerable <GeneratorOutput> GenerateOutputs(Spec spec)
        {
            var targetInfo = spec.Targets[Constants.CSharpTarget];
            var result     = new GeneratorOutput[spec.Enums.Count + spec.Entities.Count];
            var index      = 0;

            foreach (var @enum in spec.Enums)
            {
                result[index++] =
                    new GeneratorOutput
                {
                    Path           = Path.Combine(targetInfo.Path, GetFilename(@enum.Key, targetInfo.AppendGeneratedExtension) + "." + Constants.CSharpExtension),
                    GenerationRoot = GenerateEnum(spec, @enum.Key)
                };
            }

            foreach (var entity in spec.Entities)
            {
                result[index++] =
                    new GeneratorOutput
                {
                    Path           = Path.Combine(targetInfo.Path, GetFilename(entity.Key, targetInfo.AppendGeneratedExtension) + "." + Constants.CSharpExtension),
                    GenerationRoot = GenerateEntity(spec, entity.Key)
                };
            }

            return(result);
        }
Exemple #8
0
        public override void VisitGeneratorOutput(GeneratorOutput output)
        {
            var blocks = output.Outputs.SelectMany(i => i.FindBlocks(BlockKind.Unknown));

            foreach (var block in blocks)
            {
                block.Text.StringBuilder.Replace("cimgui_impl", "ImGui");
                block.Text.StringBuilder.Replace("cimgui", "ImGui");
            }
        }
 private void OnUnitGenerated(GeneratorOutput output)
 {
     foreach (var template in output.Templates)
     {
         foreach (var block in template.FindBlocks(CLIBlockKind.MethodBody))
         {
             var method = block.Declaration as Method;
             VisitMethod(method, block);
         }
     }
 }
Exemple #10
0
        public override void VisitGeneratorOutput(GeneratorOutput output)
        {
            foreach (var template in output.Templates)
            {
                var blocks = template.FindBlocks(CLIBlockKind.MethodBody);

                foreach (var block in blocks)
                {
                    VisitMethodBody(block);
                }
            }
        }
        public IEnumerable <GeneratorOutput> GenerateOutputs(Spec spec)
        {
            var targetInfo     = spec.Targets[Constants.TypeScriptTarget];
            var barrelContents = new List <TypeScriptDeclarationOrStatement>();
            var typeCount      = spec.Enums.Count + spec.Entities.Count;

            if (typeCount == 0)
            {
                return(Enumerable.Empty <GeneratorOutput>());
            }

            var result = new GeneratorOutput[typeCount + 1];
            var index  = 0;

            foreach (var @enum in spec.Enums)
            {
                var enumOutput = GenerateEnum(spec, @enum.Key);
                result[index++] = enumOutput;
                barrelContents.Add(new TypeScriptReExportStatement {
                    FileName = Path.GetFileNameWithoutExtension(enumOutput.Path)
                });
            }

            foreach (var entity in spec.Entities)
            {
                var entityFileName = TypeScriptFileUtilities.GetFileName(entity.Key, targetInfo.AppendGeneratedExtension);
                result[index++] =
                    new GeneratorOutput
                {
                    Path           = Path.Combine(targetInfo.Path, entityFileName + "." + Constants.TypeScriptExtension),
                    GenerationRoot = GenerateEntity(spec, entity.Key)
                };

                barrelContents.Add(new TypeScriptReExportStatement {
                    FileName = entityFileName
                });
            }

            result[index++] =
                new GeneratorOutput
            {
                // index.ts must always have '.ts' extension. '.generated.ts' is not applicable here
                // because it won't be recognized by module definition
                Path           = Path.Combine(targetInfo.Path, Path.ChangeExtension("index", Constants.TypeScriptExtension)),
                GenerationRoot = new TypeScriptFile {
                    Contents = barrelContents
                }
            };

            return(result);
        }
Exemple #12
0
 private void SetGeneratorInOutputGenerationList(GeneratorOutput incomingGeneratorOutput)
 {
     if (_lsFinalGenOutput.Any(x => x.Name.Equals(incomingGeneratorOutput.Name, StringComparison.CurrentCultureIgnoreCase)))
     {
         var index        = _lsFinalGenOutput.FindIndex(generator => string.Equals(generator.Name, incomingGeneratorOutput.Name, StringComparison.CurrentCultureIgnoreCase));
         var updatedValue = new GeneratorOutput
         {
             Name  = incomingGeneratorOutput.Name,
             Total = _lsFinalGenOutput[index].Total + incomingGeneratorOutput.Total
         };
         _lsFinalGenOutput[index] = updatedValue;
     }
     else
     {
         _lsFinalGenOutput.Add(incomingGeneratorOutput);
     }
 }
        public GeneratorOutput GenerateHelpers()
        {
            var helpersGen = new NAPIHelpers(Context);

            helpersGen.Process();

            var output = new GeneratorOutput
            {
                TranslationUnit = new TranslationUnit {
                    FilePath = "NAPIHelpers.h"
                },
                Outputs = new List <CodeGenerator> {
                    helpersGen
                }
            };

            return(output);
        }
Exemple #14
0
        private void OnUnitGenerated(GeneratorOutput generatorOutput)
        {
            var blocks = (from output in generatorOutput.Outputs
                          from block in output.FindBlocks(BlockKind.Method)
                          where this.events.Contains(block.Object)
                          select block).ToList();

            foreach (var block in blocks)
            {
                var    method = (Function)block.Object;
                string @event;
                if (((Class)method.Namespace).Methods.Any(m => m != method && m.OriginalName == method.OriginalName))
                {
                    @event = method.OriginalName;
                }
                else
                {
                    @event = char.ToUpperInvariant(method.OriginalName[0]) + method.OriginalName.Substring(1);
                }
                var blockIndex = block.Parent.Blocks.IndexOf(block);
                var eventBlock = new Block(BlockKind.Event);
                eventBlock.WriteLine("public event global::System.Action<object, {0}> {1};",
                                     method.Parameters[0].Type, @event);
                eventBlock.NewLine();
                const string eventHandler = @"__eventHandler";
                var          raiseEvent   = string.Format(
                    @"var {0} = {1};
    if ({0} != null)
        {0}(this, {2});
    if ({2}.Handled)
        return{3};
",
                    eventHandler, @event, method.Parameters[0].Name,
                    method.OriginalReturnType.Type.IsPrimitiveType(PrimitiveType.Void) ? string.Empty : " true");
                if (block.Blocks.Count > 0 && block.Blocks[0].Kind == BlockKind.BlockComment)
                {
                    eventBlock.Blocks.Add(block.Blocks[0]);
                }
                block.Parent.Blocks.Insert(blockIndex, eventBlock);
                block.Text.StringBuilder.Replace("var __slot", raiseEvent + "    var __slot");
            }
        }
Exemple #15
0
        public override void VisitGeneratorOutput(GeneratorOutput output)
        {
            var blocks = output.Outputs.SelectMany(i => i.FindBlocks(BlockKind.Unknown));

            foreach (var namespaceBlock in blocks)
            {
                if (namespaceBlock.Parent.Kind == BlockKind.Class)
                {
                    foreach (var classBlock in namespaceBlock.Parent.Blocks)
                    {
                        ProcessClassBlock(classBlock);
                    }
                }
                else if (namespaceBlock.Parent.Kind == BlockKind.InternalsClass)
                {
                    foreach (var classBlock in namespaceBlock.Parent.Blocks)
                    {
                        ProcessClassBlock(classBlock.Parent);
                    }
                }
            }
        }
Exemple #16
0
        private Totals TotalGeneratorsOutputPerDay(GenerationReport reportGenerated)
        {
            foreach (var item in reportGenerated.wind.windGenerator)
            {
                var windGen = new GeneratorOutput
                {
                    Name  = item.name,
                    Total = item.generation.day.Sum(x => x.energy * x.price * GetGeneratorFactorMapping(item.name).valueFactor)
                };
                SetGeneratorInOutputGenerationList(windGen);
            }
            foreach (var item in reportGenerated.gas.gasGenerator)
            {
                var gasGen = new GeneratorOutput
                {
                    Name  = item.name,
                    Total = item.generation.day.Sum(x => x.energy * x.price * GetGeneratorFactorMapping(item.name).valueFactor)
                };
                SetGeneratorInOutputGenerationList(gasGen);
            }

            foreach (var item in reportGenerated.coal.coalGenerator)
            {
                var coalGen = new GeneratorOutput
                {
                    Name  = item.name,
                    Total = item.generation.day.Sum(x => x.energy * x.price * GetGeneratorFactorMapping(item.name).valueFactor)
                };
                SetGeneratorInOutputGenerationList(coalGen);
            }
            var totals = new Totals();

            return(new Totals()
            {
                GeneratorOutput = _lsFinalGenOutput
            });
        }
Exemple #17
0
        private void GenerateSignalEvents(GeneratorOutput generatorOutput)
        {
            foreach (var block in from output in generatorOutput.Outputs
                     from block in output.FindBlocks(BlockKind.Event)
                     select block)
            {
                Event @event = (Event)block.Object;
                if (this.events.Contains(@event))
                {
                    block.Text.StringBuilder.Clear();
                    Class @class = (Class)@event.Namespace;

                    int           argNum          = 1;
                    StringBuilder fullNameBuilder = new StringBuilder("global::System.Action");
                    foreach (Parameter parameter in @event.Parameters)
                    {
                        argNum++;
                        if (argNum == 2)
                        {
                            fullNameBuilder.Append('<');
                        }
                        fullNameBuilder.Append(parameter.Type);
                        fullNameBuilder.Append(',');
                    }
                    if (fullNameBuilder[fullNameBuilder.Length - 1] == ',')
                    {
                        fullNameBuilder[fullNameBuilder.Length - 1] = '>';
                    }
                    string signature = string.Format("{0}({1})", @event.OriginalName,
                                                     string.Join(", ",
                                                                 from e in @event.Parameters
                                                                 select GetOriginalParameterType(e)));
                    Event existing = @class.Events.FirstOrDefault(e => e.Name == @event.Name);
                    if (existing != null && existing != @event)
                    {
                        if (@event.Parameters.Count > 0)
                        {
                            @event.Name += GetSignalEventSuffix(@event);
                        }
                        else
                        {
                            existing.Name += GetSignalEventSuffix(@event);
                        }
                    }
                    else
                    {
                        if (@event.Parameters.Count > 0 &&
                            (@class.Methods.Any(m => m.IsGenerated && m.OriginalName == @event.Name) ||
                             @class.Properties.Any(p => p.IsGenerated && p.OriginalName == @event.Name)))
                        {
                            @event.Name += GetSignalEventSuffix(@event);
                        }
                    }
                    if (@event.OriginalDeclaration.Comment != null)
                    {
                        block.WriteLine("/// <summary>");
                        foreach (string line in HtmlEncoder.HtmlEncode(@event.OriginalDeclaration.Comment.BriefText).Split(
                                     Environment.NewLine.ToCharArray()))
                        {
                            block.WriteLine("/// <para>{0}</para>", line);
                        }
                        block.WriteLine("/// </summary>");
                    }
                    var finalName = char.ToUpperInvariant(@event.Name[0]) + @event.Name.Substring(1);
                    if (@event.Namespace.Declarations.Exists(d => d != @event && d.Name == finalName))
                    {
                        finalName += "Signal";
                    }
                    block.WriteLine(string.Format(@"public event {0} {1}
{{
	add
	{{
        ConnectDynamicSlot(this, ""{2}"", value);
	}}
	remove
	{{
        DisconnectDynamicSlot(this, ""{2}"", value);
	}}
}}", fullNameBuilder, finalName, signature));
                }
            }
            var qtMetacall = (from output in generatorOutput.Outputs
                              from block in output.FindBlocks(BlockKind.Method)
                              let declaration = block.Object as Declaration
                                                where declaration != null && declaration.Name == "QtMetacall" &&
                                                declaration.Namespace.Name == "QObject"
                                                select block).FirstOrDefault();

            if (qtMetacall != null)
            {
                qtMetacall.Text.StringBuilder.Replace("return __ret;", "return HandleQtMetacall(__ret, _0, _2);");
            }
        }
        private void OnUnitGenerated(GeneratorOutput generatorOutput)
        {
            foreach (Block block in from template in generatorOutput.Templates
                     from block in template.FindBlocks(CSharpBlockKind.Event)
                     select block)
            {
                Event @event = (Event)block.Declaration;
                if (this.events.Contains(@event))
                {
                    block.Text.StringBuilder.Clear();
                    Class @class = (Class)@event.Namespace;
                    if (!this.addedEventHandlers && @class.Name == "QObject")
                    {
                        block.WriteLine("protected readonly System.Collections.Generic.List<QEventHandler> " +
                                        "eventFilters = new System.Collections.Generic.List<QEventHandler>();");
                        block.NewLine();
                        this.addedEventHandlers = true;
                    }
                    bool isQAbstractScrollArea = @class.Name != "QAbstractScrollArea";
                    if (@event.OriginalDeclaration.Comment != null)
                    {
                        block.WriteLine("/// <summary>");
                        foreach (string line in HtmlEncoder.HtmlEncode(@event.OriginalDeclaration.Comment.BriefText).Split(
                                     Environment.NewLine.ToCharArray()))
                        {
                            block.WriteLine("/// <para>{0}</para>", line);
                        }
                        block.WriteLine("/// </summary>");
                    }
                    block.WriteLine(@"public {0} event EventHandler<QEventArgs<{1}>> {2}
{{
	add
	{{
		QEventArgs<{1}> qEventArgs = new QEventArgs<{1}>(new System.Collections.Generic.List<QEvent.Type> {{ {3} }});
		QEventHandler<{1}> qEventHandler = new QEventHandler<{1}>(this{4}, qEventArgs, value);
        foreach (QEventHandler eventFilter in eventFilters)
        {{
            this{4}.RemoveEventFilter(eventFilter);
        }}
		eventFilters.Add(qEventHandler);
        for (int i = eventFilters.Count - 1; i >= 0; i--)
        {{
		    this{4}.InstallEventFilter(eventFilters[i]);                    
        }}
	}}
	remove
	{{
		for (int i = eventFilters.Count - 1; i >= 0; i--)
		{{
			QEventHandler eventFilter = eventFilters[i];
			if (eventFilter.Handler == value)
			{{
				this{4}.RemoveEventFilter(eventFilter);
				eventFilters.RemoveAt(i);
                break;
			}}
		}}
	}}
}}",
                                    isQAbstractScrollArea ? "virtual" : "override", @event.Parameters[0].Type, @event.Name,
                                    this.GetEventTypes(@event), isQAbstractScrollArea ? string.Empty : ".Viewport");
                }
            }
        }
Exemple #19
0
        private void GenerateSignalEvents(GeneratorOutput generatorOutput)
        {
            foreach (Block block in from template in generatorOutput.Templates
                     from block in template.FindBlocks(CSharpBlockKind.Event)
                     select block)
            {
                Event @event = (Event)block.Declaration;
                if (this.events.Contains(@event))
                {
                    block.Text.StringBuilder.Clear();
                    Class @class = (Class)@event.Namespace;

                    int           argNum          = 1;
                    StringBuilder fullNameBuilder = new StringBuilder("Action");
                    foreach (Parameter parameter in @event.Parameters)
                    {
                        argNum++;
                        if (argNum == 2)
                        {
                            fullNameBuilder.Append('<');
                        }
                        fullNameBuilder.Append(parameter.Type);
                        fullNameBuilder.Append(',');
                    }
                    if (fullNameBuilder[fullNameBuilder.Length - 1] == ',')
                    {
                        fullNameBuilder[fullNameBuilder.Length - 1] = '>';
                    }
                    string signature = string.Format("{0}({1})", @event.OriginalName,
                                                     string.Join(", ",
                                                                 from e in @event.Parameters
                                                                 select GetOriginalParameterType(e)));
                    Event existing = @class.Events.FirstOrDefault(e => e.Name == @event.Name);
                    if (existing != null && existing != @event)
                    {
                        if (@event.Parameters.Count > 0)
                        {
                            @event.Name += GetSignalEventSuffix(@event);
                        }
                        else
                        {
                            existing.Name += GetSignalEventSuffix(@event);
                        }
                    }
                    else
                    {
                        if (@event.Parameters.Count > 0 &&
                            (@class.Methods.Any(m => m.IsGenerated && m.OriginalName == @event.Name) ||
                             @class.Properties.Any(p => p.IsGenerated && p.OriginalName == @event.Name)))
                        {
                            @event.Name += GetSignalEventSuffix(@event);
                        }
                    }
                    if (@event.OriginalDeclaration.Comment != null)
                    {
                        block.WriteLine("/// <summary>");
                        foreach (string line in HtmlEncoder.HtmlEncode(@event.OriginalDeclaration.Comment.BriefText).Split(
                                     Environment.NewLine.ToCharArray()))
                        {
                            block.WriteLine("/// <para>{0}</para>", line);
                        }
                        block.WriteLine("/// </summary>");
                    }
                    block.WriteLine(string.Format(@"public event {0} {1}
{{
	add
	{{
        ConnectDynamicSlot(this, ""{2}"", value);
	}}
	remove
	{{
        DisconnectDynamicSlot(this, ""{2}"", value);
	}}
}}", fullNameBuilder, char.ToUpperInvariant(@event.Name[0]) + @event.Name.Substring(1), signature));
                }
            }
            foreach (Block block in from template in generatorOutput.Templates
                     from block in template.FindBlocks(CSharpBlockKind.Method)
                     where block.Declaration != null && block.Declaration.Name == "Qt_metacall"
                     select block)
            {
                block.Text.StringBuilder.Clear();
                block.WriteLine(@"public {0} unsafe int Qt_metacall(QMetaObject.Call call, int id, void** arguments)
{{
    var index = Internal.Qt_metacall_0({1}, call, id, arguments);

    return HandleQtMetacall(index, call, arguments);
}}", block.Declaration.Namespace.Name == "QObject" ? "virtual" : "override", Helpers.InstanceIdentifier);
            }
        }
Exemple #20
0
 private void OnUnitGenerated(GeneratorOutput generatorOutput)
 {
     this.GenerateSignalEvents(generatorOutput);
 }
        public void TestGenerateOutputWithClass()
        {
            // arrange
            var spec =
                new Spec
            {
                Entities = new Dictionary <string, EntityInfo>
                {
                    {
                        "blog_entry",
                        new EntityInfo
                        {
                            Members =
                                new OrderedDictionary <string, IEntityMemberInfo>
                            {
                                { "id", new EntityMemberInfo {
                                      Type = "int"
                                  } },
                                { "title", new EntityMemberInfo {
                                      Type = "string"
                                  } }
                            }
                        }
                    }
                },
                Targets = new Dictionary <string, TargetInfo>
                {
                    { Constants.TypeScriptTarget, new TargetInfo {
                          Path = "some_path"
                      } }
                }
            };

            var typeScriptFiles =
                new GeneratorOutput[]
            {
                new GeneratorOutput
                {
                    Path           = Path.Combine("some_path", "blog-entry.ts"),
                    GenerationRoot =
                        TypeScriptFileBuilder.Start()
                        .Content(
                            TypeScriptExportStatementBuilder.Start()
                            .DefaultExport(
                                TypeScriptClassBuilder.Start()
                                .Name("BlogEntry")
                                .Member("id", "number")
                                .Member("title", "string").Build()
                                )
                            .Build())
                        .Build()
                },
                new GeneratorOutput
                {
                    Path           = Path.Combine("some_path", "index.ts"),
                    GenerationRoot =
                        TypeScriptFileBuilder.Start()
                        .Content(new TypeScriptReExportStatement {
                        FileName = "blog-entry"
                    })
                        .Build()
                }
            };
            var ammendment = new AmmendmentFactory().CreateAmmendment(Constants.TypeScriptTarget);

            ammendment.AmmedSpecification(spec);
            var generator = new TypeScriptGenerator();

            // act
            var outputs = generator.GenerateOutputs(spec);

            // assert
            Assert.NotNull(outputs);
            Assert.True(outputs.SequenceEqual(typeScriptFiles, EqualityComparer <GeneratorOutput> .Default));
        }
Exemple #22
0
 public virtual void VisitGeneratorOutput(GeneratorOutput output)
 {
 }
Exemple #23
0
 private void OnUnitGenerated(GeneratorOutput output)
 {
 }