@@ -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
15741575version (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