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)
@@ -413,7 +414,8 @@ const
413414 " and" , " or" , " not" , " any" , " static" , " TypeFromExpr" , " FieldAccessor" ,
414415 " void" ]
415416
416- const preferToResolveSymbols = {preferName, preferTypeName, preferModuleInfo, preferGenericArg, preferResolved}
417+ const preferToResolveSymbols = {preferName, preferTypeName, preferModuleInfo,
418+ preferGenericArg, preferResolved, preferMixed}
417419
418420template bindConcreteTypeToUserTypeClass * (tc, concrete: PType ) =
419421 tc.sons.add concrete
@@ -434,8 +436,8 @@ proc addTypeFlags(name: var string, typ: PType) {.inline.} =
434436proc typeToString (typ: PType , prefer: TPreferedDesc = preferName): string =
435437 let preferToplevel = prefer
436438 proc getPrefer (prefer: TPreferedDesc ): TPreferedDesc =
437- if preferToplevel == preferResolved:
438- preferResolved # preferResolved is sticky
439+ if preferToplevel in { preferResolved, preferMixed} :
440+ preferToplevel # sticky option
439441 else :
440442 prefer
441443
@@ -450,7 +452,7 @@ proc typeToString(typ: PType, prefer: TPreferedDesc = preferName): string =
450452 result = t.sym.name.s & " literal(" & $ t.n.intVal & " )"
451453 elif t.kind == tyAlias and t.sons[0 ].kind != tyAlias:
452454 result = typeToString (t.sons[0 ])
453- elif prefer == preferResolved:
455+ elif prefer in { preferResolved, preferMixed} :
454456 case t.kind
455457 of IntegralTypes + {tyFloat.. tyFloat128} + {tyString, tyCString}:
456458 result = typeToStr[t.kind]
@@ -461,6 +463,8 @@ proc typeToString(typ: PType, prefer: TPreferedDesc = preferName): string =
461463 result = typeToString (t.lastSon.lastSon)
462464 else :
463465 result = t.sym.name.s
466+ if prefer == preferMixed and result != t.sym.name.s:
467+ result = t.sym.name.s & " {" & result & " }"
464468 elif prefer in {preferName, preferTypeName} or t.sym.owner.isNil:
465469 # note: should probably be: {preferName, preferTypeName, preferGenericArg}
466470 result = t.sym.name.s
0 commit comments