получается в некоторых местах подобный код. он меня не радует, потому что мог бы быть покороче/пояснее.
например объединить циклы не получается, от true/false рябит в глазах.
def isPrimitiveValue(ty) //ty : TypeInfo
/*проверяет ty на то, примитивный он value или состоит только из примитивных value*/
if (ty.IsValueType)
if (ty.IsPrimitive)
true
else
def parse_type = man.NameTree.NamespaceTree.LookupType([ty.ToString()], 1)
if (parse_type.HasValue)
foreach(member is ClassMember.Field in (parse_type.Value :> TypeBuilder).GetParsedMembers())
when (!isPrimitiveValue(typer.BindFixedType(member.ty)))
return false
else
foreach(member is ClassMember.Field in ty.TypeInfo.GetMembers())
when (!isPrimitiveValue(typer.BindFixedType(member.ty)))
return false
true
else
false