Esempio n. 1
0
 public TypeIgnoreChecker(ITypeMapDatabase database,
                          GeneratorKind generatorKind = GeneratorKind.CSharp)
 {
     TypeMapDatabase = database;
     VisitOptions.ClearFlags(VisitFlags.ClassBases | VisitFlags.TemplateArguments);
     this.generatorKind = generatorKind;
 }
Esempio n. 2
0
 public CCodeGenerator(BindingContext context,
                       IEnumerable <TranslationUnit> units = null)
     : base(context, units)
 {
     VisitOptions.SetFlags(VisitFlags.PropertyAccessors);
     typePrinter = new CppTypePrinter(context);
 }
Esempio n. 3
0
 protected CSharpMarshalPrinter(CSharpMarshalContext context)
     : base(context)
 {
     VisitOptions.ClearFlags(VisitFlags.FunctionParameters |
                             VisitFlags.TemplateArguments);
 }
Esempio n. 4
0
        public override void Process()
        {
            GenerateFilePreamble(CommentKind.BCPL);

            PushBlock(BlockKind.Includes);
            {
                WriteInclude("CppSharp_QuickJS.h", CInclude.IncludeKind.Angled);
                WriteInclude("assert.h", CInclude.IncludeKind.Angled);

                foreach (var unit in TranslationUnits)
                {
                    WriteInclude(unit.IncludePath, CInclude.IncludeKind.Angled);
                }

                NewLine();
            }
            PopBlock();

            WriteLine("extern \"C\" {");
            NewLine();

            GenerateExternClassIds();

            var registerGen = new QuickJSRegister(Context, TranslationUnits);

            registerGen.Process();
            WriteLine(registerGen.Generate());

            PushBlock();
            {
                var name = GetTranslationUnitName(TranslationUnit);
                WriteLine($"void register_{name}(JSContext *ctx, JSModuleDef *m, bool set, int phase)");
                WriteOpenBraceAndIndent();

                Block registerBlock;
                PushBlock();
                {
                    WriteLine("if (phase == 0)");

                    WriteOpenBraceAndIndent();
                    {
                        PushBlock();
                        VisitOptions.ClearFlags(VisitFlags.NamespaceClasses);
                        TranslationUnit.Visit(this);
                        registerBlock = PopBlock();
                    }
                    UnindentAndWriteCloseBrace();
                }
                var phase0Block = PopBlock(NewLineKind.IfNotEmpty);
                phase0Block.CheckGenerate = () => !registerBlock.IsEmpty;

                PushBlock();
                {
                    VisitOptions.ResetFlags(VisitFlags.Default);
                    VisitOptions.SetFlags(VisitFlags.NamespaceClasses);
                    TranslationUnit.Visit(this);
                }
                PopBlock(NewLineKind.IfNotEmpty);

                UnindentAndWriteCloseBrace();
            }
            PopBlock(NewLineKind.BeforeNextBlock);
            NewLine();

            WriteLine("} // extern \"C\"");
        }