From 8700f4d1e891dd3472e44fb1db9b1d71600d232e Mon Sep 17 00:00:00 2001 From: Philip Wernersbach Date: Thu, 15 Jun 2017 17:32:25 -0400 Subject: [PATCH] Work around Nim compiler bug nim-lang/Nim#5140, which breaks newQSqlDateTime(). --- qt5_qtsql.nimble | 2 +- qt5_qtsql/src/qdatetime.nim | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/qt5_qtsql.nimble b/qt5_qtsql.nimble index 6c8730a..9b2e909 100644 --- a/qt5_qtsql.nimble +++ b/qt5_qtsql.nimble @@ -1,6 +1,6 @@ [Package] name = "qt5_qtsql" -version = "1.0.2" +version = "1.0.3" author = "Philip Wernersbach " description = "Binding for Qt 5's Qt SQL library. Provides a single API for multiple database engines." license = "MIT" diff --git a/qt5_qtsql/src/qdatetime.nim b/qt5_qtsql/src/qdatetime.nim index 8f5b23d..b56a93d 100644 --- a/qt5_qtsql/src/qdatetime.nim +++ b/qt5_qtsql/src/qdatetime.nim @@ -37,15 +37,22 @@ proc newQDateTimeObj*(): QDateTimeObj {.header: QDATETIME_H, importcpp: "QDateTi proc setMSecsSinceEpoch*(dateTime: var QDateTimeObj, msecs: qint64) {.header: QDATETIME_H, importcpp: "setMSecsSinceEpoch".} proc setTimeSpec*(dateTime: var QDateTimeObj, timeSpec: QtTimeSpec) {.header: QDATETIME_H, importcpp: "setTimeSpec".} -proc newQDateTimeObj*(msecs: qint64): QDateTimeObj = - result = newQDateTimeObj() +# The newQDateTimeObj procs need to be templates to workaround a bug in the Nim compiler. +# When they are procs, Nim zeros the memory of the "result" variable, which is invalid in +# C++. (nim-lang/Nim#5140) +template newQDateTimeObj*(msecs: qint64): QDateTimeObj = + var result = newQDateTimeObj() result.setMSecsSinceEpoch(msecs) -proc newQDateTimeObj*(msecs: qint64, timeSpec: QtTimeSpec): QDateTimeObj = - result = newQDateTimeObj() + result + +template newQDateTimeObj*(msecs: qint64, timeSpec: QtTimeSpec): QDateTimeObj = + var result = newQDateTimeObj() result.setTimeSpec(timeSpec) result.setMSecsSinceEpoch(msecs) + result + proc currentQDateTimeUtc*(): QDateTimeObj {.header: QDATETIME_H, importcpp: "QDateTime::currentDateTimeUtc".} proc toQStringObj*(dateTime: QDateTimeObj, format: cstring): QStringObj {.header: QDATETIME_H, importcpp: "toString".}