@@ -216,47 +216,40 @@ proc replaceNodes(ast: NimNode): NimNode =
216
216
result = rTree
217
217
result = inspect(ast)
218
218
219
- macro distinctBase* (T: typedesc , recursive: static [ bool ] = false ): untyped =
220
- # # reverses ``type T = distinct A``
219
+ macro distinctBase* (T: typedesc ): untyped =
220
+ # # reverses ``type T = distinct A``; works recursively.
221
221
runnableExamples:
222
222
type T = distinct int
223
223
doAssert distinctBase(T) is int
224
224
doAssert: not compiles(distinctBase(int ))
225
225
type T2 = distinct T
226
- doAssert distinctBase(T2, recursive = false ) is T
227
- doAssert distinctBase(int , recursive = true ) is int
228
- doAssert distinctBase(T2, recursive = true ) is int
226
+ doAssert distinctBase(T2) is int
229
227
230
228
let typeNode = getTypeImpl(T)
231
229
expectKind(typeNode, nnkBracketExpr)
232
230
if typeNode[0 ].typeKind != ntyTypeDesc:
233
231
error " expected typeDesc, got " & $ typeNode[0 ]
234
232
var typeSym = typeNode[1 ]
235
- if not recursive:
236
- let impl = getTypeImpl(typeSym)
237
- if impl.typeKind != ntyDistinct:
238
- error " type is not distinct"
239
- typeSym = getTypeInst(impl[0 ])
240
- else :
241
- while true :
242
- let impl = getTypeImpl(typeSym)
243
- if impl.typeKind != ntyDistinct:
244
- typeSym = impl
245
- break
246
- typeSym = getTypeInst(impl[0 ])
233
+ typeSym = getTypeImpl(typeSym)
234
+ if typeSym.typeKind != ntyDistinct:
235
+ error " type is not distinct"
236
+ typeSym = typeSym[0 ]
237
+ while typeSym.typeKind == ntyDistinct:
238
+ typeSym = getTypeImpl(typeSym)[0 ]
247
239
typeSym.replaceNodes
248
240
249
- func distinctBase* [T](a: T, recursive: static [bool ] = false): auto {.inline.} =
241
+ # using `auto` return pending https://github.com/nim-lang/Nim/issues/8551
242
+ func distinctBase* [T](a: T): auto {.inline.} =
250
243
## converts a distinct variable to it's original type
251
244
runnableExamples:
252
245
type T = distinct int
253
246
var a: T = T(1)
254
247
let b = a.distinctBase
255
248
doAssert b is int
256
249
doAssert b == 1
257
- distinctBase(T, recursive )(a)
250
+ distinctBase(T)(a)
258
251
259
252
when isMainModule :
260
253
# pending https://github.com/nim-lang/Nim/issues/7280
261
- discard distinctBase[ int ](0, recursive = true)
262
-
254
+ type T=distinct int
255
+ discard distinctBase(T(0))
0 commit comments