Mosa.Compiler.Framework.MosaTypeLayout.IsCompoundType C# (CSharp) Method

IsCompoundType() public method

public IsCompoundType ( MosaType type ) : bool
type MosaType
return bool
        public bool IsCompoundType(MosaType type)
        {
            // i.e. whether copying of the type requires multiple move
            int? primitiveSize = type.GetPrimitiveSize(NativePointerSize);
            if (primitiveSize != null && primitiveSize > 8)
                return true;

            if (!type.IsUserValueType)
                return false;

            int typeSize = GetTypeSize(type);
            if (typeSize > NativePointerSize)
                return true;

            return false;
        }

Usage Example

Beispiel #1
0
 /// <summary>
 /// Gets the type memory requirements.
 /// </summary>
 /// <param name="typeLayout">The type layouts.</param>
 /// <param name="type">The signature type.</param>
 /// <param name="size">Receives the memory size of the type.</param>
 /// <param name="alignment">Receives alignment requirements of the type.</param>
 public override void GetTypeRequirements(MosaTypeLayout typeLayout, MosaType type, out int size, out int alignment)
 {
     if (type.IsUI8 || type.IsR8 || !type.IsValueType || type.IsPointer)
     {
         size = 8;
         alignment = 8;
     }
     else if (typeLayout.IsCompoundType(type))
     {
         size = typeLayout.GetTypeSize(type);
         alignment = 8;
     }
     else
     {
         size = 4;
         alignment = 4;
     }
 }