public override void Emit()
        {
            if (member_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic)
            {
                Module.PredefinedAttributes.Dynamic.EmitAttribute(FieldBuilder);
            }
            else if (!Parent.IsCompilerGenerated && member_type.HasDynamicElement)
            {
                Module.PredefinedAttributes.Dynamic.EmitAttribute(FieldBuilder, member_type, Location);
            }

            if ((ModFlags & Modifiers.COMPILER_GENERATED) != 0 && !Parent.IsCompilerGenerated)
            {
                Module.PredefinedAttributes.CompilerGenerated.EmitAttribute(FieldBuilder);
            }
            if ((ModFlags & Modifiers.DEBUGGER_HIDDEN) != 0)
            {
                Module.PredefinedAttributes.DebuggerBrowsable.EmitAttribute(FieldBuilder, System.Diagnostics.DebuggerBrowsableState.Never);
            }

            if (OptAttributes != null)
            {
                OptAttributes.Emit();
            }

            if (((status & Status.HAS_OFFSET) == 0) && (ModFlags & (Modifiers.STATIC | Modifiers.BACKING_FIELD)) == 0 && Parent.PartialContainer.HasExplicitLayout)
            {
                Report.Error(625, Location, "`{0}': Instance field types marked with StructLayout(LayoutKind.Explicit) must have a FieldOffset attribute", GetSignatureForError());
            }

            ConstraintChecker.Check(this, member_type, type_expr.Location);

            base.Emit();
        }
Beispiel #2
0
        public override void Emit()
        {
            base.Emit();

            if (declarative_security != null)
            {
                foreach (var de in declarative_security)
                {
#if STATIC
                    TypeBuilder.__AddDeclarativeSecurity(de);
#else
                    TypeBuilder.AddDeclarativeSecurity(de.Key, de.Value);
#endif
                }
            }

            var rtype = ReturnType.Type;
            if (rtype != null)
            {
                if (rtype.BuiltinType == BuiltinTypeSpec.Type.Dynamic)
                {
                    Module.PredefinedAttributes.Dynamic.EmitAttribute(CreateReturnBuilder().Builder);
                }
                else if (rtype.HasDynamicElement)
                {
                    Module.PredefinedAttributes.Dynamic.EmitAttribute(CreateReturnBuilder().Builder, rtype, Location);
                }
                else if (rtype is ReadOnlyReferenceContainer)
                {
                    Module.PredefinedAttributes.IsReadOnly.EmitAttribute(CreateReturnBuilder().Builder);
                }

                if (rtype.HasNamedTupleElement)
                {
                    Module.PredefinedAttributes.TupleElementNames.EmitAttribute(CreateReturnBuilder().Builder, rtype, Location);
                }

                ConstraintChecker.Check(this, ReturnType.Type, ReturnType.Location);
            }

            Constructor.ParameterInfo.ApplyAttributes(this, Constructor.ConstructorBuilder);
            Constructor.ConstructorBuilder.SetImplementationFlags(MethodImplAttributes.Runtime);

            parameters.CheckConstraints(this);
            parameters.ApplyAttributes(this, InvokeBuilder.MethodBuilder);
            InvokeBuilder.MethodBuilder.SetImplementationFlags(MethodImplAttributes.Runtime);

            if (BeginInvokeBuilder != null)
            {
                BeginInvokeBuilder.ParameterInfo.ApplyAttributes(this, BeginInvokeBuilder.MethodBuilder);
                EndInvokeBuilder.ParameterInfo.ApplyAttributes(this, EndInvokeBuilder.MethodBuilder);

                BeginInvokeBuilder.MethodBuilder.SetImplementationFlags(MethodImplAttributes.Runtime);
                EndInvokeBuilder.MethodBuilder.SetImplementationFlags(MethodImplAttributes.Runtime);
            }
        }
 public void CheckConstraints(IMemberContext mc)
 {
     foreach (Parameter p in parameters)
     {
         //
         // It's null for compiler generated types or special types like __arglist
         //
         if (p.TypeExpression != null)
         {
             ConstraintChecker.Check(mc, p.Type, p.TypeExpression.Location);
         }
     }
 }
Beispiel #4
0
        public override void Emit()
        {
            base.Emit();

            if (declarative_security != null)
            {
                foreach (var de in declarative_security)
                {
#if STATIC
                    TypeBuilder.__AddDeclarativeSecurity(de);
#else
                    TypeBuilder.AddDeclarativeSecurity(de.Key, de.Value);
#endif
                }
            }

            if (ReturnType.Type != null)
            {
                if (ReturnType.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic)
                {
                    return_attributes = new ReturnParameter(this, InvokeBuilder.MethodBuilder, Location);
                    Module.PredefinedAttributes.Dynamic.EmitAttribute(return_attributes.Builder);
                }
                else if (ReturnType.Type.HasDynamicElement)
                {
                    return_attributes = new ReturnParameter(this, InvokeBuilder.MethodBuilder, Location);
                    Module.PredefinedAttributes.Dynamic.EmitAttribute(return_attributes.Builder, ReturnType.Type, Location);
                }

                ConstraintChecker.Check(this, ReturnType.Type, ReturnType.Location);
            }

            Constructor.ParameterInfo.ApplyAttributes(this, Constructor.ConstructorBuilder);
            Constructor.ConstructorBuilder.SetImplementationFlags(MethodImplAttributes.Runtime);

            parameters.CheckConstraints(this);
            parameters.ApplyAttributes(this, InvokeBuilder.MethodBuilder);
            InvokeBuilder.MethodBuilder.SetImplementationFlags(MethodImplAttributes.Runtime);

            if (BeginInvokeBuilder != null)
            {
                BeginInvokeBuilder.ParameterInfo.ApplyAttributes(this, BeginInvokeBuilder.MethodBuilder);
                EndInvokeBuilder.ParameterInfo.ApplyAttributes(this, EndInvokeBuilder.MethodBuilder);

                BeginInvokeBuilder.MethodBuilder.SetImplementationFlags(MethodImplAttributes.Runtime);
                EndInvokeBuilder.MethodBuilder.SetImplementationFlags(MethodImplAttributes.Runtime);
            }
        }
Beispiel #5
0
        public override void Emit()
        {
            base.Emit();

            if (ReturnType.Type != null)
            {
                if (ReturnType.Type == Module.Compiler.BuiltinTypes.AsUntyped)
                {
                    return_attributes = new ReturnParameter(this, InvokeBuilder.MethodBuilder, Location);
                    Module.PredefinedAttributes.AsUntypedAttribute.EmitAttribute(return_attributes.Builder);
                }

                if (ReturnType.Type.BuiltinType == BuiltinTypeSpec.Type.Dynamic)
                {
                    return_attributes = return_attributes ?? new ReturnParameter(this, InvokeBuilder.MethodBuilder, Location);
                    Module.PredefinedAttributes.Dynamic.EmitAttribute(return_attributes.Builder);
                }
                else if (ReturnType.Type.HasDynamicElement)
                {
                    return_attributes = return_attributes ?? new ReturnParameter(this, InvokeBuilder.MethodBuilder, Location);
                    Module.PredefinedAttributes.Dynamic.EmitAttribute(return_attributes.Builder, ReturnType.Type, Location);
                }

                ConstraintChecker.Check(this, ReturnType.Type, ReturnType.Location);
            }

            Constructor.ParameterInfo.ApplyAttributes(this, Constructor.ConstructorBuilder);
            Constructor.ConstructorBuilder.SetImplementationFlags(MethodImplAttributes.Runtime);

            parameters.CheckConstraints(this);
            parameters.ApplyAttributes(this, InvokeBuilder.MethodBuilder);
            InvokeBuilder.MethodBuilder.SetImplementationFlags(MethodImplAttributes.Runtime);

            if (BeginInvokeBuilder != null)
            {
                BeginInvokeBuilder.ParameterInfo.ApplyAttributes(this, BeginInvokeBuilder.MethodBuilder);
                EndInvokeBuilder.ParameterInfo.ApplyAttributes(this, EndInvokeBuilder.MethodBuilder);

                BeginInvokeBuilder.MethodBuilder.SetImplementationFlags(MethodImplAttributes.Runtime);
                EndInvokeBuilder.MethodBuilder.SetImplementationFlags(MethodImplAttributes.Runtime);
            }
        }