adds generics test code and fixes bug

This commit is contained in:
demotomohiro
2025-10-30 12:53:49 +09:00
parent 467a27948c
commit 66d7a8e0b4
4 changed files with 50 additions and 2 deletions

View File

@@ -266,9 +266,12 @@ proc fromNif(c: var DecodeContext; n: var Cursor): PNode =
result.flags = flags
skipParRi n
of nkIdent:
incExpect n, Ident
inc n
let typ = c.fromNifType n
expect n, Ident
result = newIdentNode(c.graph.cache.getIdent(pool.strings[n.litId]), c.fromNifLineInfo(n))
inc n
result.typ = typ
skipParRi n
of nkSym:
c.withNode n, result, kind:

View File

@@ -149,6 +149,7 @@ proc toNif(c: var EncodeContext; n: PNode) =
of nkIdent:
let info = c.toNif n.info
c.dest.addParLe pool.tags.getOrIncl(toNifTag(nkIdent)), info
c.toNif n.typ
c.dest.addIdent n.ident.s
c.dest.addParRi
of nkSym:
@@ -189,7 +190,7 @@ proc toNif(c: var EncodeContext; n: PNode) =
c.withNode n:
discard
else:
assert n.kind in {nkArgList, nkBracket, nkRecList} or n.len > 0, $n.kind
assert n.kind in {nkArgList, nkBracket, nkRecList, nkPragma} or n.len > 0, $n.kind
c.withNode(n):
for i in 0 ..< n.len:
c.toNif n[i]

View File

@@ -332,3 +332,4 @@ testNifEncDec(graph, "modtesttypesections.nim")
testNifEncDec(graph, "modtestpragmas.nim")
testNifEncDec(graph, "modtestprocs.nim")
testNifEncDec(graph, "modteststatements.nim")
testNifEncDec(graph, "modtestgenerics.nim")

View File

@@ -0,0 +1,43 @@
type
GenericsType[T] = object
GenericsType2[T] = object
x: T
GenericsType3[T, U] = object
x: T
y: U
GenericsType4[T: int or bool] = distinct int
GenericsType5[N: static[int]; T] = object
x: array[N, T]
GenericsType6[T: SomeNumber] = object
x: T
var genericsType: GenericsType[int]
var genericsType2: GenericsType2[int]
var genericsType3: GenericsType3[float, string]
var genericsType4: GenericsType4[bool]
var genericsType5: GenericsType5[3, float]
var genericsType6: GenericsType6[int8]
proc genericsProc[T]() = discard
genericsProc[int]()
proc genericsProc2[T](x: T) = discard x
genericsProc2(123)
proc genericsProc3[T, U](x: T; y: U) = discard x
genericsProc3("foo", true)
proc genericsProc4[T: int or float](x: T): T = x
discard genericsProc4(1.23)
proc genericsProc5(x: static[int]) = discard x
genericsProc5(123)
proc genericsProc6[T: SomeNumber](x: T) = discard x
genericsProc6(321)
proc genericsProc7[T: SomeNumber](x: T): T = x
discard genericsProc7(321)
proc genericsProc8[N: static[int]; T](x: array[N, T]): T = x[0]
discard genericsProc8([1, 2, 3])