combine PR#16009 and PR#16012 (#16024)

* fix #15623
* add testcase for #15623
* add testcase
* combine #16009
* support casting nil to NilableTypes in VM
This commit is contained in:
flywind 2020-11-18 15:28:05 +08:00 • committed by GitHub
commit e6e1e9574d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 50 additions and 1 deletions

View file

@ -29,3 +29,47 @@ reject: discard cast[enum](0)
proc a = echo "hi"
reject: discard cast[ptr](a)
# bug #15623
block:
if false:
echo cast[ptr int](nil)[]
block:
if false:
var x: ref int = nil
echo cast[ptr int](x)[]
block:
doAssert cast[int](cast[ptr int](nil)) == 0
block:
var x: ref int = nil
doAssert cast[int](cast[ptr int](x)) == 0
block:
block:
static:
let a = cast[pointer](nil)
doAssert a.repr == "nil"
block:
static:
doAssert cast[ptr int](nil).repr == "nil"
block:
const str = cast[ptr int](nil)
static:
doAssert str.repr == "nil"
block:
static:
doAssert cast[ptr int](nil).repr == "nil"
block:
static:
doAssert cast[RootRef](nil).repr == "nil"
block:
static:
doAssert cast[cstring](nil).repr == "nil"