in SharpGen/Transform/TypeRegistry.cs [77:132]
public static CsFundamentalType ImportPrimitiveType(string typeName)
{
if (typeName == null)
return null;
typeName = typeName.Trim();
if (typeName.Length == 0)
return null;
if (PrimitiveTypeEntriesByName.TryGetValue(typeName, out var entry))
return entry;
var typeNameParts = typeName.Split(new[] {'*'}, 2, StringSplitOptions.RemoveEmptyEntries);
var baseTypeName = typeNameParts[0].Trim();
var pointerCountInt = typeName.Count(x => x == '*');
var pointerCount = checked((byte) pointerCountInt);
CsFundamentalType FindOrCreate(PrimitiveTypeCode typeCode)
{
PrimitiveTypeIdentity identity = new(typeCode, pointerCount);
return FindPrimitiveTypeImpl(identity, baseTypeName, typeName);
}
switch (pointerCount)
{
case 0:
break;
case 1 when typeName == "void*":
throw new Exception(
$"void* is supposed to have been found in {nameof(PrimitiveTypeEntriesByName)}"
);
default:
if (PrimitiveTypeEntriesByName.TryGetValue(baseTypeName, out var baseEntry))
{
// ReSharper disable once PossibleInvalidOperationException
entry = FindOrCreate(baseEntry.PrimitiveTypeIdentity.Value.Type);
}
break;
}
if (entry == null)
{
var type = Type.GetType(baseTypeName);
var baseEntry = PrimitiveRuntimeTypesByCode.Where(x => x.Value == type).Take(1).ToArray();
if (baseEntry.Length == 1)
entry = FindOrCreate(baseEntry[0].Key);
}
return entry;
}