mirror of
https://github.com/nim-lang/Nim.git
synced 2026-08-28 01:21:40 +00:00
adds generics test code and fixes bug
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -332,3 +332,4 @@ testNifEncDec(graph, "modtesttypesections.nim")
|
||||
testNifEncDec(graph, "modtestpragmas.nim")
|
||||
testNifEncDec(graph, "modtestprocs.nim")
|
||||
testNifEncDec(graph, "modteststatements.nim")
|
||||
testNifEncDec(graph, "modtestgenerics.nim")
|
||||
|
||||
43
tests/icnif/testcode/modtestgenerics.nim
Normal file
43
tests/icnif/testcode/modtestgenerics.nim
Normal 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])
|
||||
Reference in New Issue
Block a user