mirror of
https://github.com/Smaug123/WoofWare.PawPrint
synced 2025-10-11 08:48:38 +00:00
Implement sizeof completely (#119)
This commit is contained in:
@@ -33,6 +33,20 @@ type ConcreteType<'typeGeneric> =
|
||||
_Generics : ImmutableArray<'typeGeneric>
|
||||
}
|
||||
|
||||
override this.ToString () : string =
|
||||
let basic = $"%s{this.Assembly.Name}.%s{this.Namespace}.%s{this.Name}"
|
||||
|
||||
let generics =
|
||||
if this.Generics.IsEmpty then
|
||||
""
|
||||
else
|
||||
this.Generics
|
||||
|> Seq.map string
|
||||
|> String.concat ", "
|
||||
|> fun x -> "<" + x + ">"
|
||||
|
||||
basic + generics
|
||||
|
||||
member this.Assembly : AssemblyName = this._AssemblyName
|
||||
member this.Definition : ComparableTypeDefinitionHandle = this._Definition
|
||||
member this.Generics : ImmutableArray<'typeGeneric> = this._Generics
|
||||
|
@@ -57,11 +57,10 @@ module FieldInfo =
|
||||
let fieldSig = def.DecodeSignature (TypeDefn.typeProvider assembly, ())
|
||||
let declaringType = def.GetDeclaringType ()
|
||||
|
||||
let typeGenerics =
|
||||
mr.GetTypeDefinition(declaringType).GetGenericParameters ()
|
||||
|> GenericParameter.readAll mr
|
||||
|
||||
let decType = mr.GetTypeDefinition declaringType
|
||||
|
||||
let typeGenerics = decType.GetGenericParameters () |> GenericParameter.readAll mr
|
||||
|
||||
let declaringTypeNamespace = mr.GetString decType.Namespace
|
||||
let declaringTypeName = mr.GetString decType.Name
|
||||
|
||||
|
@@ -29,6 +29,10 @@ type InterfaceImplementation =
|
||||
RelativeToAssembly : AssemblyName
|
||||
}
|
||||
|
||||
type Layout =
|
||||
| Default
|
||||
| Custom of size : int * packingSize : int
|
||||
|
||||
/// <summary>
|
||||
/// Represents detailed information about a type definition in a .NET assembly.
|
||||
/// This is a strongly-typed representation of TypeDefinition from System.Reflection.Metadata.
|
||||
@@ -93,6 +97,8 @@ type TypeInfo<'generic, 'fieldGeneric> =
|
||||
Events : EventDefn ImmutableArray
|
||||
|
||||
ImplementedInterfaces : InterfaceImplementation ImmutableArray
|
||||
|
||||
Layout : Layout
|
||||
}
|
||||
|
||||
member this.IsInterface = this.TypeAttributes.HasFlag TypeAttributes.Interface
|
||||
@@ -213,6 +219,7 @@ module TypeInfo =
|
||||
Generics = gen
|
||||
Events = t.Events
|
||||
ImplementedInterfaces = t.ImplementedInterfaces
|
||||
Layout = t.Layout
|
||||
}
|
||||
|
||||
let mapGeneric<'a, 'b, 'field> (f : 'a -> 'b) (t : TypeInfo<'a, 'field>) : TypeInfo<'b, 'field> =
|
||||
@@ -308,6 +315,14 @@ module TypeInfo =
|
||||
|
||||
result.ToImmutable ()
|
||||
|
||||
let layout =
|
||||
let l = typeDef.GetLayout ()
|
||||
|
||||
if l.IsDefault then
|
||||
Layout.Default
|
||||
else
|
||||
Layout.Custom (size = l.Size, packingSize = l.PackingSize)
|
||||
|
||||
{
|
||||
Namespace = ns
|
||||
Name = name
|
||||
@@ -323,6 +338,7 @@ module TypeInfo =
|
||||
Events = events
|
||||
ImplementedInterfaces = interfaces
|
||||
DeclaringType = declaringType
|
||||
Layout = layout
|
||||
}
|
||||
|
||||
let isBaseType<'corelib>
|
||||
|
Reference in New Issue
Block a user