--- 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:[