diff options
Diffstat (limited to 'lib/system.nim')
-rw-r--r-- | lib/system.nim | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/lib/system.nim b/lib/system.nim index 3dc892c44..b5008129d 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -1872,26 +1872,20 @@ proc `$` *[Enum: enum](x: Enum): string {.magic: "EnumToStr", noSideEffect.} ## a ``$`` operator for a concrete enumeration is provided, this is ## used instead. (In other words: *Overwriting* is possible.) -proc `$`*[T: ref](arg: T): string = - ## The stringify operator to handle the nil value of all ref types. - ## Then it forwards to stringify operator of the underlying (value) type. - if arg.isNil: - "nil" - else: - "ref " & $arg[] - -proc `$`*[T: ptr](arg: T): string = - ## The stringify operator to handle the nil value of all ptr types. - ## Then it forwards to stringify operator of the underlying (value) type. - if arg.isNil: - "nil" - else: - "ptr " & $arg[] - -proc newString*[N](data: array[N, char]): string = +proc newString*[N](data: array[N, char]): string {.noSideEffect.} = ## Construct a string from an array of characters. The `data` is ## expected to be a null terminated string as it is often used in C. - $(cast[cstring](data[0].unsafeAddr)) + when nimvm: + # cannot cast on the vm + # not recommended to use this procedure on the vm at all, but at least it doesn't fail. + result = "" + for c in data: + if c == '\0': + return + else: + result.add c + else: + result = $(cast[cstring](data[0].unsafeAddr)) # undocumented: proc getRefcount*[T](x: ref T): int {.importc: "getRefcount", noSideEffect.} |