Fix a build issue affecting Nim 0.20.2
This commit is contained in:
parent
e26985dec3
commit
8e907c46fc
|
@ -102,7 +102,7 @@ proc makeFieldReadersTable(RecordType, Reader: distinct type):
|
||||||
mixin enumAllSerializedFields, readFieldIMPL
|
mixin enumAllSerializedFields, readFieldIMPL
|
||||||
|
|
||||||
enumAllSerializedFields(RecordType, fieldName, FieldType):
|
enumAllSerializedFields(RecordType, fieldName, FieldType):
|
||||||
proc readField(obj: var RecordType, reader: var Reader) {.nimcall.} =
|
proc readField(obj: var RecordType, reader: var Reader) {.gcsafe, nimcall.} =
|
||||||
try:
|
try:
|
||||||
type F = FieldTag[RecordType, fieldName, type(FieldType)]
|
type F = FieldTag[RecordType, fieldName, type(FieldType)]
|
||||||
obj.field(fieldName) = readFieldIMPL(F, reader)
|
obj.field(fieldName) = readFieldIMPL(F, reader)
|
||||||
|
@ -140,7 +140,7 @@ macro setSerializedFields*(T: typedesc, fields: varargs[untyped]): untyped =
|
||||||
for f in fields: fieldsArray.add newCall(bindSym"ident", newLit($f))
|
for f in fields: fieldsArray.add newCall(bindSym"ident", newLit($f))
|
||||||
|
|
||||||
template payload(T: untyped, fieldsArray) {.dirty.} =
|
template payload(T: untyped, fieldsArray) {.dirty.} =
|
||||||
bind default, quote, add, getType, newStmtList, newLit, newDotExpr, `$`, `[]`
|
bind default, quote, add, getType, newStmtList, newLit, newDotExpr, `$`, `[]`, getAst
|
||||||
|
|
||||||
macro enumInstanceSerializedFields*(ins: T,
|
macro enumInstanceSerializedFields*(ins: T,
|
||||||
fieldNameVar, fieldVar,
|
fieldNameVar, fieldVar,
|
||||||
|
@ -154,11 +154,15 @@ macro setSerializedFields*(T: typedesc, fields: varargs[untyped]): untyped =
|
||||||
fieldName = newLit($field)
|
fieldName = newLit($field)
|
||||||
fieldAccessor = newDotExpr(ins, field)
|
fieldAccessor = newDotExpr(ins, field)
|
||||||
|
|
||||||
res.add quote do:
|
template fieldPayload(fieldNameVar, fieldName, fieldVar,
|
||||||
|
fieldAccessor, body) =
|
||||||
block:
|
block:
|
||||||
const `fieldNameVar` = `fieldName`
|
const fieldNameVar = fieldName
|
||||||
template `fieldVar`: auto = `fieldAccessor`
|
template fieldVar: auto = fieldAccessor
|
||||||
`body`
|
body
|
||||||
|
|
||||||
|
res.add getAst(fieldPayload(fieldNameVar, fieldName, fieldVar,
|
||||||
|
fieldAccessor, body))
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
@ -175,11 +179,17 @@ macro setSerializedFields*(T: typedesc, fields: varargs[untyped]): untyped =
|
||||||
fieldName = newLit($field)
|
fieldName = newLit($field)
|
||||||
fieldAccessor = newDotExpr(typ, field)
|
fieldAccessor = newDotExpr(typ, field)
|
||||||
|
|
||||||
res.add quote do:
|
template fieldPayload(fieldNameVar, fieldName,
|
||||||
|
fieldTypeVar, typ, field,
|
||||||
|
body) =
|
||||||
block:
|
block:
|
||||||
const `fieldNameVar` = `fieldName`
|
const fieldNameVar = fieldName
|
||||||
type `fieldTypeVar` = type(default(`typ`).`field`)
|
type fieldTypeVar = type(default(typ).field)
|
||||||
`body`
|
body
|
||||||
|
|
||||||
|
res.add getAst(fieldPayload(fieldNameVar, fieldName,
|
||||||
|
fieldTypeVar, typ, field,
|
||||||
|
body))
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue