[squeak-dev] The Inbox: Kernel-ul.867.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Aug 8 12:39:34 UTC 2014


A new version of Kernel was added to project The Inbox:
http://source.squeak.org/inbox/Kernel-ul.867.mcz

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

Name: Kernel-ul.867
Author: ul
Time: 8 August 2014, 2:38:42.181 pm
UUID: 063b12b2-4b02-4c50-a8a9-65e1e733adff
Ancestors: Kernel-eem.866

- support code for Fraction literals
- optimized versions of #isZero.

=============== Diff against Kernel-eem.866 ===============

Item was added:
+ ----- Method: Fraction>>isLiteral (in category 'printing') -----
+ isLiteral
+ 
+ 	| remainder powerOfFive expPowersOfFive qr index |
+ 	(remainder := denominator bitShift: 1 - denominator lowBit) = 1 ifTrue: [ ^true ].
+ 	powerOfFive := 5.
+ 	expPowersOfFive := OrderedCollection new.
+ 	[ 
+ 		qr := remainder digitDiv: powerOfFive neg: false.
+ 		(qr at: 2) normalize = 0 ] whileTrue: [
+ 			remainder := (qr at: 1) normalize.
+ 			expPowersOfFive add: powerOfFive.
+ 			powerOfFive := powerOfFive * powerOfFive ].
+ 	(index := expPowersOfFive size) = 0 ifTrue: [ ^false ].
+ 	[ index >= 1 and: [ remainder ~= 1 " >1 " ] ] whileTrue: [
+ 		powerOfFive := expPowersOfFive at: index.
+ 		qr := remainder digitDiv: powerOfFive neg: false.
+ 		(qr at: 2) normalize = 0 ifTrue: [
+ 			remainder := (qr at: 1) normalize ].
+ 		index := index - 1 ].
+ 	^remainder = 1!

Item was added:
+ ----- Method: Fraction>>printAsDecimalFractionIfPossibleOn: (in category 'printing') -----
+ printAsDecimalFractionIfPossibleOn: aStream
+ 
+ 	| twos fives remainder exponent mantissa |
+ 	twos := denominator lowBit - 1.
+ 	fives := 0.
+ 	(remainder := denominator bitShift: twos negated) ~= 1 "  >1 "  ifTrue: [ 
+ 		| powerOfFive expPowersOfFive qr index |
+ 		powerOfFive := 5.
+ 		expPowersOfFive := OrderedCollection new.
+ 		[ 
+ 			qr := remainder digitDiv: powerOfFive neg: false.
+ 			(qr at: 2) normalize = 0 ] whileTrue: [
+ 				remainder := (qr at: 1) normalize.
+ 				expPowersOfFive add: powerOfFive.
+ 				powerOfFive := powerOfFive * powerOfFive.
+ 				fives := fives + (1 bitShift: expPowersOfFive size - 1) ].
+ 		(index := expPowersOfFive size) = 0 ifTrue: [ ^false ].
+ 		[ index >= 1 and: [ remainder ~= 1 " >1 " ] ] whileTrue: [
+ 			powerOfFive := expPowersOfFive at: index.
+ 			qr := remainder digitDiv: powerOfFive neg: false.
+ 			(qr at: 2) normalize = 0 ifTrue: [
+ 				remainder := (qr at: 1) normalize.
+ 				fives := fives + (1 bitShift: index - 1) ].
+ 			index := index - 1 ] ].
+ 	remainder = 1 ifFalse: [ ^false ].
+ 	" denominator has the form of 2^twos * 5^fives "
+ 	twos = fives
+ 		ifTrue: [
+ 			mantissa := numerator.
+ 			exponent := twos ]
+ 		ifFalse: [
+ 			twos < fives
+ 				ifTrue: [
+ 					mantissa := numerator bitShift: fives - twos.
+ 					exponent := fives ]
+ 				ifFalse: [
+ 					mantissa := numerator * (5 raisedToInteger: twos - fives).
+ 					exponent := twos ] ].
+ 	mantissa printOn: aStream base: 10.
+ 	aStream nextPutAll: 'e-'.
+ 	exponent printOn: aStream base: 10.
+ 	^true!

Item was removed:
- ----- Method: Fraction>>printOn: (in category 'printing') -----
- printOn: aStream
- 
- 	aStream nextPut: $(.
- 	numerator printOn: aStream.
- 	aStream nextPut: $/.
- 	denominator printOn: aStream.
- 	aStream nextPut: $).
- !

Item was changed:
  ----- Method: Fraction>>printOn:base: (in category 'printing') -----
  printOn: aStream base: base
  
+ 	(base = 10 and: [ self printAsDecimalFractionIfPossibleOn: aStream ]) ifTrue: [ ^self ].
  	aStream nextPut: $(.
  	numerator printOn: aStream base: base.
  	aStream nextPut: $/.
  	denominator printOn: aStream base: base.
  	aStream nextPut: $).
  !

Item was added:
+ ----- Method: LargeNegativeInteger>>isZero (in category 'testing') -----
+ isZero
+ 	"Optimization. Answer false since receiver is less than 0."
+ 
+ 	^false
+ !

Item was added:
+ ----- Method: LargePositiveInteger>>isZero (in category 'testing') -----
+ isZero
+ 	"Optimization. Answer false since receiver is greater than 0."
+ 
+ 	^false
+ !



More information about the Squeak-dev mailing list