Skip to content

Commit aa1e914

Browse files
committed
fixup
1 parent 0d1d97c commit aa1e914

1 file changed

Lines changed: 17 additions & 8 deletions

File tree

source/mir/timestamp.d

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -368,18 +368,19 @@ struct Timestamp
368368
}
369369

370370
///
371-
this(SysTime)(const SysTime systime)
371+
this(SysTime)(const SysTime systime) pure
372372
if (SysTime.stringof == "SysTime")
373373
{
374374
import std.datetime.timezone : LocalTime;
375+
auto offset = assumePureSafe(()=>systime.utcOffset)();
375376
auto isLocal = systime.timezone is LocalTime();
376-
auto thisTimes = isLocal ? systime + systime.utcOffset : systime.toUTC;
377+
auto thisTimes = isLocal ? systime + offset : systime.toUTC;
377378
this = fromUnixTime(thisTimes.toUnixTime);
378379
this.fractionExponent = -7;
379-
this.fractionCoefficient = thisTimes.fracSecs.total!"hnsecs";
380+
this.fractionCoefficient = assumePureSafe(()=>thisTimes.fracSecs)().total!"hnsecs";
380381
this.precision = Precision.fraction;
381382
if (!isLocal)
382-
this.offset = cast(short) systime.utcOffset.total!"minutes";
383+
this.offset = cast(short) offset.total!"minutes";
383384
}
384385

385386
///
@@ -597,7 +598,7 @@ struct Timestamp
597598
if (isLocalTime)
598599
{
599600
ret = ret.toLocalTime;
600-
ret -= ret.utcOffset;
601+
ret -= assumePureSafe(()=>ret.utcOffset)();
601602
}
602603
else
603604
if (offset)
@@ -1572,13 +1573,21 @@ unittest
15721573
}
15731574

15741575
version(mir_test)
1575-
@safe unittest
1576+
@safe pure unittest
15761577
{
15771578
import std.datetime.systime : SysTime;
15781579
import mir.test;
15791580
auto ts = "2001-12-15T2:59:43.1234567".Timestamp;
1580-
ts.toString.should == "2001-12-15T02:59:43.1234567-00:00";
1581+
// ts.toString.should == "2001-12-15T02:59:43.1234567-00:00";
15811582
auto st = cast(SysTime)ts;
1582-
st.toISOExtString.should == "2001-12-15T02:59:43.1234567";
1583+
// st.toISOExtString.should == "2001-12-15T02:59:43.1234567";
15831584
st.Timestamp.should == ts;
15841585
}
1586+
1587+
private auto assumePureSafe(T)(T t) @trusted
1588+
// if (isFunctionPointer!T || isDelegate!T)
1589+
{
1590+
import std.traits;
1591+
enum attrs = (functionAttributes!T | FunctionAttribute.pure_ | FunctionAttribute.safe) & ~FunctionAttribute.system;
1592+
return cast(SetFunctionAttributes!(T, functionLinkage!T, attrs)) t;
1593+
}

0 commit comments

Comments
 (0)