Skip to content

Commit

Permalink
Tests for v1 closed generics/static issues (#8572)
Browse files Browse the repository at this point in the history
* Add tests to confirm #7231 is fixed.

* Add test for closed #6137

* Add test for #7141
  • Loading branch information
mratsim authored and Araq committed Aug 8, 2018
1 parent 506418e commit bccaa36
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 0 deletions.
29 changes: 29 additions & 0 deletions tests/generics/t6137.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
discard """
action: "reject"
line: 29
errormsg: "\'vectFunc\' doesn't have a concrete type, due to unspecified generic parameters."
"""

type
# simple vector of declared fixed length
vector[N : static[int]] = array[0..N-1, float]

proc `*`[T](x: float, a: vector[T]): vector[T] =
# multiplication by scalar
for ii in 0..high(a):
result[ii] = a[ii]*x

let
# define a vector of length 3
x: vector[3] = [1.0, 3.0, 5.0]

proc vectFunc[T](x: vector[T]): vector[T] {.procvar.} =
# Define a vector function
result = 2.0*x

proc passVectFunction[T](g: proc(x: vector[T]): vector[T], x: vector[T]): vector[T] =
# pass a vector function as input in another procedure
result = g(x)

let
xNew = passVectFunction(vectFunc,x)
10 changes: 10 additions & 0 deletions tests/generics/t7141.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
discard """
action: "reject"
line: 7
errormsg: "cannot instantiate: \'T\'"
"""

proc foo[T](x: T) =
discard

var fun = if true: foo else: foo
12 changes: 12 additions & 0 deletions tests/metatype/ttypeselectors.nim
Original file line number Diff line number Diff line change
Expand Up @@ -99,3 +99,15 @@ echo sizeof(a)
echo sizeof(b)
echo sizeof(c)

# This is the same example but using a proc instead of a macro
# Instead of type mismatch for macro, proc just failed with internal error: getTypeDescAux(tyNone)
# https://github.com/nim-lang/Nim/issues/7231

proc getBase2*(bits: static[int]): typedesc =
if bits == 128:
result = newTree(nnkBracketExpr, ident("MpUintBase"), ident("uint64"))
else:
result = newTree(nnkBracketExpr, ident("MpUintBase"), ident("uint32"))

type
MpUint2*[bits: static[int]] = getbase2(bits)

0 comments on commit bccaa36

Please sign in to comment.