31 lines
375 B
Nim
31 lines
375 B
Nim
discard """
|
|
nimout: "static 10\ndynamic\nstatic 20\n"
|
|
output: "s\nd\nd\ns"
|
|
"""
|
|
|
|
type
|
|
semistatic[T] =
|
|
static[T] or T
|
|
|
|
template isStatic*(x): bool =
|
|
compiles(static(x))
|
|
|
|
proc foo(x: semistatic[int]) =
|
|
when isStatic(x):
|
|
static: echo "static ", x
|
|
echo "s"
|
|
else:
|
|
static: echo "dynamic"
|
|
echo "d"
|
|
|
|
foo 10
|
|
|
|
var
|
|
x = 10
|
|
y: int
|
|
|
|
foo x
|
|
foo y
|
|
|
|
foo 20
|
|
|