[Pkg] The Trunk: Kernel-ul.959.mcz

commits at source.squeak.org commits at source.squeak.org
Sat Oct 10 14:08:42 UTC 2015


Levente Uzonyi uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-ul.959.mcz

==================== Summary ====================

Name: Kernel-ul.959
Author: ul
Time: 10 October 2015, 3:44:26.604 pm
UUID: 0b44d9be-d30e-4daf-8dfc-411b2000d574
Ancestors: Kernel-topa.958

Use #== instead of #= for symbol comparison and compare the floating point value directly to zero in Float >> #adaptTo*andCompare: methods. Also removed the branch for NaN, because the remaining branches yield the same result.

Duration changes:
- avoid LargeInteger operations in #days:hours:minutes:seconds:nanoSeconds: ad #asMilliSeconds as much as possible

=============== Diff against Kernel-topa.958 ===============

Item was changed:
  ----- Method: Duration class>>days:hours:minutes:seconds:nanoSeconds: (in category 'squeak protocol') -----
  days: days hours: hours minutes: minutes seconds: seconds nanoSeconds: nanos	
  
+  	^self
+ 		seconds: seconds
+ 			+ (minutes * SecondsInMinute) 
+ 			+ (hours * SecondsInHour)
+ 			+ (days * SecondsInDay)
+ 		nanoseconds: nanos
-  	^ self seconds: ((days * SecondsInDay) 
- 						+ (hours * SecondsInHour)
- 							+ (minutes * SecondsInMinute) 
- 								+ seconds)
- 		nanoSeconds: nanos
  !

Item was changed:
  ----- Method: Duration>>asMilliSeconds (in category 'squeak protocol') -----
  asMilliSeconds
  
+ 	nanos = 0 ifTrue: [ ^seconds * 1000 ].
+ 	^nanos // 1000000 + (seconds * 1000)!
- 
- 	^ ((seconds * NanosInSecond) + nanos) // (10 raisedToInteger: 6)!

Item was changed:
  ----- Method: Duration>>asNanoSeconds (in category 'squeak protocol') -----
  asNanoSeconds
  
+ 	^seconds * NanosInSecond + nanos!
- 	^ (seconds * NanosInSecond) + nanos!

Item was changed:
  ----- Method: Float>>adaptToFraction:andCompare: (in category 'converting') -----
  adaptToFraction: rcvr andCompare: selector 
  	"If I am involved in comparison with a Fraction, convert myself to a
  	Fraction. This way, no bit is lost and comparison is exact."
  	
+ 	self isFinite ifFalse: [
+ 		selector == #= ifTrue: [ ^false ].
+ 		selector == #~= ifTrue: [ ^true ].
+ 		(selector == #< or: [ selector == #'<=' ])
+ 			ifTrue: [ ^self >= 0.0].
+ 		(selector == #> or: [ selector == #'>=' ])
+ 			ifTrue: [ ^0.0 >= self ].
+ 		^self error: 'unknow comparison selector' ].
- 	self isFinite
- 		ifFalse: [
- 			selector == #= ifTrue: [^false].
- 			selector == #~= ifTrue: [^true].
- 			self isNaN ifTrue: [^ false].
- 			(selector = #< or: [selector = #'<='])
- 				ifTrue: [^ self positive].
- 			(selector = #> or: [selector = #'>='])
- 				ifTrue: [^ self positive not].
- 			^self error: 'unknow comparison selector'].
  		
  	"Try to avoid asTrueFraction because it can cost"
  	rcvr isAnExactFloat ifTrue: [^rcvr asExactFloat perform: selector with: self].
  	selector == #= ifTrue: [^false].
  	selector == #~= ifTrue: [^true].
  	^ rcvr perform: selector with: self asTrueFraction!

Item was changed:
  ----- Method: Float>>adaptToInteger:andCompare: (in category 'converting') -----
  adaptToInteger: rcvr andCompare: selector 
  	"If I am involved in comparison with an Integer, convert myself to a
  	Fraction. This way, no bit is lost and comparison is exact."
  	
+ 	self isFinite ifFalse: [
+ 		selector == #= ifTrue: [ ^false ].
+ 		selector == #~= ifTrue: [ ^true ].
+ 		(selector == #< or: [ selector == #'<=' ])
+ 			ifTrue: [ ^self >= 0.0 ].
+ 		(selector == #> or: [ selector == #'>=' ])
+ 			ifTrue: [ ^0.0 >= self ].
+ 		^self error: 'unknow comparison selector'].
- 	self isFinite
- 		ifFalse: [
- 			selector == #= ifTrue: [^false].
- 			selector == #~= ifTrue: [^true].
- 			self isNaN ifTrue: [^ false].
- 			(selector = #< or: [selector = #'<='])
- 				ifTrue: [^ self positive].
- 			(selector = #> or: [selector = #'>='])
- 				ifTrue: [^ self positive not].
- 			^self error: 'unknow comparison selector'].
  		
  	"Try to avoid asTrueFraction because it can cost"
  	selector == #= ifTrue: [
  		self fractionPart = 0.0 ifFalse: [^false]].
  	selector == #~= ifTrue: [
  		self fractionPart = 0.0 ifFalse: [^true]].
  	
  	rcvr isAnExactFloat ifTrue: [^rcvr asExactFloat perform: selector with: self].
  	selector == #= ifTrue: [^false].
  	selector == #~= ifTrue: [^true].
  	^ rcvr perform: selector with: self asTrueFraction!

Item was changed:
  ----- Method: Float>>adaptToScaledDecimal:andCompare: (in category 'converting') -----
  adaptToScaledDecimal: rcvr andCompare: selector 
  	"If I am involved in comparison with a scaled Decimal, convert myself to a
  	Fraction. This way, no bit is lost and comparison is exact."
  	
+ 	self isFinite ifFalse: [
+ 		selector == #= ifTrue: [^false].
+ 		selector == #~= ifTrue: [^true].
+ 		(selector == #< or: [ selector == #'<=' ])
+ 			ifTrue: [ ^self >= 0.0 ].
+ 		(selector == #> or: [ selector == #'>=' ])
+ 			ifTrue: [ ^0.0 >= self ].
+ 		^self error: 'unknow comparison selector' ].
- 	self isFinite
- 		ifFalse: [
- 			selector == #= ifTrue: [^false].
- 			selector == #~= ifTrue: [^true].
- 			self isNaN ifTrue: [^ false].
- 			(selector = #< or: [selector = #'<='])
- 				ifTrue: [^ self positive].
- 			(selector = #> or: [selector = #'>='])
- 				ifTrue: [^ self positive not].
- 			^self error: 'unknow comparison selector'].
  
  	"Try to avoid asTrueFraction because it can cost"
  	rcvr isAnExactFloat ifTrue: [^rcvr asExactFloat perform: selector with: self].
  	selector == #= ifTrue: [^false].
  	selector == #~= ifTrue: [^true].
  	^ rcvr perform: selector with: self asTrueFraction!



More information about the Packages mailing list