* 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
This commit is contained in:
parent
3d1bba04ab
commit
3aa16c1de0
7 changed files with 74 additions and 5 deletions
|
|
@ -36,3 +36,4 @@ switch("define", "nimExperimentalAsyncjsThen")
|
|||
switch("define", "nimExperimentalLinenoiseExtra")
|
||||
|
||||
switch("define", "nimPreviewFloatRoundtrip")
|
||||
switch("define", "nimPreviewDotLikeOps")
|
||||
|
|
|
|||
27
tests/misc/trfc_341.nim
Normal file
27
tests/misc/trfc_341.nim
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# 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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue