Merge pull request #3295 from nanoant/patch/fix-type-to-string-flags
typeToString: Fix shared/not nil on complex types
This commit is contained in:
commit
5e5d5b6fe0
1 changed files with 11 additions and 6 deletions
|
|
@ -411,6 +411,10 @@ const
|
||||||
|
|
||||||
const preferToResolveSymbols = {preferName, preferModuleInfo, preferGenericArg}
|
const preferToResolveSymbols = {preferName, preferModuleInfo, preferGenericArg}
|
||||||
|
|
||||||
|
proc addTypeFlags(name: var string, typ: PType) {.inline.} =
|
||||||
|
if tfShared in typ.flags: name = "shared " & name
|
||||||
|
if tfNotNil in typ.flags: name.add(" not nil")
|
||||||
|
|
||||||
proc typeToString(typ: PType, prefer: TPreferedDesc = preferName): string =
|
proc typeToString(typ: PType, prefer: TPreferedDesc = preferName): string =
|
||||||
var t = typ
|
var t = typ
|
||||||
result = ""
|
result = ""
|
||||||
|
|
@ -418,11 +422,13 @@ proc typeToString(typ: PType, prefer: TPreferedDesc = preferName): string =
|
||||||
if prefer in preferToResolveSymbols and t.sym != nil and
|
if prefer in preferToResolveSymbols and t.sym != nil and
|
||||||
sfAnon notin t.sym.flags:
|
sfAnon notin t.sym.flags:
|
||||||
if t.kind == tyInt and isIntLit(t):
|
if t.kind == tyInt and isIntLit(t):
|
||||||
return t.sym.name.s & " literal(" & $t.n.intVal & ")"
|
result = t.sym.name.s & " literal(" & $t.n.intVal & ")"
|
||||||
if prefer == preferName or t.sym.owner.isNil:
|
elif prefer == preferName or t.sym.owner.isNil:
|
||||||
return t.sym.name.s
|
result = t.sym.name.s
|
||||||
else:
|
else:
|
||||||
return t.sym.owner.name.s & '.' & t.sym.name.s
|
result = t.sym.owner.name.s & '.' & t.sym.name.s
|
||||||
|
result.addTypeFlags(t)
|
||||||
|
return
|
||||||
case t.kind
|
case t.kind
|
||||||
of tyInt:
|
of tyInt:
|
||||||
if not isIntLit(t) or prefer == preferExported:
|
if not isIntLit(t) or prefer == preferExported:
|
||||||
|
|
@ -563,8 +569,7 @@ proc typeToString(typ: PType, prefer: TPreferedDesc = preferName): string =
|
||||||
result = typeToStr[t.kind] % typeToString(t.sons[0])
|
result = typeToStr[t.kind] % typeToString(t.sons[0])
|
||||||
else:
|
else:
|
||||||
result = typeToStr[t.kind]
|
result = typeToStr[t.kind]
|
||||||
if tfShared in t.flags: result = "shared " & result
|
result.addTypeFlags(t)
|
||||||
if tfNotNil in t.flags: result.add(" not nil")
|
|
||||||
|
|
||||||
proc resultType(t: PType): PType =
|
proc resultType(t: PType): PType =
|
||||||
assert(t.kind == tyProc)
|
assert(t.kind == tyProc)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue