From ef9027c29028b1ec93d14c148406d409bc1701d4 Mon Sep 17 00:00:00 2001 From: flywind <43030857+xflywind@users.noreply.github.com> Date: Thu, 14 Jan 2021 09:52:00 -0600 Subject: [PATCH] fix #16706 (#16717) [backport:1.4] --- lib/system/assign.nim | 4 +++- tests/assign/tobject_assign.nim | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 tests/assign/tobject_assign.nim diff --git a/lib/system/assign.nim b/lib/system/assign.nim index a809fa423ec93..8ba3e409d0fa0 100644 --- a/lib/system/assign.nim +++ b/lib/system/assign.nim @@ -122,7 +122,9 @@ proc genericAssignAux(dest, src: pointer, mt: PNimType, shallow: bool) = # var tbObj = TB(p) # tbObj of TC # needs to be false! #c_fprintf(stdout, "%s %s\n", pint[].name, mt.name) - chckObjAsgn(cast[ptr PNimType](src)[], mt) + let srcType = cast[ptr PNimType](src)[] # object is not initialized properly(for example std/times.DateTime) + if srcType != nil: + chckObjAsgn(srcType, mt) pint[] = mt # cast[ptr PNimType](src)[] of tyTuple: genericAssignAux(dest, src, mt.node, shallow) diff --git a/tests/assign/tobject_assign.nim b/tests/assign/tobject_assign.nim new file mode 100644 index 0000000000000..dbc1f2316d4a7 --- /dev/null +++ b/tests/assign/tobject_assign.nim @@ -0,0 +1,37 @@ +import std/[options, tables, times] + +type + Data* = object + shifts*: OrderedTable[int64, Shift] + balance*: float + + Shift* = object + quoted*: bool + date*: DateTime + description*: string + start*: Option[DateTime] + finish*: Option[DateTime] + breakTime*: Option[Duration] + rate*: float + qty: Option[float] + id*: int64 + +let shift = Shift( + quoted: true, + 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 +)