blob: 745e3562c961e1ef639c5f0fd36db22dbf88cb1c (
plain) (
tree)
|
|
discard """
disabled: i386
output: '''
10
1111
1222
3030303
3060606
6060606
6121212
3030903
3061206
3031503
3061806
5050505
5101010
'''
"""
import typetraits
var tls1 {.threadvar.}: int
var g0: int
var g1 {.global.}: int
proc customInc(x: var int, delta: int) =
x += delta
customInc(tls1, 10)
echo tls1
proc nonGenericProc: int =
var local: int
var nonGenericTls {.threadvar.}: int
var nonGenericGlobal {.global.}: int
var nonGenericMixedPragmas {.global, threadvar.}: int
customInc local, 1000
customInc nonGenericTls, 1
customInc nonGenericGlobal, 10
customInc nonGenericMixedPragmas, 100
return local + nonGenericTls + nonGenericGlobal + nonGenericMixedPragmas
proc genericProc(T: typedesc): int =
var local: int
var genericTls {.threadvar.}: int
var genericGlobal {.global.}: int
var genericMixedPragmas {.global, threadvar.}: int
customInc local, T.name.len * 1000000
customInc genericTls, T.name.len * 1
customInc genericGlobal, T.name.len * 100
customInc genericMixedPragmas, T.name.len * 10000
return local + genericTls + genericGlobal + genericMixedPragmas
echo nonGenericProc()
echo nonGenericProc()
echo genericProc(int)
echo genericProc(int)
echo genericProc(string)
echo genericProc(string)
proc echoInThread[T]() {.thread.} =
echo genericProc(T)
echo genericProc(T)
proc newEchoThread(T: typedesc) =
var t: Thread[void]
createThread(t, echoInThread[T])
joinThreads(t)
newEchoThread int
newEchoThread int
newEchoThread float
|