Bläddra i källkod

- ForkPool refactorings
- Removed mixed st/js code from interval/timeout handling

Nicolas Petton 11 år sedan
förälder
incheckning
3a998848f7
6 ändrade filer med 189 tillägg och 66 borttagningar
  1. 53 14
      js/Kernel-Methods.deploy.js
  2. 79 24
      js/Kernel-Methods.js
  3. 8 6
      js/Kernel-Objects.deploy.js
  4. 10 8
      js/Kernel-Objects.js
  5. 31 8
      st/Kernel-Methods.st
  6. 8 6
      st/Kernel-Objects.st

+ 53 - 14
js/Kernel-Methods.deploy.js

@@ -187,13 +187,12 @@ smalltalk.method({
 selector: "valueWithInterval:",
 fn: function (aNumber){
 var self=this;
-var $1;
-var local;
-local = setInterval(self, aNumber);
+
+    	var interval = setInterval(self, aNumber);
+    	return smalltalk.Timeout._on_(interval);
+    ;
 ;
-$1=smalltalk.send((smalltalk.Timeout || Timeout),"_on_",[local]);
-return $1;
-}
+return self}
 }),
 smalltalk.BlockClosure);
 
@@ -215,13 +214,12 @@ smalltalk.method({
 selector: "valueWithTimeout:",
 fn: function (aNumber){
 var self=this;
-var $1;
-var local;
-local = setTimeout(self, aNumber);
+
+    	var timeout = setTimeout(self, aNumber);
+    	return smalltalk.Timeout._on_(timeout);
+    ;
 ;
-$1=smalltalk.send((smalltalk.Timeout || Timeout),"_on_",[local]);
-return $1;
-}
+return self}
 }),
 smalltalk.BlockClosure);
 
@@ -482,6 +480,19 @@ return self}
 }),
 smalltalk.ForkPool);
 
+smalltalk.addMethod(
+"_defaultMaxPoolSize",
+smalltalk.method({
+selector: "defaultMaxPoolSize",
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_class",[]),"_defaultMaxPoolSize",[]);
+return $1;
+}
+}),
+smalltalk.ForkPool);
+
 smalltalk.addMethod(
 "_fork_",
 smalltalk.method({
@@ -489,7 +500,7 @@ selector: "fork:",
 fn: function (aBlock){
 var self=this;
 var $1;
-$1=smalltalk.send(self["@poolSize"],"__lt",[self["@maxPoolSize"]]);
+$1=smalltalk.send(self["@poolSize"],"__lt",[smalltalk.send(self,"_maxPoolSize",[])]);
 if(smalltalk.assert($1)){
 smalltalk.send(self,"_addWorker",[]);
 };
@@ -506,7 +517,6 @@ fn: function (){
 var self=this;
 smalltalk.send(self,"_initialize",[],smalltalk.Object);
 self["@poolSize"]=(0);
-self["@maxPoolSize"]=smalltalk.send(smalltalk.send(self,"_class",[]),"_defaultMaxPoolSize",[]);
 self["@queue"]=smalltalk.send((smalltalk.Queue || Queue),"_new",[]);
 self["@worker"]=smalltalk.send(self,"_makeWorker",[]);
 return self}
@@ -544,6 +554,35 @@ return $1;
 }),
 smalltalk.ForkPool);
 
+smalltalk.addMethod(
+"_maxPoolSize",
+smalltalk.method({
+selector: "maxPoolSize",
+fn: function (){
+var self=this;
+var $2,$1;
+$2=self["@maxPoolSize"];
+if(($receiver = $2) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_defaultMaxPoolSize",[]);
+} else {
+$1=$2;
+};
+return $1;
+}
+}),
+smalltalk.ForkPool);
+
+smalltalk.addMethod(
+"_maxPoolSize_",
+smalltalk.method({
+selector: "maxPoolSize:",
+fn: function (anInteger){
+var self=this;
+self["@maxPoolSize"]=anInteger;
+return self}
+}),
+smalltalk.ForkPool);
+
 
 smalltalk.ForkPool.klass.iVarNames = ['default'];
 smalltalk.addMethod(

+ 79 - 24
js/Kernel-Methods.js

@@ -264,17 +264,16 @@ selector: "valueWithInterval:",
 category: 'timeout/interval',
 fn: function (aNumber){
 var self=this;
-var $1;
-var local;
-local = setInterval(self, aNumber);
+
+    	var interval = setInterval(self, aNumber);
+    	return smalltalk.Timeout._on_(interval);
+    ;
 ;
-$1=smalltalk.send((smalltalk.Timeout || Timeout),"_on_",[local]);
-return $1;
-},
+return self},
 args: ["aNumber"],
-source: "valueWithInterval: aNumber\x0a\x09| local |\x0a\x09<local = setInterval(self, aNumber)>.\x0a    ^ Timeout on: local",
-messageSends: ["on:"],
-referencedClasses: ["Timeout"]
+source: "valueWithInterval: aNumber\x0a\x09<\x0a    \x09var interval = setInterval(self, aNumber);\x0a    \x09return smalltalk.Timeout._on_(interval);\x0a    >",
+messageSends: [],
+referencedClasses: []
 }),
 smalltalk.BlockClosure);
 
@@ -302,17 +301,16 @@ selector: "valueWithTimeout:",
 category: 'timeout/interval',
 fn: function (aNumber){
 var self=this;
-var $1;
-var local;
-local = setTimeout(self, aNumber);
+
+    	var timeout = setTimeout(self, aNumber);
+    	return smalltalk.Timeout._on_(timeout);
+    ;
 ;
-$1=smalltalk.send((smalltalk.Timeout || Timeout),"_on_",[local]);
-return $1;
-},
+return self},
 args: ["aNumber"],
-source: "valueWithTimeout: aNumber\x0a\x09| local |\x0a\x09<local = setTimeout(self, aNumber)>.\x0a    ^ Timeout on: local",
-messageSends: ["on:"],
-referencedClasses: ["Timeout"]
+source: "valueWithTimeout: aNumber\x0a\x09<\x0a    \x09var timeout = setTimeout(self, aNumber);\x0a    \x09return smalltalk.Timeout._on_(timeout);\x0a    >",
+messageSends: [],
+referencedClasses: []
 }),
 smalltalk.BlockClosure);
 
@@ -647,6 +645,7 @@ smalltalk.CompiledMethod);
 
 
 smalltalk.addClass('ForkPool', smalltalk.Object, ['poolSize', 'maxPoolSize', 'queue', 'worker'], 'Kernel-Methods');
+smalltalk.ForkPool.comment="A ForkPool is responsible for handling forked blocks.\x0aThe pool size sets the maximum concurrent forked blocks.\x0a\x0aThe default instance is accessed with `ForkPool default`"
 smalltalk.addMethod(
 "_addWorker",
 smalltalk.method({
@@ -664,6 +663,24 @@ referencedClasses: []
 }),
 smalltalk.ForkPool);
 
+smalltalk.addMethod(
+"_defaultMaxPoolSize",
+smalltalk.method({
+selector: "defaultMaxPoolSize",
+category: 'defaults',
+fn: function (){
+var self=this;
+var $1;
+$1=smalltalk.send(smalltalk.send(self,"_class",[]),"_defaultMaxPoolSize",[]);
+return $1;
+},
+args: [],
+source: "defaultMaxPoolSize\x0a\x09^ self class defaultMaxPoolSize",
+messageSends: ["defaultMaxPoolSize", "class"],
+referencedClasses: []
+}),
+smalltalk.ForkPool);
+
 smalltalk.addMethod(
 "_fork_",
 smalltalk.method({
@@ -672,15 +689,15 @@ category: 'action',
 fn: function (aBlock){
 var self=this;
 var $1;
-$1=smalltalk.send(self["@poolSize"],"__lt",[self["@maxPoolSize"]]);
+$1=smalltalk.send(self["@poolSize"],"__lt",[smalltalk.send(self,"_maxPoolSize",[])]);
 if(smalltalk.assert($1)){
 smalltalk.send(self,"_addWorker",[]);
 };
 smalltalk.send(self["@queue"],"_back_",[aBlock]);
 return self},
 args: ["aBlock"],
-source: "fork: aBlock\x0a\x09poolSize < maxPoolSize ifTrue: [ self addWorker ].\x0a\x09queue back: aBlock",
-messageSends: ["ifTrue:", "addWorker", "<", "back:"],
+source: "fork: aBlock\x0a\x09poolSize < self maxPoolSize ifTrue: [ self addWorker ].\x0a\x09queue back: aBlock",
+messageSends: ["ifTrue:", "addWorker", "<", "maxPoolSize", "back:"],
 referencedClasses: []
 }),
 smalltalk.ForkPool);
@@ -694,13 +711,12 @@ fn: function (){
 var self=this;
 smalltalk.send(self,"_initialize",[],smalltalk.Object);
 self["@poolSize"]=(0);
-self["@maxPoolSize"]=smalltalk.send(smalltalk.send(self,"_class",[]),"_defaultMaxPoolSize",[]);
 self["@queue"]=smalltalk.send((smalltalk.Queue || Queue),"_new",[]);
 self["@worker"]=smalltalk.send(self,"_makeWorker",[]);
 return self},
 args: [],
-source: "initialize\x0a    super initialize.\x0a\x09poolSize := 0.\x0a    maxPoolSize := self class defaultMaxPoolSize.\x0a    queue := Queue new.\x0a    worker := self makeWorker",
-messageSends: ["initialize", "defaultMaxPoolSize", "class", "new", "makeWorker"],
+source: "initialize\x0a    super initialize.\x0a    \x0a\x09poolSize := 0.\x0a    queue := Queue new.\x0a    worker := self makeWorker",
+messageSends: ["initialize", "new", "makeWorker"],
 referencedClasses: ["Queue"]
 }),
 smalltalk.ForkPool);
@@ -741,6 +757,45 @@ referencedClasses: ["Object"]
 }),
 smalltalk.ForkPool);
 
+smalltalk.addMethod(
+"_maxPoolSize",
+smalltalk.method({
+selector: "maxPoolSize",
+category: 'accessing',
+fn: function (){
+var self=this;
+var $2,$1;
+$2=self["@maxPoolSize"];
+if(($receiver = $2) == nil || $receiver == undefined){
+$1=smalltalk.send(self,"_defaultMaxPoolSize",[]);
+} else {
+$1=$2;
+};
+return $1;
+},
+args: [],
+source: "maxPoolSize\x0a\x09^ maxPoolSize ifNil: [ self defaultMaxPoolSize ]",
+messageSends: ["ifNil:", "defaultMaxPoolSize"],
+referencedClasses: []
+}),
+smalltalk.ForkPool);
+
+smalltalk.addMethod(
+"_maxPoolSize_",
+smalltalk.method({
+selector: "maxPoolSize:",
+category: 'accessing',
+fn: function (anInteger){
+var self=this;
+self["@maxPoolSize"]=anInteger;
+return self},
+args: ["anInteger"],
+source: "maxPoolSize: anInteger\x0a\x09maxPoolSize := anInteger",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.ForkPool);
+
 
 smalltalk.ForkPool.klass.iVarNames = ['default'];
 smalltalk.addMethod(

+ 8 - 6
js/Kernel-Objects.deploy.js

@@ -3167,9 +3167,10 @@ smalltalk.method({
 selector: "clearInterval",
 fn: function (){
 var self=this;
-var local;
-local=self["@rawTimeout"];
-clearInterval(local);
+
+    	var interval = self["@rawTimeout"];
+		clearInterval(interval);
+    ;
 ;
 return self}
 }),
@@ -3181,9 +3182,10 @@ smalltalk.method({
 selector: "clearTimeout",
 fn: function (){
 var self=this;
-var local;
-local=self["@rawTimeout"];
-clearTimeout(local);
+
+    	var timeout = self["@rawTimeout"];
+		clearTimeout(timeout);
+    ;
 ;
 return self}
 }),

+ 10 - 8
js/Kernel-Objects.js

@@ -4353,13 +4353,14 @@ selector: "clearInterval",
 category: 'timeout/interval',
 fn: function (){
 var self=this;
-var local;
-local=self["@rawTimeout"];
-clearInterval(local);
+
+    	var interval = self["@rawTimeout"];
+		clearInterval(interval);
+    ;
 ;
 return self},
 args: [],
-source: "clearInterval\x0a\x09| local |\x0a    local := rawTimeout.\x0a\x09<clearInterval(local)>",
+source: "clearInterval\x0a\x09<\x0a    \x09var interval = self[\x22@rawTimeout\x22];\x0a\x09\x09clearInterval(interval);\x0a    >",
 messageSends: [],
 referencedClasses: []
 }),
@@ -4372,13 +4373,14 @@ selector: "clearTimeout",
 category: 'timeout/interval',
 fn: function (){
 var self=this;
-var local;
-local=self["@rawTimeout"];
-clearTimeout(local);
+
+    	var timeout = self["@rawTimeout"];
+		clearTimeout(timeout);
+    ;
 ;
 return self},
 args: [],
-source: "clearTimeout\x0a\x09| local |\x0a    local := rawTimeout.\x0a\x09<clearTimeout(local)>",
+source: "clearTimeout\x0a\x09<\x0a    \x09var timeout = self[\x22@rawTimeout\x22];\x0a\x09\x09clearTimeout(timeout);\x0a    >",
 messageSends: [],
 referencedClasses: []
 }),

+ 31 - 8
st/Kernel-Methods.st

@@ -120,15 +120,17 @@ fork
 !
 
 valueWithInterval: aNumber
-	| local |
-	<local = setInterval(self, aNumber)>.
-    ^ Timeout on: local
+	<
+    	var interval = setInterval(self, aNumber);
+    	return smalltalk.Timeout._on_(interval);
+    >
 !
 
 valueWithTimeout: aNumber
-	| local |
-	<local = setTimeout(self, aNumber)>.
-    ^ Timeout on: local
+	<
+    	var timeout = setTimeout(self, aNumber);
+    	return smalltalk.Timeout._on_(timeout);
+    >
 ! !
 
 Object subclass: #CompiledMethod
@@ -219,6 +221,21 @@ source: aString
 Object subclass: #ForkPool
 	instanceVariableNames: 'poolSize maxPoolSize queue worker'
 	package: 'Kernel-Methods'!
+!ForkPool commentStamp!
+A ForkPool is responsible for handling forked blocks.
+The pool size sets the maximum concurrent forked blocks.
+
+The default instance is accessed with `ForkPool default`!
+
+!ForkPool methodsFor: 'accessing'!
+
+maxPoolSize
+	^ maxPoolSize ifNil: [ self defaultMaxPoolSize ]
+!
+
+maxPoolSize: anInteger
+	maxPoolSize := anInteger
+! !
 
 !ForkPool methodsFor: 'action'!
 
@@ -228,16 +245,22 @@ addWorker
 !
 
 fork: aBlock
-	poolSize < maxPoolSize ifTrue: [ self addWorker ].
+	poolSize < self maxPoolSize ifTrue: [ self addWorker ].
 	queue back: aBlock
 ! !
 
+!ForkPool methodsFor: 'defaults'!
+
+defaultMaxPoolSize
+	^ self class defaultMaxPoolSize
+! !
+
 !ForkPool methodsFor: 'initialization'!
 
 initialize
     super initialize.
+    
 	poolSize := 0.
-    maxPoolSize := self class defaultMaxPoolSize.
     queue := Queue new.
     worker := self makeWorker
 !

+ 8 - 6
st/Kernel-Objects.st

@@ -1555,15 +1555,17 @@ rawTimeout: anObject
 !Timeout methodsFor: 'timeout/interval'!
 
 clearInterval
-	| local |
-    local := rawTimeout.
-	<clearInterval(local)>
+	<
+    	var interval = self["@rawTimeout"];
+		clearInterval(interval);
+    >
 !
 
 clearTimeout
-	| local |
-    local := rawTimeout.
-	<clearTimeout(local)>
+	<
+    	var timeout = self["@rawTimeout"];
+		clearTimeout(timeout);
+    >
 ! !
 
 !Timeout class methodsFor: 'instance creation'!