From 373717968eeb851e30a300923aa62e4c2aec519d Mon Sep 17 00:00:00 2001 From: krolik Date: Tue, 12 May 2015 12:45:34 +0300 Subject: new now able to make distinction between ref and non-ref types, so we don't get 'ref ref' type when calling new on ref type --- lib/system.nim | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/system.nim b/lib/system.nim index 1e6f76f3d..a56e91594 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -172,10 +172,16 @@ proc new*[T](a: var ref T) {.magic: "New", noSideEffect.} ## creates a new object of type ``T`` and returns a safe (traced) ## reference to it in ``a``. -proc new*(T: typedesc): ref T = +proc new*(T: typedesc): auto = ## creates a new object of type ``T`` and returns a safe (traced) ## reference to it as result value - new(result) + when (T is ref): + var r: T + else: + var r: ref T + new(r) + return r + proc internalNew*[T](a: var ref T) {.magic: "New", noSideEffect.} ## leaked implementation detail. Do not use. -- cgit 1.4.1-2-gfad0