followup for #16717: minimized example + improved comment (#16721)

This commit is contained in:
Timothee Cour 2021-01-14 16:09:58 -08:00 • committed by GitHub
commit 52cf728001
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 33 deletions

View file

@ -122,8 +122,10 @@ proc genericAssignAux(dest, src: pointer, mt: PNimType, shallow: bool) =
# var tbObj = TB(p) # var tbObj = TB(p)
# tbObj of TC # needs to be false! # tbObj of TC # needs to be false!
#c_fprintf(stdout, "%s %s\n", pint[].name, mt.name) #c_fprintf(stdout, "%s %s\n", pint[].name, mt.name)
let srcType = cast[ptr PNimType](src)[] # object is not initialized properly(for example std/times.DateTime) let srcType = cast[ptr PNimType](src)[]
if srcType != nil: if srcType != nil:
# `!= nil` needed because of cases where object is not initialized properly (see bug #16706)
# note that you can have `srcType == nil` yet `src != nil`
chckObjAsgn(srcType, mt) chckObjAsgn(srcType, mt)
pint[] = mt # cast[ptr PNimType](src)[] pint[] = mt # cast[ptr PNimType](src)[]
of tyTuple: of tyTuple:

View file

@ -1,37 +1,49 @@
import std/[options, tables, times] # bug #16706
type block: # reduced example
Data* = object type
shifts*: OrderedTable[int64, Shift] A = object of RootObj
balance*: float a0: string
B = object
b0: seq[A]
var c = newSeq[A](2)
var d = B(b0: c)
Shift* = object when true: # original example
quoted*: bool import std/[options, tables, times]
date*: DateTime
description*: string
start*: Option[DateTime]
finish*: Option[DateTime]
breakTime*: Option[Duration]
rate*: float
qty: Option[float]
id*: int64
let shift = Shift( type
quoted: true, Data* = object
date: parse("2000-01-01", "yyyy-MM-dd"), shifts*: OrderedTable[int64, Shift]
description: "abcdef", balance*: float
start: none(DateTime),
finish: none(DateTime),
breakTime: none(Duration),
rate: 462.11,
qty: some(10.0),
id: getTime().toUnix()
)
var shifts: OrderedTable[int64, Shift] Shift* = object
shifts[shift.id] = shift quoted*: bool
date*: DateTime
description*: string
start*: Option[DateTime]
finish*: Option[DateTime]
breakTime*: Option[Duration]
rate*: float
qty: Option[float]
id*: int64
discard Data( let shift = Shift(
shifts: shifts, quoted: true,
balance: 0.00 date: parse("2000-01-01", "yyyy-MM-dd"),
) description: "abcdef",
start: none(DateTime),
finish: none(DateTime),
breakTime: none(Duration),
rate: 462.11,
qty: some(10.0),
id: getTime().toUnix()
)
var shifts: OrderedTable[int64, Shift]
shifts[shift.id] = shift
discard Data(
shifts: shifts,
balance: 0.00
)