Skip to content

Commit a94c307

Browse files
committed
adds generics test code and fixes bug
1 parent fccb163 commit a94c307

File tree

4 files changed

+50
-2
lines changed

4 files changed

+50
-2
lines changed

compiler/icnif/nifdecoder.nim

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,9 +266,12 @@ proc fromNif(c: var DecodeContext; n: var Cursor): PNode =
266266
result.flags = flags
267267
skipParRi n
268268
of nkIdent:
269-
incExpect n, Ident
269+
inc n
270+
let typ = c.fromNifType n
271+
expect n, Ident
270272
result = newIdentNode(c.graph.cache.getIdent(pool.strings[n.litId]), c.fromNifLineInfo(n))
271273
inc n
274+
result.typ = typ
272275
skipParRi n
273276
of nkSym:
274277
c.withNode n, result, kind:

compiler/icnif/nifencoder.nim

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ proc toNif(c: var EncodeContext; n: PNode) =
149149
of nkIdent:
150150
let info = c.toNif n.info
151151
c.dest.addParLe pool.tags.getOrIncl(toNifTag(nkIdent)), info
152+
c.toNif n.typ
152153
c.dest.addIdent n.ident.s
153154
c.dest.addParRi
154155
of nkSym:
@@ -189,7 +190,7 @@ proc toNif(c: var EncodeContext; n: PNode) =
189190
c.withNode n:
190191
discard
191192
else:
192-
assert n.kind in {nkArgList, nkBracket, nkRecList} or n.len > 0, $n.kind
193+
assert n.kind in {nkArgList, nkBracket, nkRecList, nkPragma} or n.len > 0, $n.kind
193194
c.withNode(n):
194195
for i in 0 ..< n.len:
195196
c.toNif n[i]

tests/icnif/tencode_node2node.nim

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,3 +332,4 @@ testNifEncDec(graph, "modtesttypesections.nim")
332332
testNifEncDec(graph, "modtestpragmas.nim")
333333
testNifEncDec(graph, "modtestprocs.nim")
334334
testNifEncDec(graph, "modteststatements.nim")
335+
testNifEncDec(graph, "modtestgenerics.nim")
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
type
2+
GenericsType[T] = object
3+
GenericsType2[T] = object
4+
x: T
5+
GenericsType3[T, U] = object
6+
x: T
7+
y: U
8+
GenericsType4[T: int or bool] = distinct int
9+
GenericsType5[N: static[int]; T] = object
10+
x: array[N, T]
11+
GenericsType6[T: SomeNumber] = object
12+
x: T
13+
14+
var genericsType: GenericsType[int]
15+
var genericsType2: GenericsType2[int]
16+
var genericsType3: GenericsType3[float, string]
17+
var genericsType4: GenericsType4[bool]
18+
var genericsType5: GenericsType5[3, float]
19+
var genericsType6: GenericsType6[int8]
20+
21+
proc genericsProc[T]() = discard
22+
genericsProc[int]()
23+
24+
proc genericsProc2[T](x: T) = discard x
25+
genericsProc2(123)
26+
27+
proc genericsProc3[T, U](x: T; y: U) = discard x
28+
genericsProc3("foo", true)
29+
30+
proc genericsProc4[T: int or float](x: T): T = x
31+
discard genericsProc4(1.23)
32+
33+
proc genericsProc5(x: static[int]) = discard x
34+
genericsProc5(123)
35+
36+
proc genericsProc6[T: SomeNumber](x: T) = discard x
37+
genericsProc6(321)
38+
39+
proc genericsProc7[T: SomeNumber](x: T): T = x
40+
discard genericsProc7(321)
41+
42+
proc genericsProc8[N: static[int]; T](x: array[N, T]): T = x[0]
43+
discard genericsProc8([1, 2, 3])

0 commit comments

Comments
 (0)