This commit is contained in:
Andreas Rumpf 2016-12-22 09:13:22 +01:00
commit 7bd473c59b
2 changed files with 28 additions and 14 deletions

View file

@ -122,11 +122,20 @@ proc typeName(typ: PType): Rope =
else: else:
~"TY" ~"TY"
const
irrelevantForBackend = {tyGenericBody, tyGenericInst, tyGenericInvocation,
tyDistinct, tyRange, tyStatic, tyAlias}
proc getTypeName(m: BModule; typ: PType; sig: SigHash): Rope = proc getTypeName(m: BModule; typ: PType; sig: SigHash): Rope =
let typ = if typ.kind == tyAlias: typ.lastSon else: typ var typ = typ
while true:
if typ.sym != nil and {sfImportc, sfExportc} * typ.sym.flags != {}: if typ.sym != nil and {sfImportc, sfExportc} * typ.sym.flags != {}:
result = typ.sym.loc.r return typ.sym.loc.r
if typ.kind in irrelevantForBackend:
typ = typ.lastSon
else: else:
break
if typ.loc.r == nil: if typ.loc.r == nil:
typ.loc.r = typ.typeName & $sig typ.loc.r = typ.typeName & $sig
else: else:
@ -574,10 +583,6 @@ proc resolveStarsInCppType(typ: PType, idx, stars: int): PType =
result = if result.kind == tyGenericInst: result.sons[1] result = if result.kind == tyGenericInst: result.sons[1]
else: result.elemType else: result.elemType
const
irrelevantForBackend = {tyGenericBody, tyGenericInst, tyGenericInvocation,
tyDistinct, tyRange, tyStatic, tyAlias}
proc getTypeDescAux(m: BModule, origTyp: PType, check: var IntSet): Rope = proc getTypeDescAux(m: BModule, origTyp: PType, check: var IntSet): Rope =
# returns only the type's name # returns only the type's name
var t = origTyp.skipTypes(irrelevantForBackend) var t = origTyp.skipTypes(irrelevantForBackend)

View file

@ -65,3 +65,12 @@ type
# have a proc taking TFlags as param and returning object having TFlags field # have a proc taking TFlags as param and returning object having TFlags field
proc foo(flags: TFlags): TObj = nil proc foo(flags: TFlags): TObj = nil
# bug #5137
type
MyInt {.importc: "int".} = object
MyIntDistinct = distinct MyInt
proc bug5137(d: MyIntDistinct) =
discard d.MyInt