mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 01:14:41 +00:00
* fix RFC #341: dot-like operators are now parsed with same precedence as `.` * fixup * [skip ci] address comment in changelog * address comment * update grammmar * add manual entry * fixup * -d:nimPreviewDotLikeOps * address comment to unblock PR: move nimPreviewDotLikeOps out of config/config.nims
28 lines
807 B
Nim
28 lines
807 B
Nim
# 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()
|