[squeak-dev] The Inbox: Chronology-Core-dtl.19.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Dec 21 02:21:16 UTC 2018
A new version of Chronology-Core was added to project The Inbox:
http://source.squeak.org/inbox/Chronology-Core-dtl.19.mcz
==================== Summary ====================
Name: Chronology-Core-dtl.19
Author: dtl
Time: 15 December 2018, 6:47:29.647762 pm
UUID: 501afcd3-0158-4b5b-a9b2-2f284fd760a3
Ancestors: Chronology-Core-dtl.18
Bootstrap UTCDateAndTime, step 4 of 5
Resume using DateAndTime instead of LXDateAndTime.
Change instance creation in LXDateAndTime to create DateAndTime instances instead.
In the postScript, have LXDateAndTime instances become DateAndTime.
=============== Diff against Chronology-Core-dtl.18 ===============
Item was changed:
----- Method: DateAndTime class>>fromSeconds: (in category 'smalltalk-80') -----
fromSeconds: seconds
"Answer a DateAndTime since the Squeak epoch: 1 January 1901"
+ "dtl - Implemented for compatibiity with Squeak, but this is probably wrong"
+
+ | s uSec offset |
+ self flag: #FIXME. "local versus UTC? what should we set the offset to?"
+ offset := self localOffsetSeconds.
+ s := seconds - self epochOffset - offset..
+ uSec := s * 1000000.
+ ^ self utcMicroseconds: uSec offset: offset
+ !
- ^ LXDateAndTime fromSeconds: seconds
- " | integerSeconds nanos |
- integerSeconds := seconds truncated.
- integerSeconds = seconds
- ifTrue: [nanos := 0]
- ifFalse: [nanos := (seconds - integerSeconds * NanosInSecond) asInteger].
- ^ self basicNew
- ticks: (Array
- with: SqueakEpoch
- with: integerSeconds
- with: nanos)
- offset: self localOffset"!
Item was changed:
----- Method: DateAndTime class>>julianDayNumber:offset: (in category 'squeak protocol') -----
+ julianDayNumber: anInteger offset: aDuration
+ ^ self basicNew
- julianDayNumber: anInteger offset: aDuration
- ^ LXDateAndTime julianDayNumber: anInteger offset: aDuration
- " ^ self basicNew
ticks: anInteger days ticks
offset: aDuration ;
+ yourself!
- yourself"!
Item was changed:
----- Method: DateAndTime class>>now (in category 'ansi protocol') -----
+ now
+
+ [ | timeArray |
+ timeArray := self primPosixMicrosecondClockWithOffset.
+ ^ self utcMicroseconds: timeArray first offset: timeArray second]
+ on: Error
+ do: [ "Use old style primitive support"
+ ^self nowWithOffset: self localOffset]!
- now
- "^ self nowWithOffset: self localOffset"
- ^LXDateAndTime now!
Item was changed:
----- Method: DateAndTime class>>tomorrow (in category 'squeak protocol') -----
tomorrow
+ ^ self today asDate next asDateAndTime
- ^ self today asDate next asLXDateAndTime
!
Item was changed:
----- Method: DateAndTime class>>year:month:day:hour:minute:second:nanoSecond:offset: (in category 'squeak protocol') -----
year: year month: month day: day hour: hour minute: minute second: second nanoSecond: nanoCount offset: offset
"Return a DateAndTime"
+ | monthIndex daysInMonth p q r s julianDayNumber |
- ^ LXDateAndTime year: year month: month day: day hour: hour minute: minute second: second nanoSecond: nanoCount offset: offset
- " | monthIndex daysInMonth p q r s julianDayNumber |
monthIndex := month isInteger ifTrue: [month] ifFalse: [Month indexOfMonth: month].
daysInMonth := Month
daysInMonth: monthIndex
forYear: year.
day < 1 ifTrue: [self error: 'day may not be zero or negative'].
day > daysInMonth ifTrue: [self error: 'day is after month ends'].
p := (monthIndex - 14) quo: 12.
q := year + 4800 + p.
r := monthIndex - 2 - (12 * p).
s := (year + 4900 + p) quo: 100.
julianDayNumber :=
( (1461 * q) quo: 4 ) +
( (367 * r) quo: 12 ) -
( (3 * s) quo: 4 ) +
( day - 32075 ).
^self basicNew
setJdn: julianDayNumber
+ seconds: hour * 60 + minute * 60 + second - offset asSeconds
- seconds: hour * 60 + minute * 60 + second
nano: nanoCount
offset: offset;
+ yourself!
- yourself"!
Item was changed:
----- Method: DateAndTime class>>yesterday (in category 'squeak protocol') -----
yesterday
+ ^ self today asDate previous asDateAndTime!
- ^ self today asDate previous asLXDateAndTime!
Item was changed:
----- Method: DateAndTime>>- (in category 'ansi protocol') -----
- operand
"operand conforms to protocol DateAndTime or protocol Duration"
+ ^ (operand respondsTo: #asDateAndTime)
- ^ (operand respondsTo: #asLXDateAndTime)
ifTrue:
[ | lticks rticks |
lticks := self asLocal ticks.
+ rticks := operand asDateAndTime asLocal ticks.
- rticks := operand asLXDateAndTime asLocal ticks.
Duration
seconds: (SecondsInDay *(lticks first - rticks first)) +
(lticks second - rticks second)
nanoSeconds: (lticks third - rticks third) ]
ifFalse:
[ self + (operand negated) ]
!
Item was changed:
----- Method: DateAndTime>>< (in category 'ansi protocol') -----
< comparand
"comparand conforms to protocol DateAndTime,
or can be converted into something that conforms."
+ ^utcMicroseconds < comparand asDateAndTime utcMicroseconds
- utcMicroseconds ifNil: [^true]. self flag: #FIXME. "dtl transitional hack"
- ^utcMicroseconds < comparand asLXDateAndTime utcMicroseconds
!
Item was changed:
----- Method: DateAndTime>>= (in category 'ansi protocol') -----
= aDateAndTimeOrTimeStamp
"Equal if the absolute time values match, regardless of local time transform"
self == aDateAndTimeOrTimeStamp ifTrue: [ ^ true ].
((aDateAndTimeOrTimeStamp isKindOf: self class)
+ or: [aDateAndTimeOrTimeStamp isKindOf: DateAndTime orOf: TimeStamp])
- or: [aDateAndTimeOrTimeStamp isKindOf: LXDateAndTime orOf: TimeStamp])
ifFalse: [ ^ false ].
^utcMicroseconds = aDateAndTimeOrTimeStamp utcMicroseconds!
Item was changed:
----- Method: DateAndTime>>to: (in category 'squeak protocol') -----
to: anEnd
"Answer a Timespan. anEnd conforms to protocol DateAndTime or protocol Timespan"
+ ^ Timespan starting: self ending: (anEnd asDateAndTime)
- ^ Timespan starting: self ending: (anEnd asLXDateAndTime)
!
Item was changed:
----- Method: DateAndTime>>to:by: (in category 'squeak protocol') -----
to: anEnd by: aDuration
"Answer a Timespan. anEnd conforms to protocol DateAndTime or protocol Timespan"
+ ^ (Schedule starting: self ending: (anEnd asDateAndTime))
- ^ (Schedule starting: self ending: (anEnd asLXDateAndTime))
schedule: (Array with: aDuration asDuration);
yourself
!
Item was changed:
----- Method: LXDateAndTime class>>initialize (in category 'initialize-release') -----
initialize
+ | oldInstances newInstances |
super initialize.
ClockProvider := Time.
LastTickSemaphore := Semaphore forMutualExclusion.
LastMilliSeconds := 0.
LastTick := 0.
Smalltalk addToStartUpList: self.
+ self startUp: true.
+
+ "Postscript:
+ Convert all instances of LXDateAndTime and LXTimeStamp to the equivalent DateAndTime and TimeStamp."
+
+ Smalltalk garbageCollect.
+ oldInstances := LXDateAndTime allInstances, LXTimeStamp allInstances.
+ newInstances := oldInstances collect: [ :each |
+ each class == LXDateAndTime
+ ifTrue: [ each asDateAndTime ]
+ ifFalse: [ each asTimeStamp ] ].
+ oldInstances elementsForwardIdentityTo: newInstances.
+ Smalltalk garbageCollect.
+
- self startUp: true
!
Item was removed:
- ----- Method: Time class>>primPosixMicrosecondClockWithOffsetStoredIn: (in category 'LX-Kernel-Chronology') -----
- primPosixMicrosecondClockWithOffsetStoredIn: resultArray
- "Answer an array with UTC microseconds since the Posix epoch and the
- current seconds offset from GMT in the local time zone, supplying a two
- element result array that will be populated in the primitive."
-
- <primitive: 'primitiveUtcWithOffset'>
- ^#(0 0)!
Item was changed:
+ ----- Method: TimeStamp>>asTimeStamp (in category 'squeak protocol') -----
- ----- Method: TimeStamp>>asTimeStamp (in category 'transitional') -----
asTimeStamp
"Answer the receiver as an instance of TimeStamp."
^ self!
Item was changed:
+ (PackageInfo named: 'Chronology-Core') postscript: '"Convert all instances of LXDateAndTime and LXTimeStamp to the equivalent DateAndTime and TimeStamp."
- (PackageInfo named: 'Chronology-Core') postscript: '"Convert all instances of DateAndTime and TimeStamp to the equivalent LXDateAndTime and LXTimeStamp."
| oldInstances newInstances |
Smalltalk garbageCollect.
+ oldInstances := LXDateAndTime allInstances, LXTimeStamp allInstances.
- oldInstances := DateAndTime allInstances, TimeStamp allInstances.
newInstances := oldInstances collect: [ :each |
+ each class == LXDateAndTime
+ ifTrue: [ each asDateAndTime ]
+ ifFalse: [ each asTimeStamp ] ].
- each class == DateAndTime
- ifTrue: [ each asLXDateAndTime ]
- ifFalse: [ each asLXTimeStamp ] ].
oldInstances elementsForwardIdentityTo: newInstances.
Smalltalk garbageCollect.
"Ensure that the object history mark process uses DateAndTime>>floor rather than an earlier implementation that relied on a named instance variable."
+ Smalltalk at: #ObjectHistory ifPresent: [ :cls | cls current perform: #restartMarkProcess ].
- Smalltalk at: #ObjectHistory ifPresent: [ :cls | cls current restartMarkProcess ].
'!
More information about the Squeak-dev
mailing list
|