diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/utils/myaddr.nim | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/utils/myaddr.nim b/src/utils/myaddr.nim new file mode 100644 index 00000000..4405e0c4 --- /dev/null +++ b/src/utils/myaddr.nim @@ -0,0 +1,18 @@ +# Before 2.0, `addr' only worked on mutable types, and `unsafeAddr' +# was needed to take the address of immutable ones. +# +# This was changed in 2.0 for some incomprehensible reason, so now to +# write code that compiles on both versions you have to take care that +# you use the right overload without compiler help. +# +# This module fixes the above problem; it is automatically included +# in every file by nim.cfg. + +when NimMajor >= 2: + const msg = "expression has no address; maybe use `unsafeAddr'" + + template addr(x: untyped): untyped {.used, error: msg.} = + discard + + template addr(x: var untyped): untyped {.used.} = + system.addr x |