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