2222 preferGenericArg,
2323 preferTypeName,
2424 preferResolved, # fully resolved symbols
25+ preferMixed, # show symbol + resolved symbols if it differs, eg: seq[cint{int32}, float]
2526
2627proc typeToString * (typ: PType ; prefer: TPreferedDesc = preferName): string
2728template `$` * (typ: PType ): string = typeToString (typ)
@@ -437,7 +438,8 @@ const
437438 " and" , " or" , " not" , " any" , " static" , " TypeFromExpr" , " FieldAccessor" ,
438439 " void" ]
439440
440- const preferToResolveSymbols = {preferName, preferTypeName, preferModuleInfo, preferGenericArg, preferResolved}
441+ const preferToResolveSymbols = {preferName, preferTypeName, preferModuleInfo,
442+ preferGenericArg, preferResolved, preferMixed}
441443
442444template bindConcreteTypeToUserTypeClass * (tc, concrete: PType ) =
443445 tc.sons.add concrete
@@ -458,8 +460,8 @@ proc addTypeFlags(name: var string, typ: PType) {.inline.} =
458460proc typeToString (typ: PType , prefer: TPreferedDesc = preferName): string =
459461 let preferToplevel = prefer
460462 proc getPrefer (prefer: TPreferedDesc ): TPreferedDesc =
461- if preferToplevel == preferResolved:
462- preferResolved # preferResolved is sticky
463+ if preferToplevel in { preferResolved, preferMixed} :
464+ preferToplevel # sticky option
463465 else :
464466 prefer
465467
@@ -474,7 +476,7 @@ proc typeToString(typ: PType, prefer: TPreferedDesc = preferName): string =
474476 result = t.sym.name.s & " literal(" & $ t.n.intVal & " )"
475477 elif t.kind == tyAlias and t.sons[0 ].kind != tyAlias:
476478 result = typeToString (t.sons[0 ])
477- elif prefer == preferResolved:
479+ elif prefer in { preferResolved, preferMixed} :
478480 case t.kind
479481 of IntegralTypes + {tyFloat.. tyFloat128} + {tyString, tyCString}:
480482 result = typeToStr[t.kind]
@@ -485,6 +487,8 @@ proc typeToString(typ: PType, prefer: TPreferedDesc = preferName): string =
485487 result = typeToString (t.lastSon.lastSon)
486488 else :
487489 result = t.sym.name.s
490+ if prefer == preferMixed and result != t.sym.name.s:
491+ result = t.sym.name.s & " {" & result & " }"
488492 elif prefer in {preferName, preferTypeName} or t.sym.owner.isNil:
489493 # note: should probably be: {preferName, preferTypeName, preferGenericArg}
490494 result = t.sym.name.s
0 commit comments