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

View File

@@ -122,18 +122,27 @@ proc typeName(typ: PType): Rope =
else:
~"TY"
const
irrelevantForBackend = {tyGenericBody, tyGenericInst, tyGenericInvocation,
tyDistinct, tyRange, tyStatic, tyAlias}
proc getTypeName(m: BModule; typ: PType; sig: SigHash): Rope =
let typ = if typ.kind == tyAlias: typ.lastSon else: typ
if typ.sym != nil and {sfImportc, sfExportc} * typ.sym.flags != {}:
result = typ.sym.loc.r
else:
if typ.loc.r == nil:
typ.loc.r = typ.typeName & $sig
var typ = typ
while true:
if typ.sym != nil and {sfImportc, sfExportc} * typ.sym.flags != {}:
return typ.sym.loc.r
if typ.kind in irrelevantForBackend:
typ = typ.lastSon
else:
when defined(debugSigHashes):
# check consistency:
assert($typ.loc.r == $(typ.typeName & $sig))
result = typ.loc.r
break
if typ.loc.r == nil:
typ.loc.r = typ.typeName & $sig
else:
when defined(debugSigHashes):
# check consistency:
assert($typ.loc.r == $(typ.typeName & $sig))
result = typ.loc.r
if result == nil: internalError("getTypeName: " & $typ.kind)
proc mapSetType(typ: PType): TCTypeKind =
@@ -574,10 +583,6 @@ proc resolveStarsInCppType(typ: PType, idx, stars: int): PType =
result = if result.kind == tyGenericInst: result.sons[1]
else: result.elemType
const
irrelevantForBackend = {tyGenericBody, tyGenericInst, tyGenericInvocation,
tyDistinct, tyRange, tyStatic, tyAlias}
proc getTypeDescAux(m: BModule, origTyp: PType, check: var IntSet): Rope =
# returns only the type's name
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
proc foo(flags: TFlags): TObj = nil
# bug #5137
type
MyInt {.importc: "int".} = object
MyIntDistinct = distinct MyInt
proc bug5137(d: MyIntDistinct) =
discard d.MyInt