blob: 6c9f9f935e45cf371796490e543a14665f4243f7 (
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
37
38
|
discard """
output: '''
c_func
12
'''
"""
import macros, strutils
# bug #1025
macro foo(icname): untyped =
let ic = newStrLitNode($icname)
result = quote do:
proc x* =
proc private {.exportc: `ic`.} = discard
echo `ic`
private()
foo(c_func)
x()
template volatileLoad[T](x: ptr T): T =
var res: T
{.emit: [res, " = (*(", type(x[]), " volatile*)", x, ");"].}
res
template volatileStore[T](x: ptr T; y: T) =
{.emit: ["*((", type(x[]), " volatile*)(", x, ")) = ", y, ";"].}
proc main =
var st: int
var foo: ptr int = addr st
volatileStore(foo, 12)
echo volatileLoad(foo)
main()
|