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(); }
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); } } }
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); } }
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); } }