Fixed type inference for 'set` and 'tuple' (#18827)

* improved built in typeclass inference

* Smarter logic to fit node

* Forgot the untyped check
This commit is contained in:
Jason Beetham 2021-09-11 05:05:53 -06:00 • committed by GitHub
commit 66e53bdd7b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 1 deletions

View file

@ -19,3 +19,25 @@ var ptr1: ptr = addr(str1)
var str2: string = "hello, world!"
var ptr2: ptr = str2
block: # built in typeclass inference
proc tupleA(): tuple = return (1, 2)
proc tupleB(): tuple = (1f, 2f)
assert typeof(tupleA()) is (int, int)
assert typeof(tupleB()) is (float32, float32)
proc a(val: int or float): tuple =
when typeof(val) is int:
(10, 10)
else:
(30f, 30f)
assert typeof(a(10)) is (int, int)
assert typeof(a(10.0)) is (float32, float32)
proc b(val: int or float): set =
when typeof(val) is int:
{10u8, 3}
else:
{'a', 'b'}
assert typeof(b(10)) is set[uint8]
assert typeof(b(10.0)) is set[char]