File: tgensymhijack.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 (37 lines) | stat: -rw-r--r-- 682 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# issue #23326

type Result*[E] = object
  e*: E

proc error*[E](v: Result[E]): E = discard

template valueOr*[E](self: Result[E], def: untyped): int =
  when E isnot void:
    when false:
      # Comment line below to make it work
      template error(): E {.used, gensym.} = s.e
      discard
    else:
      template error(): E {.used, inject.} =
        self.e

      def
  else:
    def


block:
  let rErr = Result[string](e: "a")
  let rErrV = rErr.valueOr:
    ord(error[0])

block:
  template foo(x: static bool): untyped =
    when x:
      let a = 123
    else:
      template a: untyped {.gensym.} = 456
    a
  
  doAssert foo(false) == 456
  doAssert foo(true) == 123