TypeDef GetArrayType(long size, ModuleDef ctx) { CreateOurType(ctx); TypeDef arrayType; if (sizeToArrayType.TryGetValue(size, out arrayType)) { return(arrayType); } if (valueType == null) { var typeRef = ctx.UpdateRowId(new TypeRefUser(ctx, "System", "ValueType", ctx.CorLibTypes.AssemblyRef)); valueType = new ClassSig(typeRef); } arrayType = new TypeDefUser("", string.Format("__StaticArrayInitTypeSize={0}", size), valueType.TypeDefOrRef); ctx.UpdateRowId(arrayType); arrayType.Attributes = dnlib.DotNet.TypeAttributes.NestedPrivate | dnlib.DotNet.TypeAttributes.ExplicitLayout | dnlib.DotNet.TypeAttributes.Class | dnlib.DotNet.TypeAttributes.Sealed | dnlib.DotNet.TypeAttributes.AnsiClass; ourType.NestedTypes.Add(arrayType); sizeToArrayType[size] = arrayType; arrayType.ClassLayout = new ClassLayoutUser(1, (uint)size); return(arrayType); }
TypeDef getArrayType(long size) { createOurType(); TypeDef arrayType; if (sizeToArrayType.TryGetValue(size, out arrayType)) return arrayType; if (valueType == null) valueType = DotNetUtils.findOrCreateTypeRef(module, module.CorLibTypes.AssemblyRef, "System", "ValueType", false); arrayType = new TypeDefUser("", string.Format("__StaticArrayInitTypeSize={0}", size), valueType.TypeDefOrRef); module.UpdateRowId(arrayType); arrayType.Attributes = TypeAttributes.NestedPrivate | TypeAttributes.ExplicitLayout | TypeAttributes.Class | TypeAttributes.Sealed | TypeAttributes.AnsiClass; ourType.NestedTypes.Add(arrayType); sizeToArrayType[size] = arrayType; arrayType.ClassLayout = new ClassLayoutUser(1, (uint)size); return arrayType; }