Пример #1
0
 public EmitFieldBuilder DefineField(string name, EmitType type, EmitVisibility visibility = EmitVisibility.Public,
     bool isStatic = false, bool isReadonly = false, bool isVolatile = false)
 {
     var field = new EmitFieldBuilder(this, name, type, visibility, isStatic, isReadonly);
     memberBuilders.Add(new EmitFieldReference(() => field));
     return field;
 }
        public static MethodAttributes ToMethodAttributes(EmitVisibility visibility, bool isAbstract, bool isSealed,
            bool isVirtual, bool isExtern, bool isStatic)
        {
            MethodAttributes result = 0;

            switch (visibility)
            {
                case EmitVisibility.Public:
                    result |= MethodAttributes.Public;
                    break;
                case EmitVisibility.Internal:
                    result |= MethodAttributes.Assembly;
                    break;
                case EmitVisibility.Private:
                    result |= MethodAttributes.Private;
                    break;
                case EmitVisibility.Protected:
                    result |= MethodAttributes.Family;
                    break;
                case EmitVisibility.ProtectedInternal:
                    result |= MethodAttributes.FamORAssem;
                    break;
            }

            if (isAbstract)
                result |= MethodAttributes.Abstract;
            if (isVirtual)
                result |= MethodAttributes.Virtual;
            if (isStatic)
                result |= MethodAttributes.Static;

            return result;
        }
Пример #3
0
        public static FieldAttributes ToFieldAttributes(EmitVisibility visibility, bool isStatic, bool isReadonly,
            bool isVolatile)
        {
            FieldAttributes result = 0;

            switch (visibility)
            {
                case EmitVisibility.Public:
                    result |= FieldAttributes.Public;
                    break;
                case EmitVisibility.Protected:
                    result |= FieldAttributes.Family;
                    break;
                case EmitVisibility.Private:
                    result |= FieldAttributes.Private;
                    break;
                case EmitVisibility.Internal:
                    result |= FieldAttributes.Assembly;
                    break;
                case EmitVisibility.ProtectedInternal:
                    result |= FieldAttributes.FamORAssem;
                    break;
            }

            if (isReadonly)
                result |= FieldAttributes.InitOnly;
            if (isStatic)
                result |= FieldAttributes.Static;

            return result;
        }
Пример #4
0
 public EmitField(EmitType declaringType, string name, EmitType fieldType, EmitVisibility visibility, bool isStatic, bool isReadOnly) : base(declaringType, name)
 {
     FieldType  = fieldType;
     Visibility = visibility;
     IsStatic   = isStatic;
     IsReadOnly = isReadOnly;
 }
Пример #5
0
        public EmitFieldBuilder DefineField(string name, EmitType type, EmitVisibility visibility = EmitVisibility.Public,
                                            bool isStatic = false, bool isReadonly = false, bool isVolatile = false)
        {
            var field = new EmitFieldBuilder(this, name, type, visibility, isStatic, isReadonly);

            memberBuilders.Add(new EmitFieldReference(() => field));
            return(field);
        }
Пример #6
0
 public EmitMethodBuilder DefineMethod(string name, EmitType returnType, EmitVisibility visibility = EmitVisibility.Public,
     bool isAbstract = false, bool isSealed = false, bool isVirtual = false, bool isOverride = false,
     bool isExtern = false, bool isStatic = false)
 {
     var method = new EmitMethodBuilder(this, name, returnType, visibility, isStatic, isSealed, isVirtual, isAbstract);
     memberBuilders.Add(new EmitMethodReference(() => method));
     return method;
 }
Пример #7
0
 public EmitTypeBuilder(EmitAssembly assembly, string ns, string name, EmitTypeKind kind, EmitType declaringType,
                        EmitVisibility visibility, EmitTypeReference baseType, Func <EmitType, IReadOnlyList <EmitTypeReference> > implementedInterfacesFactory,
                        bool isAbstract, bool isSealed
                        ) :
     base(assembly, ns, name, kind, declaringType,
          result => ((EmitTypeBuilder)result).memberBuilders = new List <EmitMemberReference>(),
          visibility, baseType, implementedInterfacesFactory, isAbstract, isSealed)
 {
 }
Пример #8
0
        public EmitMethodBuilder DefineMethod(string name, EmitType returnType, EmitVisibility visibility = EmitVisibility.Public,
                                              bool isAbstract = false, bool isSealed = false, bool isVirtual = false, bool isOverride = false,
                                              bool isExtern   = false, bool isStatic = false)
        {
            var method = new EmitMethodBuilder(this, name, returnType, visibility, isStatic, isSealed, isVirtual, isAbstract);

            memberBuilders.Add(new EmitMethodReference(() => method));
            return(method);
        }
Пример #9
0
 public EmitTypeBuilder(EmitAssembly assembly, string ns, string name, EmitTypeKind kind, EmitType declaringType, 
     EmitVisibility visibility, EmitTypeReference baseType, Func<EmitType, IReadOnlyList<EmitTypeReference>> implementedInterfacesFactory,
     bool isAbstract, bool isSealed
 )
     : base(assembly, ns, name, kind, declaringType, 
         result => ((EmitTypeBuilder)result).memberBuilders = new List<EmitMemberReference>(), 
         visibility, baseType, implementedInterfacesFactory, isAbstract, isSealed)
 {
 }
Пример #10
0
 public EmitMethod(EmitType declaringType, string name, EmitType returnType, Func <EmitMethod, IReadOnlyList <EmitParameter> > parameters, EmitVisibility visibility, bool isStatic, bool isSealed, bool isVirtual, bool isAbstract) : base(declaringType, name)
 {
     ReturnType = returnType;
     Parameters = parameters(this);
     Visibility = visibility;
     IsStatic   = isStatic;
     IsSealed   = isSealed;
     IsVirtual  = isVirtual;
     IsAbstract = isAbstract;
 }
Пример #11
0
 public EmitTypeBuilder DefineType(string ns, string name, EmitTypeKind kind = EmitTypeKind.Class, 
     EmitVisibility visibility = EmitVisibility.Public, EmitTypeReference baseType = null, 
     IReadOnlyList<EmitTypeReference> implementedInterfaces = null, bool isAbstract = false,
     bool isSealed = false)
 {
     baseType = baseType ?? typeof(object);
     var typeBuilder = new EmitTypeBuilder(this, ns, name, kind, null, visibility, baseType, result => implementedInterfaces ?? new List<EmitTypeReference>(), isAbstract, isSealed);
     typeBuilders.Add(new EmitTypeReference(() => typeBuilder));
     return typeBuilder;
 }
Пример #12
0
        public EmitTypeBuilder DefineType(string ns, string name, EmitTypeKind kind = EmitTypeKind.Class,
                                          EmitVisibility visibility = EmitVisibility.Public, EmitTypeReference baseType   = null,
                                          IReadOnlyList <EmitTypeReference> implementedInterfaces = null, bool isAbstract = false,
                                          bool isSealed = false)
        {
            baseType = baseType ?? typeof(object);
            var typeBuilder = new EmitTypeBuilder(this, ns, name, kind, null, visibility, baseType, result => implementedInterfaces ?? new List <EmitTypeReference>(), isAbstract, isSealed);

            typeBuilders.Add(new EmitTypeReference(() => typeBuilder));
            return(typeBuilder);
        }
Пример #13
0
        public static TypeAttributes ToTypeAttributes(EmitTypeKind kind, EmitVisibility visibility, bool isNested, bool isAbstract, bool isSealed)
        {
            TypeAttributes result = 0;

            switch (kind)
            {
            case EmitTypeKind.Class:
                result |= TypeAttributes.Class;
                break;

            case EmitTypeKind.Interface:
                result |= TypeAttributes.Interface;
                break;
//                case EmitTypeKind.Struct:
//                    result |=
            }
            switch (visibility)
            {
            case EmitVisibility.Public:
                result |= isNested ? TypeAttributes.NestedPublic : TypeAttributes.Public;
                break;

            case EmitVisibility.Internal:
                result |= isNested ? TypeAttributes.NestedAssembly : TypeAttributes.NotPublic;
                break;

            case EmitVisibility.Private:
                result |= TypeAttributes.NestedPrivate;
                break;

            case EmitVisibility.Protected:
                result |= TypeAttributes.NestedFamily;
                break;

            case EmitVisibility.ProtectedInternal:
                result |= TypeAttributes.NestedFamORAssem;
                break;
            }
            if (isAbstract)
            {
                result |= TypeAttributes.Abstract;
            }
            if (isSealed)
            {
                result |= TypeAttributes.Sealed;
            }

            return(result);
        }
Пример #14
0
        public EmitType(EmitAssembly assembly, string ns, string name, EmitTypeKind kind, EmitType declaringType,
                        Func <EmitType, IReadOnlyList <EmitMemberReference> > membersFactory, EmitVisibility visibility,
                        EmitTypeReference baseType,
                        Func <EmitType, IReadOnlyList <EmitTypeReference> > implementedInterfacesFactory,
                        bool isAbstract, bool isSealed
                        ) :
            base(declaringType, name)
        {
            Assembly              = assembly;
            Namespace             = ns;
            Members               = new ReadOnlyListWrapper <EmitMemberReference, EmitMember>(membersFactory(this));
            Visibility            = visibility;
            Kind                  = kind;
            IsAbstract            = isAbstract;
            IsSealed              = isSealed;
            ImplementedInterfaces = new ReadOnlyListWrapper <EmitTypeReference, EmitType>(implementedInterfacesFactory(this));

            this.baseType = baseType;
        }
Пример #15
0
        public static MethodAttributes ToMethodAttributes(EmitVisibility visibility, bool isAbstract, bool isSealed,
                                                          bool isVirtual, bool isExtern, bool isStatic)
        {
            MethodAttributes result = 0;

            switch (visibility)
            {
            case EmitVisibility.Public:
                result |= MethodAttributes.Public;
                break;

            case EmitVisibility.Internal:
                result |= MethodAttributes.Assembly;
                break;

            case EmitVisibility.Private:
                result |= MethodAttributes.Private;
                break;

            case EmitVisibility.Protected:
                result |= MethodAttributes.Family;
                break;

            case EmitVisibility.ProtectedInternal:
                result |= MethodAttributes.FamORAssem;
                break;
            }

            if (isAbstract)
            {
                result |= MethodAttributes.Abstract;
            }
            if (isVirtual)
            {
                result |= MethodAttributes.Virtual;
            }
            if (isStatic)
            {
                result |= MethodAttributes.Static;
            }

            return(result);
        }
Пример #16
0
        public static TypeAttributes ToTypeAttributes(EmitTypeKind kind, EmitVisibility visibility, bool isNested, bool isAbstract, bool isSealed)
        {
            TypeAttributes result = 0;
            switch (kind)
            {
                case EmitTypeKind.Class:
                    result |= TypeAttributes.Class;
                    break;
                case EmitTypeKind.Interface:
                    result |= TypeAttributes.Interface;
                    break;
            //                case EmitTypeKind.Struct:
            //                    result |=
            }
            switch (visibility)
            {
                case EmitVisibility.Public:
                    result |= isNested ? TypeAttributes.NestedPublic : TypeAttributes.Public;
                    break;
                case EmitVisibility.Internal:
                    result |= isNested ? TypeAttributes.NestedAssembly : TypeAttributes.NotPublic;
                    break;
                case EmitVisibility.Private:
                    result |= TypeAttributes.NestedPrivate;
                    break;
                case EmitVisibility.Protected:
                    result |= TypeAttributes.NestedFamily;
                    break;
                case EmitVisibility.ProtectedInternal:
                    result |= TypeAttributes.NestedFamORAssem;
                    break;
            }
            if (isAbstract)
                result |= TypeAttributes.Abstract;
            if (isSealed)
                result |= TypeAttributes.Sealed;

            return result;
        }
Пример #17
0
        public static FieldAttributes ToFieldAttributes(EmitVisibility visibility, bool isStatic, bool isReadonly,
                                                        bool isVolatile)
        {
            FieldAttributes result = 0;

            switch (visibility)
            {
            case EmitVisibility.Public:
                result |= FieldAttributes.Public;
                break;

            case EmitVisibility.Protected:
                result |= FieldAttributes.Family;
                break;

            case EmitVisibility.Private:
                result |= FieldAttributes.Private;
                break;

            case EmitVisibility.Internal:
                result |= FieldAttributes.Assembly;
                break;

            case EmitVisibility.ProtectedInternal:
                result |= FieldAttributes.FamORAssem;
                break;
            }

            if (isReadonly)
            {
                result |= FieldAttributes.InitOnly;
            }
            if (isStatic)
            {
                result |= FieldAttributes.Static;
            }

            return(result);
        }
Пример #18
0
 public EmitConstructorBuilder(EmitType declaringType, EmitVisibility visibility, bool isStatic) :
     base(declaringType, result => ((EmitConstructorBuilder)result).parameters = new List <EmitParameter>(),
          visibility, isStatic)
 {
 }
Пример #19
0
 public EmitMethodBuilder(EmitType declaringType, string name, EmitType returnType, EmitVisibility visibility, bool isStatic, bool isSealed, bool isVirtual, bool isAbstract)
     : base(declaringType, name, returnType, 
         result => ((EmitMethodBuilder)result).parameters = new List<EmitParameter>(),
         visibility, isStatic, isSealed, isVirtual, isAbstract)
 {
 }
Пример #20
0
 public EmitFieldBuilder(EmitType declaringType, string name, EmitType fieldType, EmitVisibility visibility, bool isStatic, bool isReadOnly) : base(declaringType, name, fieldType, visibility, isStatic, isReadOnly)
 {
 }
Пример #21
0
 public EmitConstructor(EmitType declaringType, Func <EmitConstructor, IReadOnlyList <EmitParameter> > parameters, EmitVisibility visibility, bool isStatic) : base(declaringType, isStatic ? ".cctor" : ".ctor")
 {
     Parameters = parameters(this);
     Visibility = visibility;
     IsStatic   = isStatic;
 }
Пример #22
0
 public EmitFieldBuilder(EmitType declaringType, string name, EmitType fieldType, EmitVisibility visibility, bool isStatic, bool isReadOnly)
     : base(declaringType, name, fieldType, visibility, isStatic, isReadOnly)
 {
 }
Пример #23
0
 public EmitMethodBuilder(EmitType declaringType, string name, EmitType returnType, EmitVisibility visibility, bool isStatic, bool isSealed, bool isVirtual, bool isAbstract) :
     base(declaringType, name, returnType,
          result => ((EmitMethodBuilder)result).parameters = new List <EmitParameter>(),
          visibility, isStatic, isSealed, isVirtual, isAbstract)
 {
 }
Пример #24
0
 public EmitConstructorBuilder(EmitType declaringType, EmitVisibility visibility, bool isStatic)
     : base(declaringType, result => ((EmitConstructorBuilder)result).parameters = new List<EmitParameter>(), 
         visibility, isStatic)
 {
 }