summary refs log tree commit diff stats
path: root/lib/system.nim
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2019-03-05 05:54:42 +0100
committerAndreas Rumpf <rumpf_a@web.de>2019-03-05 05:54:42 +0100
commit9a9c002abe8037944f5f736bb310862a91b59861 (patch)
treefd0480b738f6c6a9ea018aff0829a91e6aa74d81 /lib/system.nim
parent9c6b628df643476a515896edb6e54939d1e1e323 (diff)
downloadNim-9a9c002abe8037944f5f736bb310862a91b59861.tar.gz
make exception handling use owned refs
Diffstat (limited to 'lib/system.nim')
-rw-r--r--lib/system.nim18
1 files changed, 13 insertions, 5 deletions
diff --git a/lib/system.nim b/lib/system.nim
index 840565d51..0bfbd22f7 100644
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -1341,7 +1341,7 @@ proc `is`*[T, S](x: T, y: S): bool {.magic: "Is", noSideEffect.}
 template `isnot`*(x, y: untyped): untyped = not (x is y)
   ## Negated version of `is`. Equivalent to ``not(x is y)``.
 
-when defined(nimV2):
+when defined(nimV2) and not defined(nimscript):
   type owned*{.magic: "BuiltinType".}[T]
 
   proc new*[T](a: var owned(ref T)) {.magic: "New", noSideEffect.}
@@ -3022,8 +3022,10 @@ template newException*(exceptn: typedesc, message: string;
                        parentException: ref Exception = nil): untyped =
   ## creates an exception object of type ``exceptn`` and sets its ``msg`` field
   ## to `message`. Returns the new exception object.
-  var
-    e: ref exceptn
+  when declared(owned):
+    var e: owned(ref exceptn)
+  else:
+    var e: ref exceptn
   new(e)
   e.msg = message
   e.parent = parentException
@@ -3062,13 +3064,19 @@ when not declared(sysFatal):
       sysFatal(exceptn, message, "")
   else:
     proc sysFatal(exceptn: typedesc, message: string) {.inline, noReturn.} =
-      var e: ref exceptn
+      when declared(owned):
+        var e: owned(ref exceptn)
+      else:
+        var e: ref exceptn
       new(e)
       e.msg = message
       raise e
 
     proc sysFatal(exceptn: typedesc, message, arg: string) {.inline, noReturn.} =
-      var e: ref exceptn
+      when declared(owned):
+        var e: owned(ref exceptn)
+      else:
+        var e: ref exceptn
       new(e)
       e.msg = message & arg
       raise e