private void OutputDecorationOfMethod(MethodInfo mi, int mask)
        {
            int methodAttributes = (int)mi.Attributes;

            if ((mask & MethodAttributesProperty) != 0)
            {
                int access = methodAttributes & (int)MethodAttributes.MemberAccessMask;
                switch ((MethodAttributes)access)
                {
                case MethodAttributes.Assembly:
                    Output("internal ");
                    break;

                case MethodAttributes.FamANDAssem:
                    // Output("/*protected && internal*/ internal ");
                    Output("internal ");
                    break;

                case MethodAttributes.FamORAssem:
                    Output("protected internal ");
                    break;

                case MethodAttributes.Public:
                    Output("public ");
                    break;

                case MethodAttributes.Private:
                    Output("private ");
                    break;

                case MethodAttributes.Family:
                    Output("protected ");
                    break;

                case MethodAttributes.PrivateScope:
                    // Output("/*private scope*/ private ");
                    Output("private ");
                    break;
                }

                if ((methodAttributes & (int)MethodAttributes.Static) != 0)
                {
                    Output("static ");
                }
            }

            bool overrided = false;

            int decl = MemberDecl.FromMethodInfo(mi);

            switch (decl)
            {
            case MemberDecl.Inherited:
                // Output("/*inherited*/ ");
                break;

            case MemberDecl.New:
                Output("new ");
                break;

            case MemberDecl.Override:
                Output("override ");
                overrided = true;
                break;

            case MemberDecl.DeclaredOnType:
                // nothing;
                break;
            }


            if ((mask & MethodAttributesAccessor) != 0)
            {
                if ((methodAttributes & (int)MethodAttributes.Abstract) != 0)
                {
                    // BL changes {{
                    if ((m_type.Attributes & TypeAttributes.Interface) == 0)
                    {
                        Output("abstract ");
                    }
                    // BL changes }}
                }
                else if ((methodAttributes & (int)MethodAttributes.Virtual) != 0 && !overrided)
                {
                    Output("virtual ");
                }

                if ((methodAttributes & (int)MethodImplAttributes.Synchronized) != 0)
                {
                    // Output("/*lock*/ ");
                }
                // do nothing: SpecialName
                // do nothing: RTSpecialName
                if ((methodAttributes & (int)MethodAttributes.PinvokeImpl) != 0)
                {
                    Output("extern ");
                }
            }
        }
        private void OutputDecorationOfMethod(MethodInfo mi, int mask)
        {
            int methodAttributes = (int)mi.Attributes;

            if ((mask & MethodAttributesProperty) != 0)
            {
                int access = methodAttributes & (int)MethodAttributes.MemberAccessMask;

                switch ((MethodAttributes)access)
                {
                case MethodAttributes.Assembly:
                    Output("internal ");
                    break;

                case MethodAttributes.FamANDAssem:
                    // Output( "/*protected && internal*/ internal " );
                    Output("internal ");
                    break;

                case MethodAttributes.FamORAssem:
                    Output("package ");
                    break;

                case MethodAttributes.Public:
                    Output("public ");
                    break;

                case MethodAttributes.Private:
                    Output("private ");
                    break;

                case MethodAttributes.Family:
                    Output("protected ");
                    break;

                case MethodAttributes.PrivateScope:
                    // Output( "/*private scope*/ private " );
                    Output("private ");
                    break;
                }

                if ((methodAttributes & (int)MethodAttributes.Static) != 0)
                {
                    Output("static ");
                }
            }

            int decl = MemberDecl.FromMethodInfo(mi);

            switch (decl)
            {
            case MemberDecl.Inherited:
                // Output( "/*inherited*/ " );
                break;

            case MemberDecl.New:
                Output("new ");
                break;

            case MemberDecl.Override:
                Output("override ");
                break;

            case MemberDecl.DeclaredOnType:
                // nothing;
                break;
            }


            if ((mask & MethodAttributesAccessor) != 0)
            {
                if ((methodAttributes & (int)MethodAttributes.Abstract) != 0)
                {
                    Output("abstract ");
                }

                // virtual = no JScript equivalent--don't translate

                /*
                 * else if ( ( methodAttributes & (int)MethodAttributes.Virtual ) != 0 && !bOverrided )
                 * Output( "virtual " );
                 */

                if ((methodAttributes & (int)MethodImplAttributes.Synchronized) != 0)
                {
                    // Output( "/*lock*/ " );
                }
                // do nothing: SpecialName
                // do nothing: RTSpecialName
                if ((methodAttributes & (int)MethodAttributes.PinvokeImpl) != 0)
                {
                    Output("extern ");
                }
            }
        }