class: Number
authorClaus Gittinger <cg@exept.de>
Tue, 30 Apr 2013 17:17:34 +0200
changeset 15197 a78cec832ef3
parent 15196 116b287d6d89
child 15198 e363d70765ab
class: Number comment/format in: #readSmalltalkSyntaxFrom: changed: #readFrom:decimalPointCharacters:onError: allow reading sign(fraction)
Number.st
--- a/Number.st	Tue Apr 30 15:38:25 2013 +0200
+++ b/Number.st	Tue Apr 30 17:17:34 2013 +0200
@@ -182,35 +182,35 @@
 
     ^ [
         |value intValue mantissaAndScale scale decimalMantissa str 
-         nextChar radix negative signExp exp denom|
+         nextChar radix sign signExp exp denom|
 
         str := aStringOrStream readStream.
 
         nextChar := str skipSeparators.
         nextChar isNil ifTrue:[^ exceptionBlock value].
-        nextChar = $( ifTrue:[
-            "maybe a Fraction e.g. (1/3)"
-            value := self readSmalltalkSyntaxFrom:str.
-            value isNil ifTrue:[^ exceptionBlock value].
-            ^ value
-        ].
 
         (nextChar == $-) ifTrue:[
-            negative := true.
+            sign := -1.
             str next.
             nextChar := str peekOrNil
         ] ifFalse:[
-            negative := false.
+            sign := 1.
             (nextChar == $+) ifTrue:[
                 str next.
                 nextChar := str peekOrNil
             ]
         ].
+        nextChar = $( ifTrue:[
+            "maybe a Fraction e.g. (1/3)"
+            value := self readSmalltalkSyntaxFrom:str.
+            value isNil ifTrue:[^ exceptionBlock value].
+            ^ value * sign
+        ].
         nextChar isNil ifTrue:[^ exceptionBlock value].    
         (nextChar isDigit or:[(decimalPointCharacters includes:nextChar)]) ifFalse:[
             ^ exceptionBlock value.
 "/          value := super readFrom:str.
-"/          negative ifTrue:[value := value negated].
+"/          sign == -1 ifTrue:[value := value negated].
 "/          ^ value
         ].
         (decimalPointCharacters includes:nextChar) ifTrue:[
@@ -293,7 +293,7 @@
                 ].
             ].
         ].
-        negative ifTrue:[
+        sign == -1 ifTrue:[
             value := value negated
         ].
         value.
@@ -396,8 +396,12 @@
 
      Number readSmalltalkSyntaxFrom:'(1/0)' 
 
-     Number readFrom:'(1/3)'
+     Number readFrom:'(1/3)' 
      Number readFrom:'(-1/3)'
+     Number readFrom:'-(1/3)' 
+     Number readFrom:'(1/-3)' 
+     Number readFrom:'(-1/-3)' 
+     Number readFrom:'-(-1/-3)'   
      Number readSmalltalkSyntaxFrom:'+00000123.45'  
      Number readFrom:'+00000123.45'  
 
@@ -736,6 +740,7 @@
         ^ self truncated
 ! !
 
+
 !Number methodsFor:'Compatibility-Squeak'!
 
 asSmallAngleDegrees
@@ -2339,10 +2344,10 @@
 !Number class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Number.st,v 1.141 2013-04-19 15:07:39 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Number.st,v 1.142 2013-04-30 15:17:34 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Number.st,v 1.141 2013-04-19 15:07:39 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Number.st,v 1.142 2013-04-30 15:17:34 cg Exp $'
 ! !