Number.st
changeset 2 6526dde5f3ac
parent 1 a27a279701f8
child 3 24d81bf47225
--- a/Number.st	Fri Jul 16 11:39:45 1993 +0200
+++ b/Number.st	Mon Oct 04 11:32:33 1993 +0100
@@ -44,7 +44,11 @@
         _InstPtr(newPoint)->o_class = Point;
         _PointInstPtr(newPoint)->p_x = self;
         _PointInstPtr(newPoint)->p_y = aNumber;
-	/* no store check needed - its definitely in newSpace */
+        /*
+	 * no store check needed for self: self is a number, new object is definitely in newSpace
+	 * however, argument may be a context/block
+	 */
+	__STORE(newPoint, aNumber);
         RETURN ( newPoint );
     }
 %}
@@ -64,12 +68,15 @@
     if (_CanDoQuickNew(sizeof(struct point))) {
         OBJ newPoint;
 
-	_qCheckedAlignedNew(newPoint, sizeof(struct point), __context);
-	_InstPtr(newPoint)->o_class = Point;
-	_PointInstPtr(newPoint)->p_x = self;
-	_PointInstPtr(newPoint)->p_y = self;
-	/* no store check needed - its definitely in newSpace */
-	RETURN ( newPoint );
+        _qCheckedAlignedNew(newPoint, sizeof(struct point), __context);
+        _InstPtr(newPoint)->o_class = Point;
+        _PointInstPtr(newPoint)->p_x = self;
+        _PointInstPtr(newPoint)->p_y = self;
+        /* 
+	 * no store check needed - its definitely in newSpace
+	 * and self is a number
+         */
+        RETURN ( newPoint );
     }
 %}
 .
@@ -228,7 +235,11 @@
     ] ifFalse:[
         negative := false
     ].
-    nextChar isDigit ifFalse:[ ^ nil].
+    nextChar isDigit ifFalse:[
+        value := super readFrom:aStream.
+        negative ifTrue:[value := value negated].
+        ^ value
+    ].
     value := Integer readFrom:aStream radix:10.
     nextChar := aStream peek.
     ((nextChar == $r) or:[ nextChar == $R]) ifTrue:[