Bugfix: custom pragmas were not working on public fields
This commit is contained in:
parent
34388c5cc5
commit
95072fbcc3
2 changed files with 10 additions and 5 deletions
|
|
@ -1321,7 +1321,7 @@ proc customPragmaNode(n: NimNode): NimNode =
|
||||||
return typ.getImpl()[0][1]
|
return typ.getImpl()[0][1]
|
||||||
|
|
||||||
if n.kind in {nnkDotExpr, nnkCheckedFieldExpr}:
|
if n.kind in {nnkDotExpr, nnkCheckedFieldExpr}:
|
||||||
let name = (if n.kind == nnkCheckedFieldExpr: n[0][1] else: n[1])
|
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]))
|
var typDef = getImpl(getTypeInst(if n.kind == nnkCheckedFieldExpr or n[0].kind == nnkHiddenDeref: n[0][0] else: n[0]))
|
||||||
while typDef != nil:
|
while typDef != nil:
|
||||||
typDef.expectKind(nnkTypeDef)
|
typDef.expectKind(nnkTypeDef)
|
||||||
|
|
@ -1349,8 +1349,13 @@ proc customPragmaNode(n: NimNode): NimNode =
|
||||||
|
|
||||||
else:
|
else:
|
||||||
for i in 0 .. identDefs.len - 3:
|
for i in 0 .. identDefs.len - 3:
|
||||||
if identDefs[i].kind == nnkPragmaExpr and
|
let varNode = identDefs[i]
|
||||||
identDefs[i][0].kind == nnkIdent and $identDefs[i][0] == $name:
|
if varNode.kind == nnkPragmaExpr:
|
||||||
|
var varName = varNode[0]
|
||||||
|
if varName.kind == nnkPostfix:
|
||||||
|
# This is a public field. We are skipping the postfix *
|
||||||
|
varName = varName[1]
|
||||||
|
if eqIdent(varName.strVal, name):
|
||||||
return identDefs[i][1]
|
return identDefs[i][1]
|
||||||
|
|
||||||
if obj[1].kind == nnkOfInherit: # explore the parent object
|
if obj[1].kind == nnkOfInherit: # explore the parent object
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ import custom_pragma
|
||||||
block: # A bit more advanced case
|
block: # A bit more advanced case
|
||||||
type
|
type
|
||||||
Subfield {.defaultValue: "catman".} = object
|
Subfield {.defaultValue: "catman".} = object
|
||||||
c {.serializationKey: "cc".}: float
|
c* {.serializationKey: "cc".}: float
|
||||||
|
|
||||||
MySerializable = object
|
MySerializable = object
|
||||||
a {.serializationKey"asdf", defaultValue: 5.} : int
|
a {.serializationKey"asdf", defaultValue: 5.} : int
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue