Exemple #1
0
        private CodeTypeDeclaration GenerateEnum(IDescribeEnum declaration)
        {
            var newType = new CodeTypeDeclaration
            {
                Name           = declaration.Name.Replace("::", "_"),
                IsEnum         = true,
                TypeAttributes = TypeAttributes.Public
            };

            //TODO: Comments, we have none yet
            newType.CustomAttributes.AddRange(declaration.Attributes.ToArray());

            foreach (var valueDecl in declaration.Values)
            {
                var value = new CodeMemberField
                {
                    Name           = valueDecl.Name,
                    InitExpression = new CodePrimitiveExpression(valueDecl.Value),
                    Attributes     = MemberAttributes.Public,
                };
                value.CustomAttributes.AddRange(valueDecl.Attributes.ToArray());
                newType.Members.Add(value);
            }

            return(newType);
        }
Exemple #2
0
        protected override void VisitChild(VisitorCursor cursor, List <VisitorCursor> Parents)
        {
            if (cursor.Kind == CXCursorKind.CXCursor_EnumDecl)
            {
                var enumSpelling = string.IsNullOrWhiteSpace(cursor.Spelling) ?  Parents.ToNamespace() : cursor.Spelling;
                if (config.NativeEnums.Any(i => i.Name == enumSpelling) && !info.Enums.Any(e => e.Name == enumSpelling))
                {
                    var enumType = cursor.EnumType;
                    if (enumType == typeof(IntPtr))
                    {
                        enumType = typeof(int);
                    }

                    var enumDecl = new IDescribeEnum {
                        Name = enumSpelling, Type = enumType
                    };

                    cursor.VisitChildren((valueCursor) =>
                    {
                        if (valueCursor.Kind != CXCursorKind.CXCursor_EnumConstantDecl && valueCursor.Kind != CXCursorKind.CXCursor_EnumDecl)
                        {
                            return;
                        }
                        var enumValue = new IDescribeEnumValue {
                            Name = valueCursor.Spelling, Value = valueCursor.EnumValue
                        };
                        enumDecl.Values.Add(enumValue);
                    });

                    info.Enums.Add(enumDecl);
                }
            }
        }