File tree Expand file tree Collapse file tree
STONReader.class/instance
STONWriter.class/instance
STON-GemStone-Core.package
AbstractFraction.extension
STONReaderTests.class/instance
STONWriterTests.class/instance Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -4,7 +4,7 @@ parseMapDo: block
44 (self matchChar: $})
55 ifTrue: [ ^ self ].
66 [ readStream atEnd ] whileFalse: [ | name value |
7- name := self parseValue .
7+ name := self parseSimpleValue .
88 (allowComplexMapKeys or : [ name isString or : [ name isNumber ] ])
99 ifFalse: [ self error: ' unexpected property name type' ].
1010 self expectChar: $:.
Original file line number Diff line number Diff line change @@ -3,10 +3,16 @@ parseNumber
33 | negated number |
44 negated := readStream peekFor: $- .
55 number := self parseNumberInteger.
6- (readStream peekFor: $.)
7- ifTrue: [ number := number + self parseNumberFraction ].
8- ((readStream peekFor: $e) or : [ readStream peekFor: $E ])
9- ifTrue: [ number := number * self parseNumberExponent ].
6+ (readStream peekFor: $/ )
7+ ifTrue:
8+ [number := Fraction numerator: number denominator: self parseNumberInteger.
9+ (readStream peekFor: $s)
10+ ifTrue: [ number := ScaledDecimal for: number scale: self parseNumberInteger ]]
11+ ifFalse:
12+ [(readStream peekFor: $.)
13+ ifTrue: [ number := number + self parseNumberFraction ].
14+ ((readStream peekFor: $e) or : [ readStream peekFor: $E ])
15+ ifTrue: [ number := number * self parseNumberExponent ]].
1016 negated
1117 ifTrue: [ number := number negated ].
1218 self consumeWhitespace.
Original file line number Diff line number Diff line change 1+ parsing
2+ parseSimpleValue
3+ | char |
4+ readStream atEnd ifFalse: [
5+ (self isClassStartChar: (char := readStream peek))
6+ ifTrue: [ ^ self parseObject ].
7+ char = ${
8+ ifTrue: [ ^ self parseMap ].
9+ char = $[
10+ ifTrue: [ ^ self parseList ].
11+ (char = $' or: [ char = $" ])
12+ ifTrue: [ ^ self parseString ].
13+ char = $#
14+ ifTrue: [ ^ self parseSymbol ].
15+ char = $@
16+ ifTrue: [ ^ self parseReference ].
17+ (char = $- or: [ char isDigit ])
18+ ifTrue: [ ^ self parseNumber ].
19+ self parseConstantDo: [ :value | ^ value ] ].
20+ self error: ' invalid input'
Original file line number Diff line number Diff line change 11parsing
22parseValue
3- | char |
4- readStream atEnd ifFalse: [
5- (self isClassStartChar: (char := readStream peek))
6- ifTrue: [ ^ self parseObject ].
7- char = ${
8- ifTrue: [ ^ self parseMap ].
9- char = $[
10- ifTrue: [ ^ self parseList ].
11- (char = $' or: [ char = $" ])
12- ifTrue: [ ^ self parseString ].
13- char = $#
14- ifTrue: [ ^ self parseSymbol ].
15- char = $@
16- ifTrue: [ ^ self parseReference ].
17- (char = $- or: [ char isDigit ])
18- ifTrue: [ ^ self parseNumber ].
19- self parseConstantDo: [ :value | ^ value ] ].
20- self error: ' invalid input'
3+
4+ | value |
5+ value := self parseSimpleValue.
6+ ^ (self matchChar: $:)
7+ ifTrue: [ Association new key: value value: self parseValue ]
8+ ifFalse: [ value ]
Original file line number Diff line number Diff line change 1+ writing
2+ writeAssociation: association
3+
4+ jsonMode
5+ ifTrue: [ self error: ' wrong object class for JSON mode' ].
6+ self
7+ encodeKey: association key
8+ value: association value
Original file line number Diff line number Diff line change 1+ writing
2+ writeFraction: fraction
3+
4+ jsonMode
5+ ifTrue: [ self writeFloat: fraction asFloat ]
6+ ifFalse: [ writeStream
7+ print: fraction numerator;
8+ nextPut: $/ ;
9+ print: fraction denominator ]
Original file line number Diff line number Diff line change 1+ writing
2+ writeScaledDecimal: scaledDecimal
3+
4+ jsonMode
5+ ifTrue: [ self writeFloat: scaledDecimal asFloat ]
6+ ifFalse: [ writeStream
7+ print: scaledDecimal numerator;
8+ nextPut: $/ ;
9+ print: scaledDecimal denominator;
10+ nextPut: $s;
11+ print: scaledDecimal scale ]
Original file line number Diff line number Diff line change 1+ * ston- gemstone- core
2+ stonOn: stonWriter
3+
4+ stonWriter writeFraction: self
Original file line number Diff line number Diff line change 1+ {
2+ "class" : {
3+ },
4+ "instance" : {
5+ } }
Original file line number Diff line number Diff line change 1+ {
2+ "name" : " AbstractFraction" }
You can’t perform that action at this time.
0 commit comments