mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-04 10:54:42 +00:00
fixes #5137
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user