fixes #8519; implements T.distinctBase to reverse T = distinct A (#8531)

This commit is contained in:
Timothee Cour
2018-08-10 00:20:14 -07:00
committed by Andreas Rumpf
parent 730ce53b71
commit 43f634db8d
3 changed files with 69 additions and 1 deletions

29
tests/stdlib/tsugar.nim Normal file
View File

@@ -0,0 +1,29 @@
discard """
file: "tsugar.nim"
output: ""
"""
import sugar
import macros
block distinctBase:
block:
type
Foo[T] = distinct seq[T]
var a: Foo[int]
doAssert a.type.distinctBase is seq[int]
block:
# simplified from https://github.com/nim-lang/Nim/pull/8531#issuecomment-410436458
macro uintImpl(bits: static[int]): untyped =
if bits >= 128:
let inner = getAST(uintImpl(bits div 2))
result = newTree(nnkBracketExpr, ident("UintImpl"), inner)
else:
result = ident("uint64")
type
BaseUint = UintImpl or SomeUnsignedInt
UintImpl[Baseuint] = object
Uint[bits: static[int]] = distinct uintImpl(bits)
doAssert Uint[128].distinctBase is UintImpl[uint64]