Exemple #1
0
        /// <summary>
        /// Gets a type's encoded size in bytes.
        /// </summary>
        /// <param name="type">A type.</param>
        /// <param name="metadataSize">The object's metadata size.</param>
        /// <returns>The type's size in bytes, including the size of the metadata.</returns>
        public int SizeOfWithMetadata(IType type, out int metadataSize)
        {
            var ext = GCInterface.GetMetadataExtendedType(CompiledModule.ImportType(type), CompiledModule);

            metadataSize = (int)LLVM.OffsetOfElement(Target, ext, 1);
            return((int)LLVM.StoreSizeOfType(Target, ext));
        }
Exemple #2
0
        /// <summary>
        /// Gets the offset of a particular field.
        /// </summary>
        /// <param name="field">A non-static field.</param>
        /// <returns>The field's offset in its parent type's layout.</returns>
        public int GetFieldOffset(IField field)
        {
            var parent = CompiledModule.ImportType(field.ParentType);
            var index  = CompiledModule.GetFieldIndex(field);

            return((int)LLVM.OffsetOfElement(Target, parent, (uint)index));
        }
Exemple #3
0
 /// <summary>
 /// Gets a type's encoded size in bytes.
 /// </summary>
 /// <param name="type">A type.</param>
 /// <returns>The type's size in bytes.</returns>
 public int SizeOf(IType type)
 {
     return((int)LLVM.StoreSizeOfType(Target, CompiledModule.ImportType(type)));
 }