IKVM11  11
Java SE 11 Virtual Machine for .NET
Loading...
Searching...
No Matches
IKVM.Reflection.Signature Class Referenceabstract
Inheritance diagram for IKVM.Reflection.Signature:
IKVM.Reflection.FieldSignature IKVM.Reflection.MethodSignature IKVM.Reflection.PropertySignature

Static Protected Member Functions

static Type ReadType (ModuleReader module, ByteReader br, IGenericContext context)
 
static Type ReadRetType (ModuleReader module, ByteReader br, IGenericContext context)
 
static Type ReadParam (ModuleReader module, ByteReader br, IGenericContext context)
 
static void WriteType (ModuleBuilder module, ByteBuffer bb, Type type)
 
static void WriteCustomModifiers (ModuleBuilder module, ByteBuffer bb, CustomModifiers modifiers)
 
static Type[] BindTypeParameters (IGenericBinder binder, Type[] types)
 

Detailed Description

Definition at line 40 of file Signature.cs.

Member Function Documentation

◆ BindTypeParameters()

static Type[] IKVM.Reflection.Signature.BindTypeParameters ( IGenericBinder binder,
Type[] types )
staticprotected

Definition at line 546 of file Signature.cs.

547 {
548 if (types == null || types.Length == 0)
549 return Type.EmptyTypes;
550
551 var expanded = new Type[types.Length];
552 for (var i = 0; i < types.Length; i++)
553 expanded[i] = types[i].BindTypeParameters(binder);
554
555 return expanded;
556 }
IKVM.Reflection.Type Type
static Type[] BindTypeParameters(IGenericBinder binder, Type[] types)
Definition Signature.cs:546

◆ ReadParam()

static Type IKVM.Reflection.Signature.ReadParam ( ModuleReader module,
ByteReader br,
IGenericContext context )
staticprotected

Definition at line 327 of file Signature.cs.

328 {
329 switch (br.PeekByte())
330 {
331 case ELEMENT_TYPE_TYPEDBYREF:
332 br.ReadByte();
333 return module.Universe.System_TypedReference;
334 default:
335 return ReadTypeOrByRef(module, br, context);
336 }
337 }

◆ ReadRetType()

static Type IKVM.Reflection.Signature.ReadRetType ( ModuleReader module,
ByteReader br,
IGenericContext context )
staticprotected

Definition at line 312 of file Signature.cs.

313 {
314 switch (br.PeekByte())
315 {
316 case ELEMENT_TYPE_VOID:
317 br.ReadByte();
318 return module.Universe.System_Void;
319 case ELEMENT_TYPE_TYPEDBYREF:
320 br.ReadByte();
321 return module.Universe.System_TypedReference;
322 default:
323 return ReadTypeOrByRef(module, br, context);
324 }
325 }

◆ ReadType()

static Type IKVM.Reflection.Signature.ReadType ( ModuleReader module,
ByteReader br,
IGenericContext context )
staticprotected

Definition at line 202 of file Signature.cs.

203 {
204 CustomModifiers mods;
205 switch (br.ReadByte())
206 {
207 case ELEMENT_TYPE_CLASS:
208 return ReadTypeDefOrRefEncoded(module, br, context).MarkNotValueType();
209 case ELEMENT_TYPE_VALUETYPE:
210 return ReadTypeDefOrRefEncoded(module, br, context).MarkValueType();
211 case ELEMENT_TYPE_BOOLEAN:
212 return module.Universe.System_Boolean;
213 case ELEMENT_TYPE_CHAR:
214 return module.Universe.System_Char;
215 case ELEMENT_TYPE_I1:
216 return module.Universe.System_SByte;
217 case ELEMENT_TYPE_U1:
218 return module.Universe.System_Byte;
219 case ELEMENT_TYPE_I2:
220 return module.Universe.System_Int16;
221 case ELEMENT_TYPE_U2:
222 return module.Universe.System_UInt16;
223 case ELEMENT_TYPE_I4:
224 return module.Universe.System_Int32;
225 case ELEMENT_TYPE_U4:
226 return module.Universe.System_UInt32;
227 case ELEMENT_TYPE_I8:
228 return module.Universe.System_Int64;
229 case ELEMENT_TYPE_U8:
230 return module.Universe.System_UInt64;
231 case ELEMENT_TYPE_R4:
232 return module.Universe.System_Single;
233 case ELEMENT_TYPE_R8:
234 return module.Universe.System_Double;
235 case ELEMENT_TYPE_I:
236 return module.Universe.System_IntPtr;
237 case ELEMENT_TYPE_U:
238 return module.Universe.System_UIntPtr;
239 case ELEMENT_TYPE_STRING:
240 return module.Universe.System_String;
241 case ELEMENT_TYPE_OBJECT:
242 return module.Universe.System_Object;
243 case ELEMENT_TYPE_VAR:
244 return context.GetGenericTypeArgument(br.ReadCompressedUInt());
245 case ELEMENT_TYPE_MVAR:
246 return context.GetGenericMethodArgument(br.ReadCompressedUInt());
247 case ELEMENT_TYPE_GENERICINST:
248 return ReadGenericInst(module, br, context);
249 case ELEMENT_TYPE_SZARRAY:
250 mods = CustomModifiers.Read(module, br, context);
251 return ReadType(module, br, context).__MakeArrayType(mods);
252 case ELEMENT_TYPE_ARRAY:
253 mods = CustomModifiers.Read(module, br, context);
254 return ReadType(module, br, context).__MakeArrayType(br.ReadCompressedUInt(), ReadArraySizes(br), ReadArrayBounds(br), mods);
255 case ELEMENT_TYPE_PTR:
256 mods = CustomModifiers.Read(module, br, context);
257 return ReadTypeOrVoid(module, br, context).__MakePointerType(mods);
258 case ELEMENT_TYPE_FNPTR:
259 return ReadFunctionPointer(module, br, context);
260 default:
261 throw new BadImageFormatException();
262 }
263 }
static Type ReadType(ModuleReader module, ByteReader br, IGenericContext context)
Definition Signature.cs:202

◆ WriteCustomModifiers()

static void IKVM.Reflection.Signature.WriteCustomModifiers ( ModuleBuilder module,
ByteBuffer bb,
CustomModifiers modifiers )
staticprotected

Definition at line 419 of file Signature.cs.

420 {
421 foreach (var entry in modifiers)
422 {
423 bb.Write(entry.IsRequired ? ELEMENT_TYPE_CMOD_REQD : ELEMENT_TYPE_CMOD_OPT);
424 bb.WriteTypeDefOrRefEncoded(module.GetTypeTokenForMemberRef(entry.Type));
425 }
426 }

◆ WriteType()

static void IKVM.Reflection.Signature.WriteType ( ModuleBuilder module,
ByteBuffer bb,
Type type )
staticprotected

Definition at line 339 of file Signature.cs.

340 {
341 while (type.HasElementType)
342 {
343 byte sigElementType = type.SigElementType;
344 bb.Write(sigElementType);
345 if (sigElementType == ELEMENT_TYPE_ARRAY)
346 {
347 // LAMESPEC the Type production (23.2.12) doesn't include CustomMod* for arrays, but the verifier allows it and ildasm also supports it
348 WriteCustomModifiers(module, bb, type.__GetCustomModifiers());
349 WriteType(module, bb, type.GetElementType());
350 bb.WriteCompressedUInt(type.GetArrayRank());
351
352 var sizes = type.__GetArraySizes();
353 bb.WriteCompressedUInt(sizes.Length);
354 for (int i = 0; i < sizes.Length; i++)
355 bb.WriteCompressedUInt(sizes[i]);
356
357 var lobounds = type.__GetArrayLowerBounds();
358 bb.WriteCompressedUInt(lobounds.Length);
359 for (int i = 0; i < lobounds.Length; i++)
360 bb.WriteCompressedInt(lobounds[i]);
361
362 return;
363 }
364 WriteCustomModifiers(module, bb, type.__GetCustomModifiers());
365 type = type.GetElementType();
366 }
367
368 if (type.__IsBuiltIn)
369 {
370 bb.Write(type.SigElementType);
371 }
372 else if (type.IsGenericParameter)
373 {
374 bb.Write(type.SigElementType);
375 bb.WriteCompressedUInt(type.GenericParameterPosition);
376 }
377 else if (!type.__IsMissing && type.IsGenericType)
378 {
379 WriteGenericSignature(module, bb, type);
380 }
381 else if (type.IsFunctionPointer)
382 {
383 bb.Write(ELEMENT_TYPE_FNPTR);
384 WriteStandAloneMethodSig(module, bb, type.__MethodSignature);
385 }
386 else
387 {
388 if (type.IsValueType)
389 bb.Write(ELEMENT_TYPE_VALUETYPE);
390 else
391 bb.Write(ELEMENT_TYPE_CLASS);
392
393 bb.WriteTypeDefOrRefEncoded(module.GetTypeToken(type).Token);
394 }
395 }
static void WriteCustomModifiers(ModuleBuilder module, ByteBuffer bb, CustomModifiers modifiers)
Definition Signature.cs:419
static void WriteType(ModuleBuilder module, ByteBuffer bb, Type type)
Definition Signature.cs:339

The documentation for this class was generated from the following file: