Skip to content

Commit d5d717e

Browse files
committed
Extract assignations from conditionals
1 parent 65c50ad commit d5d717e

File tree

8 files changed

+332
-322
lines changed

8 files changed

+332
-322
lines changed

src/ExtendedNumberParser/ExtendedNumberParser.class.st

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -115,75 +115,75 @@ ExtendedNumberParser >> nextNumber [
115115
ExtendedNumberParser >> readFractionPartNumberOfTrailingZeroInIntegerPart: numberOfTrailingZeroInIntegerPart [
116116
"at this stage, sign integerPart and a fraction point have been read.
117117
try and form a number with a fractionPart"
118-
118+
119119
| numberOfNonZeroFractionDigits numberOfTrailingZeroInFractionPart mantissa value |
120120
fractionPart := self nextUnsignedIntegerOrNilBase: base.
121-
fractionPart
122-
ifNil: [
123-
"No fractionPart found, but can be an extended 1.e2 syntax"
124-
integerPart ifNil: ["No integerPart, nor fractionPart found, ungobble the fraction point and raise an error"
125-
sourceStream skip: -1.
126-
^self expected: 'a digit'].
127-
fractionPart := 0.
128-
numberOfNonZeroFractionDigits := 0.
129-
numberOfTrailingZeroInFractionPart := 0]
130-
ifNotNil: [.
131-
numberOfNonZeroFractionDigits := lastNonZero.
132-
numberOfTrailingZeroInFractionPart := nDigits - lastNonZero].
121+
numberOfTrailingZeroInFractionPart := fractionPart
122+
ifNil: [ "No fractionPart found, but can be an extended 1.e2 syntax"
123+
integerPart ifNil: [ "No integerPart, nor fractionPart found, ungobble the fraction point and raise an error"
124+
sourceStream skip: -1.
125+
^ self expected: 'a digit' ].
126+
fractionPart := 0.
127+
numberOfNonZeroFractionDigits := 0.
128+
0 ]
129+
ifNotNil: [
130+
numberOfNonZeroFractionDigits := lastNonZero.
131+
nDigits - lastNonZero ].
133132
self readExponent.
134-
integerPart ifNil: [integerPart := 0].
135-
136-
fractionPart isZero
137-
ifTrue: [mantissa := integerPart
138-
// (base raisedToInteger: numberOfTrailingZeroInIntegerPart).
139-
exponent := exponent + numberOfTrailingZeroInIntegerPart]
140-
ifFalse: [mantissa := integerPart
141-
* (base raisedToInteger: numberOfNonZeroFractionDigits) + (fractionPart // (base raisedToInteger: numberOfTrailingZeroInFractionPart)).
142-
exponent := exponent - numberOfNonZeroFractionDigits].
133+
integerPart ifNil: [ integerPart := 0 ].
134+
exponent := fractionPart isZero
135+
ifTrue: [
136+
mantissa := integerPart // (base raisedToInteger: numberOfTrailingZeroInIntegerPart).
137+
exponent + numberOfTrailingZeroInIntegerPart ]
138+
ifFalse: [
139+
mantissa := integerPart * (base raisedToInteger: numberOfNonZeroFractionDigits)
140+
+ (fractionPart // (base raisedToInteger: numberOfTrailingZeroInFractionPart)).
141+
exponent - numberOfNonZeroFractionDigits ].
143142

144143
value := exponent positive
145-
ifTrue: [mantissa * (base raisedToInteger: exponent)]
146-
ifFalse: [mantissa / (base raisedToInteger: exponent negated)].
144+
ifTrue: [ mantissa * (base raisedToInteger: exponent) ]
145+
ifFalse: [ mantissa / (base raisedToInteger: exponent negated) ].
147146
^ neg
148-
ifTrue: [value negated]
149-
ifFalse: [value]
147+
ifTrue: [ value negated ]
148+
ifFalse: [ value ]
150149
]
151150

152151
{ #category : #'parsing-private' }
153152
ExtendedNumberParser >> readNumberWithFractionPartNumberOfTrailingZeroInIntegerPart: numberOfTrailingZeroInIntegerPart [
154153
"at this stage, sign integerPart and a decimal point have been read.
155154
try and form a number with a fractionPart"
156-
155+
157156
| numberOfNonZeroFractionDigits numberOfTrailingZeroInFractionPart mantissa value |
158157
fractionPart := self nextUnsignedIntegerOrNilBase: base.
159-
fractionPart
160-
ifNil: [
161-
"No fractionPart found, but can be a 1.e2 syntax"
162-
fractionPart := 0.
163-
numberOfNonZeroFractionDigits := 0.
164-
numberOfTrailingZeroInFractionPart := 0]
165-
ifNotNil: [
166-
numberOfNonZeroFractionDigits := lastNonZero.
167-
numberOfTrailingZeroInFractionPart := nDigits - lastNonZero].
168-
self readExponent
169-
ifFalse: [self readScale
170-
ifTrue: [^self makeScaledDecimalWithNumberOfNonZeroFractionDigits: numberOfNonZeroFractionDigits
171-
andNumberOfTrailingZeroInFractionPart: numberOfTrailingZeroInFractionPart]].
172-
173-
fractionPart isZero
174-
ifTrue: [mantissa := integerPart
175-
// (base raisedToInteger: numberOfTrailingZeroInIntegerPart).
176-
exponent := exponent + numberOfTrailingZeroInIntegerPart]
177-
ifFalse: [mantissa := integerPart
178-
* (base raisedToInteger: numberOfNonZeroFractionDigits) + (fractionPart // (base raisedToInteger: numberOfTrailingZeroInFractionPart)).
179-
exponent := exponent - numberOfNonZeroFractionDigits].
158+
numberOfTrailingZeroInFractionPart := fractionPart
159+
ifNil: [ "No fractionPart found, but can be a 1.e2 syntax"
160+
fractionPart := 0.
161+
numberOfNonZeroFractionDigits := 0.
162+
0 ]
163+
ifNotNil: [
164+
numberOfNonZeroFractionDigits := lastNonZero.
165+
nDigits - lastNonZero ].
166+
self readExponent ifFalse: [
167+
self readScale ifTrue: [
168+
^ self
169+
makeScaledDecimalWithNumberOfNonZeroFractionDigits: numberOfNonZeroFractionDigits
170+
andNumberOfTrailingZeroInFractionPart: numberOfTrailingZeroInFractionPart ] ].
171+
exponent := fractionPart isZero
172+
ifTrue: [
173+
mantissa := integerPart // (base raisedToInteger: numberOfTrailingZeroInIntegerPart).
174+
exponent + numberOfTrailingZeroInIntegerPart ]
175+
ifFalse: [
176+
mantissa := integerPart * (base raisedToInteger: numberOfNonZeroFractionDigits)
177+
+ (fractionPart // (base raisedToInteger: numberOfTrailingZeroInFractionPart)).
178+
exponent - numberOfNonZeroFractionDigits ].
180179

181180
value := self makeFloatFromMantissa: mantissa exponent: exponent base: base.
182181
^ neg
183-
ifTrue: [value isZero
184-
ifTrue: [Float negativeZero]
185-
ifFalse: [value negated]]
186-
ifFalse: [value]
182+
ifTrue: [
183+
value isZero
184+
ifTrue: [ Float negativeZero ]
185+
ifFalse: [ value negated ] ]
186+
ifFalse: [ value ]
187187
]
188188

189189
{ #category : #'parsing-private' }

src/Math-ArbitraryPrecisionFloat/NumberParser.extension.st

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,33 @@ NumberParser >> makeArbitraryPrecisionFloatFromMantissa: m exponent: k base: aRa
1313
NumberParser >> nextArbitraryPrecisionFloatNumBits: numBits [
1414
"Always make an ArbitraryPrecisionFloat whether there is a decimal point or not.
1515
Do not bother with radix scale or other things"
16-
16+
1717
| numberOfTrailingZeroInIntegerPart mantissa numberOfNonZeroFractionDigits numberOfTrailingZeroInFractionPart |
1818
base := 10.
1919
neg := self peekSignIsMinus.
2020
integerPart := self nextUnsignedIntegerBase: base.
2121
numberOfTrailingZeroInIntegerPart := nDigits - lastNonZero.
22-
((sourceStream peekFor: $.) and: [(fractionPart := self nextUnsignedIntegerOrNilBase: base) notNil])
23-
ifTrue:
24-
[numberOfNonZeroFractionDigits := lastNonZero.
25-
numberOfTrailingZeroInFractionPart := nDigits - lastNonZero]
26-
ifFalse:
27-
[fractionPart := 0.
28-
numberOfNonZeroFractionDigits := 0.
29-
numberOfTrailingZeroInFractionPart := 0].
22+
numberOfTrailingZeroInFractionPart := ((sourceStream peekFor: $.) and: [ (fractionPart := self nextUnsignedIntegerOrNilBase: base) notNil ])
23+
ifTrue: [
24+
numberOfNonZeroFractionDigits := lastNonZero.
25+
nDigits - lastNonZero ]
26+
ifFalse: [
27+
fractionPart := 0.
28+
numberOfNonZeroFractionDigits := 0.
29+
0 ].
3030
self readExponent.
31-
fractionPart isZero
32-
ifTrue:
33-
[mantissa := integerPart // (base raisedToInteger: numberOfTrailingZeroInIntegerPart).
34-
exponent := exponent + numberOfTrailingZeroInIntegerPart]
35-
ifFalse:
36-
[mantissa := integerPart * (base raisedToInteger: numberOfNonZeroFractionDigits)
37-
+ (fractionPart // (base raisedToInteger: numberOfTrailingZeroInFractionPart)).
38-
exponent := exponent - numberOfNonZeroFractionDigits].
39-
neg ifTrue: [mantissa := mantissa negated].
40-
^self makeArbitraryPrecisionFloatFromMantissa: mantissa exponent: exponent base: base numBits: numBits
31+
exponent := fractionPart isZero
32+
ifTrue: [
33+
mantissa := integerPart // (base raisedToInteger: numberOfTrailingZeroInIntegerPart).
34+
exponent + numberOfTrailingZeroInIntegerPart ]
35+
ifFalse: [
36+
mantissa := integerPart * (base raisedToInteger: numberOfNonZeroFractionDigits)
37+
+ (fractionPart // (base raisedToInteger: numberOfTrailingZeroInFractionPart)).
38+
exponent - numberOfNonZeroFractionDigits ].
39+
neg ifTrue: [ mantissa := mantissa negated ].
40+
^ self
41+
makeArbitraryPrecisionFloatFromMantissa: mantissa
42+
exponent: exponent
43+
base: base
44+
numBits: numBits
4145
]

0 commit comments

Comments
 (0)