fixes #8916 by fixing typeinfo and marshal. (#9341)

* fixes #8916 by removing `tyString`, `tySeq`, mod. marshal, typeinfo

Need to check in `typeinfo` for nil of the underlying pointer.
In marshal don't have to check for nil of seq anymore.

* remove reference to string, sequence in `isNil` doc string
This commit is contained in:
Vindaar 2018-10-13 08:47:58 +02:00 • committed by Andreas Rumpf
commit 9cdd9be5a5
3 changed files with 29 additions and 15 deletions

View file

@ -228,8 +228,14 @@ proc `[]=`*(x: Any, i: int, y: Any) =
proc len*(x: Any): int =
## len for an any `x` that represents an array or a sequence.
case x.rawType.kind
of tyArray: result = x.rawType.size div x.rawType.base.size
of tySequence: result = cast[PGenSeq](cast[ppointer](x.value)[]).len
of tyArray:
result = x.rawType.size div x.rawType.base.size
of tySequence:
let pgenSeq = cast[PGenSeq](cast[ppointer](x.value)[])
if isNil(pgenSeq):
result = 0
else:
result = pgenSeq.len
else: assert false
@ -240,10 +246,9 @@ proc base*(x: Any): Any =
proc isNil*(x: Any): bool =
## `isNil` for an any `x` that represents a sequence, string, cstring,
## proc or some pointer type.
assert x.rawType.kind in {tyString, tyCString, tyRef, tyPtr, tyPointer,
tySequence, tyProc}
## `isNil` for an any `x` that represents a cstring, proc or
## some pointer type.
assert x.rawType.kind in {tyCString, tyRef, tyPtr, tyPointer, tyProc}
result = isNil(cast[ppointer](x.value)[])
proc getPointer*(x: Any): pointer =
@ -716,5 +721,3 @@ when isMainModule:
for i in 0 .. m.len-1:
for j in 0 .. m[i].len-1:
echo getString(m[i][j])