summary refs log tree commit diff stats
path: root/tests/vm/tgenericcompiletimeproc.nim
blob: 08099ebbe354eee09ef145351f96ea05590b9b96 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
block: # issue #10753
  proc foo(x: int): int {.compileTime.} = x
  const a = foo(123)
  doAssert foo(123) == a

  proc bar[T](x: T): T {.compileTime.} = x
  const b = bar(123)
  doAssert bar(123) == b
  const c = bar("abc")
  doAssert bar("abc") == c

block: # issue #22021
  proc foo(x: static int): int {.compileTime.} = x + 1
  doAssert foo(123) == 124

block: # issue #19365
  proc f[T](x: static T): T {.compileTime.} = x + x
  doAssert f(123) == 246
  doAssert f(1.0) == 2.0

block:
  # don't fold compile time procs in typeof
  proc fail[T](x: T): T {.compileTime.} =
    doAssert false
    x
  doAssert typeof(fail(123)) is typeof(123)
  proc p(x: int): int = x

  type Foo = typeof(p(fail(123)))

block: # issue #24150, related regression
  proc w(T: type): T {.compileTime.} = default(ptr T)[]
  template y(v: auto): auto = typeof(v) is int
  discard compiles(y(w int))
  proc s(): int {.compileTime.} = discard
  discard s()