diff options
author | LemonBoy <thatlemon@gmail.com> | 2019-02-05 15:24:19 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-02-06 11:34:55 +0100 |
commit | 26255c72fd94da57c7208dc84e027a5de6693605 (patch) | |
tree | 5da2378b6ade6d3b151902f881e8a1bde67ee1d6 | |
parent | c174d0924553a4a5252f42b39d2163053e8ea359 (diff) | |
download | Nim-26255c72fd94da57c7208dc84e027a5de6693605.tar.gz |
Fix getCustomPragmaVal on `var` fields
-rw-r--r-- | lib/core/macros.nim | 3 | ||||
-rw-r--r-- | tests/pragmas/tcustom_pragma.nim | 5 |
2 files changed, 7 insertions, 1 deletions
diff --git a/lib/core/macros.nim b/lib/core/macros.nim index 3a85324ba..d0b02fb05 100644 --- a/lib/core/macros.nim +++ b/lib/core/macros.nim @@ -1415,7 +1415,8 @@ proc customPragmaNode(n: NimNode): NimNode = if n.kind in {nnkDotExpr, nnkCheckedFieldExpr}: let name = $(if n.kind == nnkCheckedFieldExpr: n[0][1] else: n[1]) - var typDef = getImpl(getTypeInst(if n.kind == nnkCheckedFieldExpr or n[0].kind == nnkHiddenDeref: n[0][0] else: n[0])) + let typInst = getTypeInst(if n.kind == nnkCheckedFieldExpr or n[0].kind == nnkHiddenDeref: n[0][0] else: n[0]) + var typDef = getImpl(if typInst.kind == nnkVarTy: typInst[0] else: typInst) while typDef != nil: typDef.expectKind(nnkTypeDef) let typ = typDef[2] diff --git a/tests/pragmas/tcustom_pragma.nim b/tests/pragmas/tcustom_pragma.nim index e04d3de26..7f781f6f1 100644 --- a/tests/pragmas/tcustom_pragma.nim +++ b/tests/pragmas/tcustom_pragma.nim @@ -61,6 +61,11 @@ block: # A bit more advanced case assert hasCustomPragma(type(s.field), defaultValue) + proc foo(s: var MySerializable) = + static: assert(s.a.getCustomPragmaVal(defaultValue) == 5) + + foo(s) + block: # ref types type Node = object of RootObj |