Exemple #1
0
        private MethodToken GetTokenNoLock()
        {
            Debug.Assert(m_tkMethod.Token == 0, "m_tkMethod should not have been initialized");

            int sigLength;

            byte[]        sigBytes = GetMethodSignature().InternalGetSignature(out sigLength);
            ModuleBuilder module   = m_module;

            int token = TypeBuilder.DefineMethod(JitHelpers.GetQCallModuleOnStack(ref module), m_containingType.MetadataTokenInternal, m_strName, sigBytes, sigLength, Attributes);

            m_tkMethod = new MethodToken(token);

            if (m_inst != null)
            {
                foreach (GenericTypeParameterBuilder tb in m_inst)
                {
                    if (!tb.m_type.IsCreated())
                    {
                        tb.m_type.CreateType();
                    }
                }
            }

            TypeBuilder.SetMethodImpl(JitHelpers.GetQCallModuleOnStack(ref module), token, m_dwMethodImplFlags);

            return(m_tkMethod);
        }
Exemple #2
0
        internal string GetFullyQualifiedName()
        {
            string?       fullyQualifiedName = null;
            RuntimeModule thisAsLocal        = this;

            GetFullyQualifiedName(JitHelpers.GetQCallModuleOnStack(ref thisAsLocal), JitHelpers.GetStringHandleOnStack(ref fullyQualifiedName));
            return(fullyQualifiedName !);
        }
Exemple #3
0
        public void SetOffset(int iOffset)
        {
            m_typeBuilder.ThrowIfCreated();

            ModuleBuilder module = m_typeBuilder.GetModuleBuilder();

            TypeBuilder.SetFieldLayoutOffset(JitHelpers.GetQCallModuleOnStack(ref module), GetToken().Token, iOffset);
        }
Exemple #4
0
        /// <summary>
        /// Returns the HInstance for this module.  Returns -1 if the module doesn't have
        /// an HInstance.  In Memory (Dynamic) Modules won't have an HInstance.
        /// </summary>
        public static IntPtr GetHINSTANCE(Module m)
        {
            if (m is null)
            {
                throw new ArgumentNullException(nameof(m));
            }

            if (m is RuntimeModule rtModule)
            {
                return(GetHINSTANCE(JitHelpers.GetQCallModuleOnStack(ref rtModule)));
            }

            return((IntPtr)(-1));
        }
Exemple #5
0
        public void SetImplementationFlags(MethodImplAttributes attributes)
        {
            ThrowIfGeneric();

            m_containingType.ThrowIfCreated();

            m_dwMethodImplFlags = attributes;

            m_canBeRuntimeImpl = true;

            ModuleBuilder module = m_module;

            TypeBuilder.SetMethodImpl(JitHelpers.GetQCallModuleOnStack(ref module), MetadataTokenInternal, attributes);
        }
Exemple #6
0
        internal FieldBuilder(TypeBuilder typeBuilder, string fieldName, Type type,
                              Type[]?requiredCustomModifiers, Type[]?optionalCustomModifiers, FieldAttributes attributes)
        {
            if (fieldName == null)
            {
                throw new ArgumentNullException(nameof(fieldName));
            }

            if (fieldName.Length == 0)
            {
                throw new ArgumentException(SR.Argument_EmptyName, nameof(fieldName));
            }

            if (fieldName[0] == '\0')
            {
                throw new ArgumentException(SR.Argument_IllegalName, nameof(fieldName));
            }

            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }

            if (type == typeof(void))
            {
                throw new ArgumentException(SR.Argument_BadFieldType);
            }

            m_fieldName   = fieldName;
            m_typeBuilder = typeBuilder;
            m_fieldType   = type;
            m_Attributes  = attributes & ~FieldAttributes.ReservedMask;

            SignatureHelper sigHelp = SignatureHelper.GetFieldSigHelper(m_typeBuilder.Module);

            sigHelp.AddArgument(type, requiredCustomModifiers, optionalCustomModifiers);

            int sigLength;

            byte[] signature = sigHelp.InternalGetSignature(out sigLength);

            ModuleBuilder module = m_typeBuilder.GetModuleBuilder();

            m_fieldTok = TypeBuilder.DefineField(JitHelpers.GetQCallModuleOnStack(ref module),
                                                 typeBuilder.TypeToken.Token, fieldName, signature, sigLength, m_Attributes);

            m_tkField = new FieldToken(m_fieldTok, type);
        }
Exemple #7
0
        private void SetMethodSemantics(MethodBuilder mdBuilder, MethodSemanticsAttributes semantics)
        {
            if (mdBuilder == null)
            {
                throw new ArgumentNullException(nameof(mdBuilder));
            }

            m_containingType.ThrowIfCreated();
            ModuleBuilder module = m_moduleBuilder;

            TypeBuilder.DefineMethodSemantics(
                JitHelpers.GetQCallModuleOnStack(ref module),
                m_prToken.Token,
                semantics,
                mdBuilder.GetToken().Token);
        }
Exemple #8
0
        public override Type?GetType(string className, bool throwOnError, bool ignoreCase)
        {
            // throw on null strings regardless of the value of "throwOnError"
            if (className == null)
            {
                throw new ArgumentNullException(nameof(className));
            }

            RuntimeType?  retType     = null;
            object?       keepAlive   = null;
            RuntimeModule thisAsLocal = this;

            GetType(JitHelpers.GetQCallModuleOnStack(ref thisAsLocal), className, throwOnError, ignoreCase, JitHelpers.GetObjectHandleOnStack(ref retType), JitHelpers.GetObjectHandleOnStack(ref keepAlive));
            GC.KeepAlive(keepAlive);
            return(retType);
        }
Exemple #9
0
        internal bool IsTransientInternal()
        {
            RuntimeModule thisAsLocal = this;

            return(RuntimeModule.nIsTransientInternal(JitHelpers.GetQCallModuleOnStack(ref thisAsLocal)));
        }
Exemple #10
0
        internal void SetData(byte[]?data, int size)
        {
            ModuleBuilder module = m_typeBuilder.GetModuleBuilder();

            ModuleBuilder.SetFieldRVAContent(JitHelpers.GetQCallModuleOnStack(ref module), m_tkField.Token, data, size);
        }