示例#1
0
        void CollectImplMethods()
        {
            int typeCount = cu.TypeCount;

            if (typeCount > 0)
            {
            }
            //
            CodeTypeDeclaration globalTypeDecl = cu.GlobalTypeDecl;

            if (globalTypeDecl == null)
            {
                return;
            }
            foreach (CodeMemberDeclaration mb in globalTypeDecl.GetMemberIter())
            {
                switch (mb.MemberKind)
                {
                case CodeMemberKind.Type:
                {
                    CodeTypeDeclaration typedecl = (CodeTypeDeclaration)mb;
                    if (typedecl.Kind == TypeKind.Namespace)
                    {
                        if (firstNamespaceStartAt == 0)
                        {
                            firstNamespaceStartAt = typedecl.StartAtLine;
                        }
                        foreach (CodeMemberDeclaration mb_1 in typedecl.GetMemberIter())
                        {
                            //check
                            switch (mb_1.MemberKind)
                            {
                            case CodeMemberKind.Method:
                            {
                                methods.Add((CodeMethodDeclaration)mb_1);
                            }
                            break;
                            }
                        }
                    }
                    else
                    {
                        throw new NotSupportedException();
                    }
                }
                break;
                }
            }
        }
示例#2
0
        void GenerateCsCode(CefCodeGenOutput output)
        {
            CodeStringBuilder csCode = new CodeStringBuilder();

            CodeTypeDeclaration typedecl = this.OriginalDecl;

            //-------
            csCode.AppendLine("//CefCStructTx::GenerateCsCode, " + (++codeNum));
            //-------

            csCode.AppendLine("[StructLayout(LayoutKind.Sequential)]");
            csCode.AppendLine("struct " + typedecl.Name + "{");

            int i = 0;

            foreach (CodeMemberDeclaration mb in typedecl.GetMemberIter())
            {
                if (mb.MemberKind == CodeMemberKind.Field)
                {
                    //-------
                    csCode.AppendLine("//CefCStructTx::GenerateCsCode-Field, " + (++codeNum));
                    //-------
                    CodeFieldDeclaration fieldDecl = (CodeFieldDeclaration)mb;
                    //
                    AddComment(fieldDecl.LineComments, csCode);
                    //

                    string fieldTypeName = fieldDecl.FieldType.ToString();
                    //field type
                    switch (fieldTypeName)
                    {
                    default:
                    {
                        if (fieldTypeName.EndsWith("_t"))
                        {
                            csCode.Append("public " + fieldTypeName);
                        }
                        else
                        {
                            throw new NotSupportedException();
                        }
                    }
                    break;

                    case "void*":
                        csCode.Append("public IntPtr");
                        break;

                    case "int":
                    case "float":
                    case "double":
                        csCode.Append("public " + fieldTypeName);
                        break;

                    case "cef_string_t":
                        csCode.Append("public _cef_string_utf16_t");
                        break;

                    case "size_t":
                        csCode.Append("public int");
                        break;

                    case "uint32":
                        csCode.Append("public uint");
                        break;

                    case "char16":
                        csCode.Append("public char");
                        break;
                    }
                    csCode.AppendLine(" " + fieldDecl.Name + ";");
                }
                i++;
            }
            csCode.AppendLine("}");
            //
            output._csCode.Append(csCode.ToString());
        }