Example #1
0
        public override void Preprocess(Driver driver, ASTContext ctx)
        {
            ctx.SetClassAsValueType("TestCopyConstructorVal");
            ctx.SetClassAsValueType("QGenericArgument");
            ctx.SetClassAsValueType("StructWithPrivateFields");
            ctx.SetClassAsValueType("QPoint");
            ctx.SetClassAsValueType("QSize");
            ctx.SetClassAsValueType("QRect");
            ctx.SetClassAsValueType("CSharp");
            ctx.SetClassAsValueType("StructTestArrayTypeFromTypedef");
            ctx.IgnoreClassWithName("IgnoredTypeInheritingNonIgnoredWithNoEmptyCtor");
            ctx.IgnoreClassWithName("Ignored");

            var macroRegex = new Regex("(MY_MACRO_TEST_.*)");
            var list       = (from unit in ctx.TranslationUnits
                              where !unit.IsValid || unit.FileName == "CSharp.h"
                              from macro in unit.PreprocessedEntities.OfType <MacroDefinition>()
                              where macroRegex.IsMatch(macro.Name)
                              select macro.Name).ToList();
            var enumTest = ctx.GenerateEnumFromMacros("MyMacroTestEnum", list.ToArray());

            var enumTest2 = ctx.GenerateEnumFromMacros("MyMacroTest2Enum", "MY_MACRO_TEST2_*");

            enumTest.Namespace = new Namespace()
            {
                Name      = "MacroTest",
                Namespace = ctx.TranslationUnits.First(u => u.IsValid && !u.IsSystemHeader)
            };
        }
Example #2
0
        public override void Preprocess(Driver driver, ASTContext ctx)
        {
            ctx.SetClassAsValueType("TestCopyConstructorVal");
            ctx.SetClassAsValueType("QGenericArgument");
            ctx.SetClassAsValueType("StructWithPrivateFields");
            ctx.SetClassAsValueType("QPoint");
            ctx.SetClassAsValueType("QSize");
            ctx.SetClassAsValueType("QRect");
            ctx.SetClassAsValueType("CSharp");
            ctx.SetClassAsValueType("StructTestArrayTypeFromTypedef");
            ctx.IgnoreClassWithName("IgnoredTypeInheritingNonIgnoredWithNoEmptyCtor");
            ctx.IgnoreClassWithName("Ignored");

            var macroRegex = new Regex("(MY_MACRO_TEST_.*)");
            var list       = (from unit in ctx.TranslationUnits
                              where !unit.IsValid || unit.FileName == "CSharp.h"
                              from macro in unit.PreprocessedEntities.OfType <MacroDefinition>()
                              where macroRegex.IsMatch(macro.Name)
                              select macro.Name).ToList();
            var enumTest = ctx.GenerateEnumFromMacros("MyMacroTestEnum", list.ToArray());

            ctx.GenerateEnumFromMacros("MyMacroTest2Enum", "MY_MACRO_TEST2_.*");
            ctx.GenerateEnumFromMacros("SignedMacroValuesToEnumTest", "SIGNED_MACRO_VALUES_TO_ENUM_TEST_.*");
            ctx.GenerateEnumFromMacros("TestBoolValuedEnums", "TEST_BOOL_VALUED_ENUMS_.*");

            enumTest.Namespace = new Namespace()
            {
                Name      = "MacroTest",
                Namespace = ctx.TranslationUnits.First(u => u.IsValid && !u.IsSystemHeader)
            };

            // Preserve the original semantics except for our one test class.
            driver.Options.ZeroAllocatedMemory = (@class) => @class.Name == "ClassZeroAllocatedMemoryTest";
        }
Example #3
0
        public override void Preprocess(Driver driver, ASTContext ctx)
        {
            ctx.SetClassAsValueType("TestCopyConstructorVal");
            ctx.SetClassAsValueType("QGenericArgument");
            ctx.SetClassAsValueType("StructWithPrivateFields");
            ctx.SetClassAsValueType("QPoint");
            ctx.SetClassAsValueType("QSize");
            ctx.SetClassAsValueType("QRect");
            ctx.SetClassAsValueType("StructTestArrayTypeFromTypedef");
            ctx.IgnoreClassWithName("IgnoredTypeInheritingNonIgnoredWithNoEmptyCtor");

            var           macroRegex = new Regex(@"(MY_MACRO_TEST_.*)");
            List <string> list       = new List <string>();

            foreach (TranslationUnit unit in ctx.TranslationUnits)
            {
                if (unit.FilePath == "<invalid>" || unit.FileName == "CSharp.h")
                {
                    foreach (var macro in unit.PreprocessedEntities.OfType <MacroDefinition>())
                    {
                        Match match = macroRegex.Match(macro.Name);
                        if (match.Success)
                        {
                            list.Add(macro.Name);
                        }
                    }
                }
            }
            var enumTest = ctx.GenerateEnumFromMacros("MyMacroTestEnum", list.ToArray());

            enumTest.Namespace = new Namespace()
            {
                Name = "MacroTest"
            };
        }
Example #4
0
        public override void Preprocess(Driver driver, ASTContext ctx)
        {
            ctx.SetClassAsValueType("TestCopyConstructorVal");
            ctx.SetClassAsValueType("QGenericArgument");

            ctx.IgnoreClassWithName("IgnoredTypeInheritingNonIgnoredWithNoEmptyCtor");
        }
Example #5
0
 public override void Preprocess(Driver driver, ASTContext ctx)
 {
     driver.AddTranslationUnitPass(new GetterSetterToPropertyPass());
     driver.AddTranslationUnitPass(new CheckMacroPass());
     ctx.SetClassAsValueType("Bar");
     ctx.SetClassAsValueType("Bar2");
     ctx.IgnoreClassWithName("IgnoredType");
 }
Example #6
0
 public override void Preprocess(Driver driver, ASTContext ctx)
 {
     driver.AddTranslationUnitPass(new GetterSetterToPropertyPass());
     driver.AddTranslationUnitPass(new CheckMacroPass());
     ctx.SetClassAsValueType("Bar");
     ctx.SetClassAsValueType("Bar2");
     ctx.IgnoreClassWithName("IgnoredType");
 }
Example #7
0
        public override void Preprocess(Driver driver, ASTContext ctx)
        {
            ctx.SetClassAsValueType("TestCopyConstructorVal");
            ctx.SetClassAsValueType("QGenericArgument");
            ctx.SetClassAsValueType("StructWithPrivateFields");
            ctx.SetClassAsValueType("QSize");

            ctx.IgnoreClassWithName("IgnoredTypeInheritingNonIgnoredWithNoEmptyCtor");
        }
Example #8
0
        public override void Preprocess(Driver driver, ASTContext ctx)
        {
            ctx.SetClassAsValueType("Bar");
            ctx.SetClassAsValueType("Bar2");
            ctx.IgnoreClassWithName("IgnoredType");

            ctx.FindCompleteClass("Foo").Enums.First(
                e => string.IsNullOrEmpty(e.Name)).Name = "RenamedEmptyEnum";
        }
Example #9
0
 public override void Preprocess(Driver driver, ASTContext ctx)
 {
     ctx.IgnoreClassWithName("Ignored");
     // operator= for this type isn't necessary for testing
     // while also requiring a large amount of C++ to get valid symbols; better ignore
     foreach (Method @operator in ctx.FindCompleteClass("StdFields").Operators)
     {
         @operator.ExplicitlyIgnore();
     }
 }
Example #10
0
        public override void Preprocess(Driver driver, ASTContext ctx)
        {
            driver.AddTranslationUnitPass(new CheckMacroPass());
            ctx.SetClassAsValueType("Bar");
            ctx.SetClassAsValueType("Bar2");
            ctx.IgnoreClassWithName("IgnoredType");

            ctx.FindCompleteClass("Foo").Enums.First(
                e => string.IsNullOrEmpty(e.Name)).Name = "RenamedEmptyEnum";
        }
Example #11
0
        public override void Preprocess(Driver driver, ASTContext ctx)
        {
            driver.AddTranslationUnitPass(new GetterSetterToPropertyPass());
            driver.AddTranslationUnitPass(new CheckMacroPass());
            ctx.SetClassAsValueType("Bar");
            ctx.SetClassAsValueType("Bar2");
            ctx.IgnoreClassWithName("IgnoredType");

            ctx.FindCompleteClass("Foo").Enums.First(
                e => string.IsNullOrEmpty(e.Name)).Name = "RenamedEmptyEnum";
        }
Example #12
0
        public void Preprocess(Driver driver, ASTContext ctx)
        {
            driver.Context.TranslationUnitPasses.Passes.RemoveAll(p => p is CaseRenamePass);

            // CppSharp doesn't know how to generate these, so we won't insist
            ctx.IgnoreClassWithName("svn_opt_subcommand_desc2_t");
            ctx.IgnoreClassWithName("svn_opt_subcommand_desc_t");

            // These functions benefit from string parameters passed/returned
            ctx.ExcludeFromPass("svn_wc_get_adm_dir", typeof(ReplaceStringsWithSbytesPass));
            ctx.ExcludeFromPass("svn_wc_set_adm_dir", typeof(ReplaceStringsWithSbytesPass));
            ctx.ExcludeFromPass("svn_error_create", typeof(ReplaceStringsWithSbytesPass));
            ctx.ExcludeFromPass("svn_auth_get_platform_specific_provider", typeof(ReplaceStringsWithSbytesPass));

            // These enums will be used in the code
            ctx.GenerateEnumFromMacros("svn_client_commit_item_enum_t", "SVN_CLIENT_COMMIT_ITEM_*");
            ctx.GenerateEnumFromMacros("svn_dirent_enum_t", "SVN_DIRENT_*");
            ctx.GenerateEnumFromMacros("svn_auth_ssl_enum_t", "SVN_AUTH_SSL_*");

            // These functions return parameters
            ctx.SetFunctionParameterUsage("svn_opt_parse_path", 1, ParameterUsage.Out);
        }
Example #13
0
        public void Preprocess(Driver driver, ASTContext ctx)
        {
            ctx.IgnoreEnumWithMatchingItem("SDL_FALSE");
            ctx.IgnoreEnumWithMatchingItem("DUMMY_ENUM_VALUE");

            ctx.SetNameOfEnumWithMatchingItem("SDL_SCANCODE_UNKNOWN", "ScanCode");
            ctx.SetNameOfEnumWithMatchingItem("SDLK_UNKNOWN", "Key");
            ctx.SetNameOfEnumWithMatchingItem("KMOD_NONE", "KeyModifier");
            ctx.SetNameOfEnumWithMatchingItem("SDL_LOG_CATEGORY_CUSTOM", "LogCategory");

            ctx.GenerateEnumFromMacros("InitFlags", "SDL_INIT_(.*)").SetFlags();
            ctx.GenerateEnumFromMacros("Endianness", "SDL_(.*)_ENDIAN");
            ctx.GenerateEnumFromMacros("InputState", "SDL_RELEASED", "SDL_PRESSED");
            ctx.GenerateEnumFromMacros("AlphaState", "SDL_ALPHA_(.*)");
            ctx.GenerateEnumFromMacros("HatState", "SDL_HAT_(.*)");

            ctx.IgnoreHeadersWithName("SDL_atomic*");
            ctx.IgnoreHeadersWithName("SDLAtomic*");
            ctx.IgnoreHeadersWithName("SDL_endian*");
            ctx.IgnoreHeadersWithName("SDL_main*");
            ctx.IgnoreHeadersWithName("SDL_mutex*");
            ctx.IgnoreHeadersWithName("SDL_stdinc*");
            ctx.IgnoreHeadersWithName("SDL_error");
            ctx.IgnoreHeadersWithName("SDL_rwops");

            ctx.IgnoreEnumWithMatchingItem("SDL_ENOMEM");
            ctx.IgnoreFunctionWithName("SDL_Error");

            //ctx.SetFunctionParameterUsage("SDL_PollEvent", 1, ParameterUsage.Out);
            var pollEvent = ctx.FindFunction("SDL_PollEvent").First();

            var eventParam = pollEvent.Parameters[0];

            eventParam.Usage = ParameterUsage.Out;
            //eventParam.Kind = ParameterKind.IndirectReturnType;

            ctx.IgnoreClassWithName("Windowsio");

            //var typeDefs = ctx.TranslationUnits.SelectMany(tu => tu.Typedefs).ToList();

            //var kmType = ctx.FindTypedef("SDL_Keymod").First();
            //var keysym = ctx.FindClass("SDL_Keysym").First();
            //var modField = keysym.Fields.Find(f => f.Name == "mod");
            //modField.QualifiedType = new QualifiedType(new TypedefType(kmType));
            //ctx.SetClassAsValueType();
        }
Example #14
0
 /// Do transformations that should happen after passes are processed.
 public override void Postprocess(Driver driver, ASTContext ctx)
 {
     foreach (string s in ClassDecls)
     {
         IEnumerable <Class> classes = ctx.FindClass(s);
         foreach (Class c in classes)
         {
             if (WithoutCommon && !c.Name.Contains(Class))
             {
                 ctx.IgnoreClassWithName(c.Name);
             }
             else
             {
                 ctx.SetClassAsValueType(c.Name);
             }
         }
     }
 }
Example #15
0
 public override void Preprocess(Driver driver, ASTContext ctx)
 {
     ctx.SetClassAsValueType("HasQList");
     ctx.FindCompleteClass("QList").Constructors.First(c => c.IsCopyConstructor).GenerationKind = GenerationKind.None;
     ctx.IgnoreClassWithName("IgnoredType");
 }
Example #16
0
        public void Preprocess(Driver driver, ASTContext ctx)
        {
            ctx.IgnoreHeadersWithName("API.h");
            ctx.IgnoreHeadersWithName("Concurrency.h");
            ctx.IgnoreHeadersWithName("ConcurrentQueue.h");
            ctx.IgnoreHeadersWithName("Delegate.h");
            ctx.IgnoreHeadersWithName("Event.h");
            ctx.IgnoreHeadersWithName("Handle.h");
            ctx.IgnoreHeadersWithName("Object.h");
            ctx.IgnoreHeadersWithName("Pointers.h");
            ctx.IgnoreHeadersWithName("References.h");
            ctx.IgnoreHeadersWithName("Reflection.h");
            ctx.IgnoreHeadersWithName("ReflectionHelpers.h");
            ctx.IgnoreHeadersWithName("Task.h");
            ctx.IgnoreHeadersWithName("Timer.h");
            ctx.IgnoreHeadersWithName("Swap.h");

            //Core
            ctx.IgnoreClassWithName("Object");
            ctx.IgnoreClassWithName("Class");
            ctx.IgnoreClassWithName("ReferenceCounted");
            ctx.IgnoreClassWithName("HandleManager");

            ctx.IgnoreClassWithName("Delegate0");
            ctx.IgnoreClassWithName("Delegate1");
            ctx.IgnoreClassWithName("Delegate2");

            ctx.IgnoreClassWithName("TaskPool");
            ctx.IgnoreClassWithName("ConcurrentQueue");

            ctx.SetClassAsValueType("StringHash");
            ctx.IgnoreClassWithName("RawStringCompare");

            ctx.SetClassAsValueType("LogEntry");
            ctx.IgnoreFunctionWithName("LogCreate");

            ctx.IgnoreFunctionWithName("AllocatorAllocate");
            ctx.IgnoreFunctionWithName("AllocatorDeallocate");
            ctx.SetNameOfFunction("AllocatorReset", "AllocatorResetMemory");

            ctx.IgnoreClassWithName("StreamFuncs");
            ctx.IgnoreClassWithName("FileStream");
            ctx.SetClassAsValueType("FileWatchEvent");

            ctx.IgnoreFunctionWithPattern(".+GetType");
            ctx.IgnoreFunctionWithName("ClassGetIdMap");

            ctx.IgnoreFunctionWithName("ReflectionSetHandleContext");
            ctx.IgnoreFunctionWithName("SerializerCreateJSON");
            ctx.IgnoreFunctionWithName("SerializerCreateBinary");
            ctx.IgnoreClassWithName("ReflectionContext");
            ctx.IgnoreClassWithName("ValueContext");

            ctx.SetClassAsValueType("ExtensionMetadata");

            ctx.IgnoreClassWithName("MemoryStream");
            ctx.IgnoreClassWithName("Serializer");
            ctx.IgnoreClassWithName("Thread");

            // Math
            ctx.SetClassAsValueType("ColorP");
            ctx.SetClassAsValueType("Color");
            ctx.SetClassAsValueType("Vector2P");
            ctx.SetClassAsValueType("Vector2");
            ctx.SetClassAsValueType("Vector2i");
            ctx.SetClassAsValueType("Vector3P");
            ctx.SetClassAsValueType("Vector3");
            ctx.SetClassAsValueType("Vector4");
            ctx.SetClassAsValueType("EulerAngles");
            ctx.SetClassAsValueType("QuaternionP");
            ctx.SetClassAsValueType("Quaternion");
            ctx.SetClassAsValueType("Matrix4x3");
            ctx.SetClassAsValueType("Matrix4x4");

            ctx.CopyClassFields("ColorP", "Color");
            ctx.CopyClassFields("Vector2P", "Vector2");
            ctx.CopyClassFields("Vector3P", "Vector3");
            ctx.CopyClassFields("QuaternionP", "Quaternion");

            ctx.IgnoreClassWithName("ColorP");
            ctx.IgnoreClassWithName("Vector2P");
            ctx.IgnoreClassWithName("Vector3P");
            ctx.IgnoreClassWithName("QuaternionP");

            ctx.SetNameOfClassMethod("Matrix4x3", "identity", "setIdentity");
            ctx.SetNameOfClassMethod("Matrix4x4", "identity", "setIdentity");
            ctx.SetNameOfClassMethod("Quaternion", "identity", "setIdentity");
            ctx.SetNameOfClassMethod("Vector2", "zero", "setZero");
            ctx.SetNameOfClassMethod("Vector3", "zero", "setZero");
            ctx.SetNameOfClassMethod("Vector4", "zero", "setZero");

            // Resources
            ctx.IgnoreFunctionWithName("ResourcesInitialize");
            ctx.IgnoreFunctionWithName("ResourcesDeinitialize");
            //lib.SetClassAsValueType("ResourceEvent");
            ctx.SetClassAsValueType("ResourceLoadOption");
            ctx.SetClassAsValueType("ResourceLoadOptions");
            ctx.SetNameOfClassMethod("Texture", "allocate", "alloc");
            ctx.ExcludeFromPass("ResourceHandleCreate", typeof (FunctionToInstanceMethodPass));

            // Set generic type constraints on template methods
            var resourceManager = ctx.FindClass("ResourceManager").FirstOrDefault();
            if (resourceManager != null)
                foreach (var template in resourceManager.Templates)
                {
                    for (var i = 0; i < template.Parameters.Count; ++i)
                    {
                        var param = template.Parameters[i];
                        param.Constraint = "Flood::Resource";
                        template.Parameters[i] = param;
                    }
                }

            // Graphics
            ctx.SetClassAsValueType("RenderContextSettings");
            ctx.SetClassAsValueType("RenderBatchRange");
            ctx.SetClassAsValueType("VertexElementP");
            ctx.SetClassAsValueType("VertexElement");
            ctx.SetClassAsValueType("UniformBufferElement");
            ctx.SetClassAsValueType("RenderState");
            ctx.SetClassAsValueType("LightState");
            ctx.IgnoreHeadersWithName("MaxRectsBinPack.h");
            ctx.IgnoreClassWithName("MaxRectsBinPack");
            ctx.IgnoreClassWithName("CompareHandle");
            ctx.SetClassAsValueType("Glyph");
            ctx.SetClassAsValueType("Rectangle");
            ctx.SetClassAsValueType("RectangleF");
            ctx.SetClassAsValueType("SubTexture");
            ctx.SetMethodParameterUsage("TextureAtlas", "getImageSubTexture", 2, ParameterUsage.Out);
            ctx.SetMethodParameterUsage("Font", "getGlyphInfo", 3, ParameterUsage.Out);

            // Engine
            ctx.IgnoreClassMethodWithName("Engine", "addSubsystem");
        }
Example #17
0
 public override void Preprocess(Driver driver, ASTContext ctx)
 {
     ctx.SetClassAsValueType("HasQList");
     ctx.FindCompleteClass("QList").Constructors.First(c => c.IsCopyConstructor).GenerationKind = GenerationKind.None;
     ctx.IgnoreClassWithName("IgnoredType");
 }