/// <summary>
        /// Determines the memory layout of the provided type signature at runtime.
        /// </summary>
        /// <param name="type">The type.</param>
        /// <param name="is32Bit">Determines whether memory addresses are 32 bit or 64 bit wide.</param>
        /// <returns>The implied memory layout of the type.</returns>
        public static TypeMemoryLayout GetImpliedMemoryLayout(this ITypeDefOrRef type, bool is32Bit)
        {
            var layoutDetector = new TypeMemoryLayoutDetector(is32Bit);

            return(layoutDetector.VisitTypeDefOrRef(type));
        }
        /// <summary>
        /// Determines the memory layout of the provided type signature at runtime.
        /// </summary>
        /// <param name="type">The type.</param>
        /// <param name="is32Bit">Determines whether memory addresses are 32 bit or 64 bit wide.</param>
        /// <returns>The implied memory layout of the type.</returns>
        public static TypeMemoryLayout GetImpliedMemoryLayout(this TypeSignature type, bool is32Bit)
        {
            var layoutDetector = new TypeMemoryLayoutDetector(is32Bit);

            return(type.AcceptVisitor(layoutDetector));
        }