diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2019-03-05 05:54:42 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-03-05 05:54:42 +0100 |
commit | 9a9c002abe8037944f5f736bb310862a91b59861 (patch) | |
tree | fd0480b738f6c6a9ea018aff0829a91e6aa74d81 /lib/system.nim | |
parent | 9c6b628df643476a515896edb6e54939d1e1e323 (diff) | |
download | Nim-9a9c002abe8037944f5f736bb310862a91b59861.tar.gz |
make exception handling use owned refs
Diffstat (limited to 'lib/system.nim')
-rw-r--r-- | lib/system.nim | 18 |
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 |