summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/system.nim10
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/system.nim b/lib/system.nim
index 8bb50ba5d..e8664d7a4 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -906,7 +906,15 @@ proc default*[T](_: typedesc[T]): T {.magic: "Default", noSideEffect.} =
 
 proc reset*[T](obj: var T) {.noSideEffect.} =
   ## Resets an object `obj` to its default value.
-  obj = default(typeof(obj))
+  when nimvm:
+    obj = default(typeof(obj))
+  else:
+    when defined(gcDestructors):
+      {.cast(noSideEffect), cast(raises: []), cast(tags: []).}:
+        `=destroy`(obj)
+        wasMoved(obj)
+    else:
+      obj = default(typeof(obj))
 
 proc setLen*[T](s: var seq[T], newlen: Natural) {.
   magic: "SetLengthSeq", noSideEffect.}