Number.st
branchjv
changeset 18045 c0c600e0d3b3
parent 18011 deb0c3355881
parent 15100 c1d1943616e0
child 18046 99298a6ac55a
--- a/Number.st	Tue Apr 16 14:27:04 2013 +0200
+++ b/Number.st	Thu Apr 18 20:41:50 2013 +0200
@@ -188,6 +188,12 @@
 
         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.
@@ -302,6 +308,9 @@
      Number readFrom:'16rAAAAFFFFAAAAFFFF' 
      Number readFrom:'0.000001'  
      '+00000123.45' asNumber  
+     Number readFrom:'(1/3)'      
+     Number readFrom:'(-1/3)'      
+     Number readFrom:'(-1/3'      
      Number readFrom:'99s'      
      Number readFrom:'99.00s'      
      Number readFrom:'99.0000000s'      
@@ -371,19 +380,38 @@
      (character-) aStream.
      Returns nil if aStream contains no valid number."
 
-    ^ Scanner scanNumberFrom:aStream
-"/    ^ Compiler evaluate:aStream compile:false "/ self readFrom:aStream.
+"/ this code fails on Fractions!!
+"/    ^ Scanner scanNumberFrom:aStream
+    |value|
+
+    [
+        value := Compiler
+                    evaluate:aStream
+                    in:nil
+                    receiver:nil
+                    notifying:nil
+                    logged:false
+                    ifFail:[^ nil]
+                    compile:false.
+    ] on:Error do:[:ex|
+        ^ nil.
+    ].
+
+    (value isKindOf:self) ifFalse:[^ nil].
+
+    ^ value.
 
     "
      Number readSmalltalkSyntaxFrom:'99d'    
      Number readSmalltalkSyntaxFrom:'99.00d'    
-     Number readSmalltalkSyntaxFrom:(ReadStream on:'54.32e-01')    
-     Number readSmalltalkSyntaxFrom:(ReadStream on:'12345678901234567890')
-     Number readSmalltalkSyntaxFrom:(ReadStream on:'16rAAAAFFFFAAAAFFFF')
-     Number readSmalltalkSyntaxFrom:(ReadStream on:'(1/10)') 
-     Number readFrom:(ReadStream on:'(1/10)') 
-     Number readSmalltalkSyntaxFrom:(ReadStream on:'+00000123.45')  
-     Number readFrom:(ReadStream on:'+00000123.45')  
+     Number readSmalltalkSyntaxFrom:'54.32e-01'    
+     Number readSmalltalkSyntaxFrom:'12345678901234567890'
+     Number readSmalltalkSyntaxFrom:'16rAAAAFFFFAAAAFFFF'
+     Number readSmalltalkSyntaxFrom:'(1/10)' 
+     Number readFrom:'(1/3)'
+     Number readFrom:'(-1/3)'
+     Number readSmalltalkSyntaxFrom:'+00000123.45'  
+     Number readFrom:'+00000123.45'  
 
      |s|
      s := ReadStream on:'2.'.
@@ -720,7 +748,6 @@
 	^ self truncated
 ! !
 
-
 !Number methodsFor:'Compatibility-Squeak'!
 
 asSmallAngleDegrees
@@ -2321,13 +2348,13 @@
     "Modified: / 5.11.2001 / 17:54:22 / cg"
 ! !
 
-
 !Number class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Number.st,v 1.137 2012-11-05 16:48:19 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Number.st,v 1.139 2013-04-17 10:37:35 stefan Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/Number.st,v 1.137 2012-11-05 16:48:19 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Number.st,v 1.139 2013-04-17 10:37:35 stefan Exp $'
 ! !
+