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