Esempio n. 1
0
 MemberRef CreateInitializeArrayMethod()
 {
     if (initializeArrayMethod == null)
     {
         var runtimeHelpersType     = DotNetUtils.FindOrCreateTypeRef(module, module.CorLibTypes.AssemblyRef, "System.Runtime.CompilerServices", "RuntimeHelpers", false);
         var systemArrayType        = DotNetUtils.FindOrCreateTypeRef(module, module.CorLibTypes.AssemblyRef, "System", "Array", false);
         var runtimeFieldHandleType = DotNetUtils.FindOrCreateTypeRef(module, module.CorLibTypes.AssemblyRef, "System", "RuntimeFieldHandle", true);
         var methodSig = MethodSig.CreateStatic(module.CorLibTypes.Void, systemArrayType, runtimeFieldHandleType);
         initializeArrayMethod = module.UpdateRowId(new MemberRefUser(module, "InitializeArray", methodSig, runtimeHelpersType.TypeDefOrRef));
     }
     return(initializeArrayMethod);
 }
Esempio n. 2
0
        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);
        }