24using System.Reflection.Metadata;
29 internal sealed class ParameterBuilder
32 readonly MethodBuilder method;
34 readonly
short sequence;
35 readonly StringHandle nameIndex;
46 internal ParameterBuilder(MethodBuilder method,
int sequence, ParameterAttributes attribs,
string name)
49 this.flags = (short)attribs;
50 this.sequence = (short)sequence;
51 this.nameIndex = name ==
null ? default : method.
ModuleBuilder.GetOrAddString(name);
55 internal int PseudoToken
59 if (lazyPseudoToken == 0)
60 lazyPseudoToken = method.ModuleBuilder.AllocPseudoToken();
62 return lazyPseudoToken;
80 get {
return sequence; }
90 get {
return (flags & (
short)ParameterAttributes.In) != 0; }
95 get {
return (flags & (
short)ParameterAttributes.Out) != 0; }
98 public bool IsOptional
100 get {
return (flags & (
short)ParameterAttributes.Optional) != 0; }
103 public void SetCustomAttribute(
ConstructorInfo con,
byte[] binaryAttribute)
105 SetCustomAttribute(
new CustomAttributeBuilder(con, binaryAttribute));
108 public void SetCustomAttribute(CustomAttributeBuilder customAttributeBuilder)
110 switch (customAttributeBuilder.KnownCA)
113 flags |= (short)ParameterAttributes.In;
116 flags |= (short)ParameterAttributes.Out;
118 case KnownCA.OptionalAttribute:
119 flags |= (short)ParameterAttributes.Optional;
121 case KnownCA.MarshalAsAttribute:
122 FieldMarshal.SetMarshalAsAttribute(method.ModuleBuilder, PseudoToken, customAttributeBuilder);
123 flags |= (short)ParameterAttributes.HasFieldMarshal;
126 method.ModuleBuilder.SetCustomAttribute(PseudoToken, customAttributeBuilder);
131 public void SetConstant(
object defaultValue)
133 flags |= (short)ParameterAttributes.HasDefault;
134 method.ModuleBuilder.AddConstant(PseudoToken, defaultValue);
137 internal void WriteMetadata()
139 method.ModuleBuilder.Metadata.AddParameter(
140 (
System.Reflection.ParameterAttributes)flags,
145 internal void FixupToken(
int parameterToken)
147 if (lazyPseudoToken != 0)
148 method.ModuleBuilder.RegisterTokenFixup(lazyPseudoToken, parameterToken);
IKVM.Reflection.Module Module
IKVM.Reflection.ConstructorInfo ConstructorInfo
IKVM.Reflection.MethodInfo MethodInfo
global::java.lang.invoke.LambdaForm.Name Name
KnownCA
These are the pseudo-custom attributes that are recognized by name by the runtime (i....