Merge branch 'devel' into araq-misc
This commit is contained in:
commit
404de2f23e
13 changed files with 193 additions and 17 deletions
29
tests/generics/t6137.nim
Normal file
29
tests/generics/t6137.nim
Normal file
|
|
@ -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
tests/generics/t7141.nim
Normal file
10
tests/generics/t7141.nim
Normal file
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
29
tests/stdlib/tsugar.nim
Normal file
29
tests/stdlib/tsugar.nim
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
discard """
|
||||
file: "tsugar.nim"
|
||||
output: ""
|
||||
"""
|
||||
import sugar
|
||||
import macros
|
||||
|
||||
block distinctBase:
|
||||
block:
|
||||
type
|
||||
Foo[T] = distinct seq[T]
|
||||
var a: Foo[int]
|
||||
doAssert a.type.distinctBase is seq[int]
|
||||
|
||||
block:
|
||||
# simplified from https://github.com/nim-lang/Nim/pull/8531#issuecomment-410436458
|
||||
macro uintImpl(bits: static[int]): untyped =
|
||||
if bits >= 128:
|
||||
let inner = getAST(uintImpl(bits div 2))
|
||||
result = newTree(nnkBracketExpr, ident("UintImpl"), inner)
|
||||
else:
|
||||
result = ident("uint64")
|
||||
|
||||
type
|
||||
BaseUint = UintImpl or SomeUnsignedInt
|
||||
UintImpl[Baseuint] = object
|
||||
Uint[bits: static[int]] = distinct uintImpl(bits)
|
||||
|
||||
doAssert Uint[128].distinctBase is UintImpl[uint64]
|
||||
Loading…
Add table
Add a link
Reference in a new issue