Boo.Lang.Compiler.TypeSystem.TypeSystemServices.SizeOf C# (CSharp) Method

SizeOf() public method

public SizeOf ( IType type ) : int
type IType
return int
        public virtual int SizeOf(IType type)
        {
            if (type.IsPointer)
                type = type.ElementType;
            if (null == type || !type.IsValueType)
                return 0;

            var et = type as ExternalType;
            if (null != et)
                return Marshal.SizeOf(et.ActualType);

            int size = 0;
            var it = type as InternalClass;
            if (null == it)
                return 0;

            //FIXME: TODO: warning if no predefined size => StructLayoutAttribute
            foreach (Field f in it.TypeDefinition.Members.OfType<Field>())
            {
                int fsize = SizeOf(f.Type.Entity as IType);
                if (0 == fsize)
                    return 0; //cannot be unmanaged
                size += fsize;
            }
            return size;
        }
TypeSystemServices