Procházet zdrojové kódy

Add Pharo-like handy Object >> #putOn: and Stream >> #<< for streaming

Nicolas Petton před 11 roky
rodič
revize
c17e9af79f

+ 46 - 0
js/Kernel-Collections.deploy.js

@@ -468,6 +468,19 @@ return $2;
 messageSends: ["do:", "ifTrue:", "+", "="]}),
 smalltalk.Collection);
 
+smalltalk.addMethod(
+"_putOn_",
+smalltalk.method({
+selector: "putOn:",
+fn: function (aStream){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._do_((function(each){
+return smalltalk.withContext(function($ctx2) {
return _st(each)._putOn_(aStream);
+}, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1)})}));
+return self}, function($ctx1) {$ctx1.fill(self,"putOn:",{aStream:aStream},smalltalk.Collection)})},
+messageSends: ["do:", "putOn:"]}),
+smalltalk.Collection);
+
 smalltalk.addMethod(
 "_readStream",
 smalltalk.method({
@@ -2259,6 +2272,17 @@ return self}, function($ctx1) {$ctx1.fill(self,"printOn:",{aStream:aStream},smal
 messageSends: ["printOn:", "asString"]}),
 smalltalk.CharacterArray);
 
+smalltalk.addMethod(
+"_putOn_",
+smalltalk.method({
+selector: "putOn:",
+fn: function (aStream){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(aStream)._nextPutAll_(self);
+return self}, function($ctx1) {$ctx1.fill(self,"putOn:",{aStream:aStream},smalltalk.CharacterArray)})},
+messageSends: ["nextPutAll:"]}),
+smalltalk.CharacterArray);
+
 smalltalk.addMethod(
 "_remove_",
 smalltalk.method({
@@ -3772,6 +3796,17 @@ smalltalk.RegularExpression.klass);
 
 
 smalltalk.addClass('Stream', smalltalk.Object, ['collection', 'position', 'streamSize'], 'Kernel-Collections');
+smalltalk.addMethod(
+"__lt_lt",
+smalltalk.method({
+selector: "<<",
+fn: function (anObject){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._write_(anObject);
+return self}, function($ctx1) {$ctx1.fill(self,"<<",{anObject:anObject},smalltalk.Stream)})},
+messageSends: ["write:"]}),
+smalltalk.Stream);
+
 smalltalk.addMethod(
 "_atEnd",
 smalltalk.method({
@@ -4077,6 +4112,17 @@ return $1;
 messageSends: []}),
 smalltalk.Stream);
 
+smalltalk.addMethod(
+"_write_",
+smalltalk.method({
+selector: "write:",
+fn: function (anObject){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(anObject)._putOn_(self);
+return self}, function($ctx1) {$ctx1.fill(self,"write:",{anObject:anObject},smalltalk.Stream)})},
+messageSends: ["putOn:"]}),
+smalltalk.Stream);
+
 
 smalltalk.addMethod(
 "_on_",

+ 66 - 0
js/Kernel-Collections.js

@@ -625,6 +625,24 @@ referencedClasses: []
 }),
 smalltalk.Collection);
 
+smalltalk.addMethod(
+"_putOn_",
+smalltalk.method({
+selector: "putOn:",
+category: 'streaming',
+fn: function (aStream){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._do_((function(each){
+return smalltalk.withContext(function($ctx2) {
return _st(each)._putOn_(aStream);
+}, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1)})}));
+return self}, function($ctx1) {$ctx1.fill(self,"putOn:",{aStream:aStream},smalltalk.Collection)})},
+args: ["aStream"],
+source: "putOn: aStream\x0a\x09self do: [ :each | each putOn: aStream ]",
+messageSends: ["do:", "putOn:"],
+referencedClasses: []
+}),
+smalltalk.Collection);
+
 smalltalk.addMethod(
 "_readStream",
 smalltalk.method({
@@ -3042,6 +3060,22 @@ referencedClasses: []
 }),
 smalltalk.CharacterArray);
 
+smalltalk.addMethod(
+"_putOn_",
+smalltalk.method({
+selector: "putOn:",
+category: 'streaming',
+fn: function (aStream){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(aStream)._nextPutAll_(self);
+return self}, function($ctx1) {$ctx1.fill(self,"putOn:",{aStream:aStream},smalltalk.CharacterArray)})},
+args: ["aStream"],
+source: "putOn: aStream\x0a\x09aStream nextPutAll: self",
+messageSends: ["nextPutAll:"],
+referencedClasses: []
+}),
+smalltalk.CharacterArray);
+
 smalltalk.addMethod(
 "_remove_",
 smalltalk.method({
@@ -5111,6 +5145,22 @@ smalltalk.RegularExpression.klass);
 
 smalltalk.addClass('Stream', smalltalk.Object, ['collection', 'position', 'streamSize'], 'Kernel-Collections');
 smalltalk.Stream.comment="I represent an accessor for a sequence of objects. This sequence is referred to as my \x22contents\x22.\x0aMy instances are read/write streams to the contents sequence collection."
+smalltalk.addMethod(
+"__lt_lt",
+smalltalk.method({
+selector: "<<",
+category: 'writing',
+fn: function (anObject){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(self)._write_(anObject);
+return self}, function($ctx1) {$ctx1.fill(self,"<<",{anObject:anObject},smalltalk.Stream)})},
+args: ["anObject"],
+source: "<< anObject\x0a\x09self write: anObject",
+messageSends: ["write:"],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
 smalltalk.addMethod(
 "_atEnd",
 smalltalk.method({
@@ -5531,6 +5581,22 @@ referencedClasses: []
 }),
 smalltalk.Stream);
 
+smalltalk.addMethod(
+"_write_",
+smalltalk.method({
+selector: "write:",
+category: 'writing',
+fn: function (anObject){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(anObject)._putOn_(self);
+return self}, function($ctx1) {$ctx1.fill(self,"write:",{anObject:anObject},smalltalk.Stream)})},
+args: ["anObject"],
+source: "write: anObject\x0a\x09anObject putOn: self",
+messageSends: ["putOn:"],
+referencedClasses: []
+}),
+smalltalk.Stream);
+
 
 smalltalk.addMethod(
 "_on_",

+ 11 - 0
js/Kernel-Objects.deploy.js

@@ -546,6 +546,17 @@ return $1;
 messageSends: ["streamContents:", "printOn:"]}),
 smalltalk.Object);
 
+smalltalk.addMethod(
+"_putOn_",
+smalltalk.method({
+selector: "putOn:",
+fn: function (aStream){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(aStream)._nextPut_(self);
+return self}, function($ctx1) {$ctx1.fill(self,"putOn:",{aStream:aStream},smalltalk.Object)})},
+messageSends: ["nextPut:"]}),
+smalltalk.Object);
+
 smalltalk.addMethod(
 "_respondsTo_",
 smalltalk.method({

+ 16 - 0
js/Kernel-Objects.js

@@ -762,6 +762,22 @@ referencedClasses: ["String"]
 }),
 smalltalk.Object);
 
+smalltalk.addMethod(
+"_putOn_",
+smalltalk.method({
+selector: "putOn:",
+category: 'streaming',
+fn: function (aStream){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
_st(aStream)._nextPut_(self);
+return self}, function($ctx1) {$ctx1.fill(self,"putOn:",{aStream:aStream},smalltalk.Object)})},
+args: ["aStream"],
+source: "putOn: aStream\x0a\x09aStream nextPut: self",
+messageSends: ["nextPut:"],
+referencedClasses: []
+}),
+smalltalk.Object);
+
 smalltalk.addMethod(
 "_respondsTo_",
 smalltalk.method({

+ 20 - 0
st/Kernel-Collections.st

@@ -223,6 +223,12 @@ errorNotFound
 	self error: 'Object is not in the collection'
 ! !
 
+!Collection methodsFor: 'streaming'!
+
+putOn: aStream
+	self do: [ :each | each putOn: aStream ]
+! !
+
 !Collection methodsFor: 'testing'!
 
 ifEmpty: aBlock
@@ -1049,6 +1055,12 @@ printOn: aStream
 	self asString printOn: aStream
 ! !
 
+!CharacterArray methodsFor: 'streaming'!
+
+putOn: aStream
+	aStream nextPutAll: self
+! !
+
 !CharacterArray class methodsFor: 'instance creation'!
 
 fromString: aString
@@ -1827,6 +1839,10 @@ isEmpty
 
 !Stream methodsFor: 'writing'!
 
+<< anObject
+	self write: anObject
+!
+
 nextPut: anObject
 	self position: self position + 1.
 	self collection at: self position put: anObject.
@@ -1836,6 +1852,10 @@ nextPut: anObject
 nextPutAll: aCollection
 	aCollection do: [:each |
 		self nextPut: each]
+!
+
+write: anObject
+	anObject putOn: self
 ! !
 
 !Stream class methodsFor: 'instance creation'!

+ 6 - 0
st/Kernel-Objects.st

@@ -250,6 +250,12 @@ printString
 	^ String streamContents: [ :stream | self printOn: stream ]
 ! !
 
+!Object methodsFor: 'streaming'!
+
+putOn: aStream
+	aStream nextPut: self
+! !
+
 !Object methodsFor: 'testing'!
 
 ifNil: aBlock