about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/utils/myaddr.nim18
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