Parcourir la source

Repetitious recursive calls of init on metaclasses fixed. Load speed improved considerably.

Herbert Vojčík il y a 12 ans
Parent
commit
0427a9582b
2 fichiers modifiés avec 12 ajouts et 11 suppressions
  1. 11 10
      js/boot.js
  2. 1 1
      js/init.js

+ 11 - 10
js/boot.js

@@ -163,9 +163,16 @@ function Smalltalk(){
 
 	/* Initialize a class in its class hierarchy. Handle both class and
 	   metaclasses. */
+	   
+	st.init = function(klass) {
+		st.initSubTree(klass);
+		if(klass.klass && !klass.meta) {
+			st.initSubTree(klass.klass);
+		}
+	};
 
 	if ('function' === typeof Object.keys) {
-		st.init = function(klass) {
+		st.initSubTree = function(klass) {
 			var subclasses = st.subclasses(klass);
 			var methods, proto = klass.fn.prototype;
 
@@ -183,14 +190,11 @@ function Smalltalk(){
 			}
 
 			for(var i=0;i<subclasses.length;i++) {
-				st.init(subclasses[i]);
-			}
-			if(klass.klass && !klass.meta) {
-				st.init(klass.klass);
+				st.initSubTree(subclasses[i]);
 			}
 		};
 	} else {
-		st.init = function(klass) {
+		st.initSubTree = function(klass) {
 			var subclasses = st.subclasses(klass);
 			var methods, proto = klass.fn.prototype;
 
@@ -207,10 +211,7 @@ function Smalltalk(){
 			}
 
 			for(var i=0;i<subclasses.length;i++) {
-				st.init(subclasses[i]);
-			}
-			if(klass.klass && !klass.meta) {
-				st.init(klass.klass);
+				st.initSubTree(subclasses[i]);
 			}
 		};
 	}

+ 1 - 1
js/init.js

@@ -1,4 +1,4 @@
-smalltalk.init(smalltalk.Object);
+smalltalk.initSubTree(smalltalk.Object); //metaclasses are in through Class
 smalltalk.classes()._do_(function(each) {
 	each._initialize()});