summary refs log tree commit diff stats
path: root/tests/parser/tdotlikeoperators.nim
blob: c2d23bd1511abcd29749ef245530972d0657c1c3 (plain) (blame)
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
discard """
  matrix: "-d:nimPreviewDotLikeOps"
"""
# test for https://github.com/nim-lang/RFCs/issues/341
import std/json
import std/jsonutils
import std/macros

macro fn1(a: untyped): string = newLit a.lispRepr

doAssert fn1(a.?b.c) == """(DotExpr (Infix (Ident ".?") (Ident "a") (Ident "b")) (Ident "c"))"""

template `.?`(a: JsonNode, b: untyped{ident}): JsonNode =
  a[astToStr(b)]

proc identity[T](a: T): T = a
proc timesTwo[T](a: T): T = a * 2

template main =
  let a = (a1: 1, a2: "abc", a3: (a4: 2.5))
  let j = a.toJson
  doAssert j.?a1.getInt == 1
  doAssert j.?a3.?a4.getFloat == 2.5
  doAssert j.?a3.?a4.getFloat.timesTwo == 5.0
  doAssert j.?a3.identity.?a4.getFloat.timesTwo == 5.0
  doAssert j.identity.?a3.identity.?a4.identity.getFloat.timesTwo == 5.0
  doAssert j.identity.?a3.?a4.identity.getFloat.timesTwo == 5.0

static: main()
main()