File: tuntypedarg.nim

package info (click to toggle)
nim 2.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,911,644 kB
  • sloc: sh: 24,603; ansic: 1,761; python: 1,492; makefile: 1,013; sql: 298; asm: 141; xml: 13
file content (19 lines) | stat: -rw-r--r-- 737 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import macros

block: # issue #7385
  type CustomSeq[T] = object
    data: seq[T]
  macro `[]`[T](s: CustomSeq[T], args: varargs[untyped]): untyped =
    ## The end goal is to replace the joker "_" by something else
    result = newIntLitNode(10)
  proc foo1(): CustomSeq[int] =
    result.data.newSeq(10)
    # works since no overload matches first argument with type `CustomSeq`
    # except magic `[]`, which always matches without checking arguments
    doAssert result[_] == 10
  doAssert foo1() == CustomSeq[int](data: newSeq[int](10))
  proc foo2[T](): CustomSeq[T] =
    result.data.newSeq(10)
    # works fine with generic return type
    doAssert result[_] == 10
  doAssert foo2[int]() == CustomSeq[int](data: newSeq[int](10))