1
0
Ver Fonte

boot.js: some refactorings in briks

Herbert Vojčík há 11 anos atrás
pai
commit
8c5f57f609
1 ficheiros alterados com 55 adições e 48 exclusões
  1. 55 48
      js/boot.js

+ 55 - 48
js/boot.js

@@ -100,18 +100,21 @@ function OrganizeBrik(brikz, st) {
 
 	var org = this;
 
-	org.Organizer = function () {};
-	inherits(org.Organizer, SmalltalkObject);
-
-	org.PackageOrganizer = function () {
+	function SmalltalkOrganizer () {}
+	function SmalltalkPackageOrganizer () {
 		this.elements = [];
-	};
-	inherits(org.PackageOrganizer, org.Organizer);
-
-	org.ClassOrganizer = function () {
+	}
+	function SmalltalkClassOrganizer () {
 		this.elements = [];
-	};
-	inherits(org.ClassOrganizer, org.Organizer);
+	}
+
+	inherits(SmalltalkOrganizer, SmalltalkObject);
+	inherits(SmalltalkPackageOrganizer, SmalltalkOrganizer);
+	inherits(SmalltalkClassOrganizer, SmalltalkOrganizer);
+
+	org.Organizer = SmalltalkOrganizer;
+	org.PackageOrganizer = SmalltalkPackageOrganizer;
+	org.ClassOrganizer = SmalltalkClassOrganizer;
 
 	org.setupClassOrganization = function (klass) {
 		klass.organization = new org.ClassOrganizer;
@@ -133,10 +136,11 @@ function OrganizeBrik(brikz, st) {
 
 function DNUBrik(brikz, st) {
 
-	/* Method not implemented handlers */
-
 	brikz.ensure("selectorConversion");
 	brikz.ensure("messageSend");
+	var manip = brikz.ensure("manipulation");
+
+	/* Method not implemented handlers */
 
 	this.methods = [];
 	this.selectors = [];
@@ -163,6 +167,13 @@ function DNUBrik(brikz, st) {
 
 		return handler;
 	}
+
+	this.installHandlers = function (klass) {
+		var m = this.methods;
+		for(var i=0; i<m.length; i++) {
+			manip.installMethodIfAbsent(m[i], klass);
+		}
+	};
 }
 
 function ClassInitBrik(brikz, st) {
@@ -189,7 +200,7 @@ function ClassInitBrik(brikz, st) {
 		}
 
 		if(klass === st.Object || klass.wrapped) {
-			installDnuHandlers(klass);
+			dnu.installHandlers(klass);
 		}
 	};
 
@@ -224,13 +235,6 @@ function ClassInitBrik(brikz, st) {
 		manip.installMethod(method, klass);
 		klass.inheritedMethods[method.selector] = true;
 	}
-
-	function installDnuHandlers(klass) {
-		var m = dnu.methods;
-		for(var i=0; i<m.length; i++) {
-			manip.installMethodIfAbsent(m[i], klass);
-		}
-	}
 }
 
 function ManipulationBrik(brikz, st) {
@@ -498,10 +502,11 @@ function MethodsBrik(brikz, st) {
 
 	var manip = brikz.ensure("manipulation");
 	var org = brikz.ensure("organize");
-	var instance = brikz.ensure("instance");
+	var stInit = brikz.ensure("stInit");
 	var dnu = brikz.ensure("dnu");
 	brikz.ensure("selectorConversion");
 	brikz.ensure("augments");
+	brikz.ensure("classes");
 
 	function SmalltalkMethod() {}
 	inherits(SmalltalkMethod, SmalltalkObject);
@@ -566,7 +571,7 @@ function MethodsBrik(brikz, st) {
 		// re-initialize all subclasses to ensure the new method
 		// propagation (for wrapped classes, not using the prototype
 		// chain.
-		if(instance.initialized()) {
+		if(stInit.initialized()) {
 			st.allSubclasses(klass).forEach(function(subclass) {
 				st.initClass(subclass);
 			});
@@ -574,7 +579,7 @@ function MethodsBrik(brikz, st) {
 
 		for(var i=0; i<method.messageSends.length; i++) {
 			var dnuHandler = dnu.get(method.messageSends[i]);
-			if(instance.initialized()) {
+			if(stInit.initialized()) {
 				installNewDnuHandler(dnuHandler);
 			}
 		}
@@ -627,9 +632,10 @@ function AugmentsBrik(brikz, st) {
 	};
 }
 
-function InstanceBrik(brikz, st) {
+function SmalltalkInitBrik(brikz, st) {
 
 	brikz.ensure("classInit");
+	brikz.ensure("classes");
 
 	var initialized = false;
 
@@ -652,29 +658,6 @@ function InstanceBrik(brikz, st) {
 		return initialized;
 	};
 
-	/* List of all reserved words in JavaScript. They may not be used as variables
-		in Smalltalk. */
-
-	// list of reserved JavaScript keywords as of
-	//   http://es5.github.com/#x7.6.1.1
-	// and
-	//   http://people.mozilla.org/~jorendorff/es6-draft.html#sec-7.6.1
-	st.reservedWords = ['break', 'case', 'catch', 'continue', 'debugger',
-		'default', 'delete', 'do', 'else', 'finally', 'for', 'function',
-		'if', 'in', 'instanceof', 'new', 'return', 'switch', 'this', 'throw',
-		'try', 'typeof', 'var', 'void', 'while', 'with',
-		// ES5: future use: http://es5.github.com/#x7.6.1.2
-		'class', 'const', 'enum', 'export', 'extends', 'import', 'super',
-		// ES5: future use in strict mode
-		'implements', 'interface', 'let', 'package', 'private', 'protected',
-		'public', 'static', 'yield'];
-
-	st.globalJsVariables = ['jQuery', 'window', 'document', 'process', 'global'];
-
-	if(this.jQuery) {
-		this.jQuery.allowJavaScriptCalls = true;
-	}
-
 }
 
 function PrimitivesBrik(brikz, st) {
@@ -719,6 +702,25 @@ function PrimitivesBrik(brikz, st) {
 	/* Backward compatibility with Amber 0.9.1 */
 	st.symbolFor = function(aString) { return aString; };
 
+	/* List of all reserved words in JavaScript. They may not be used as variables
+	 in Smalltalk. */
+
+	// list of reserved JavaScript keywords as of
+	//   http://es5.github.com/#x7.6.1.1
+	// and
+	//   http://people.mozilla.org/~jorendorff/es6-draft.html#sec-7.6.1
+	st.reservedWords = ['break', 'case', 'catch', 'continue', 'debugger',
+		'default', 'delete', 'do', 'else', 'finally', 'for', 'function',
+		'if', 'in', 'instanceof', 'new', 'return', 'switch', 'this', 'throw',
+		'try', 'typeof', 'var', 'void', 'while', 'with',
+		// ES5: future use: http://es5.github.com/#x7.6.1.2
+		'class', 'const', 'enum', 'export', 'extends', 'import', 'super',
+		// ES5: future use in strict mode
+		'implements', 'interface', 'let', 'package', 'private', 'protected',
+		'public', 'static', 'yield'];
+
+	st.globalJsVariables = ['jQuery', 'window', 'document', 'process', 'global'];
+
 }
 
 function RuntimeBrik(brikz, st) {
@@ -917,6 +919,10 @@ function MessageSendBrik(brikz, st) {
 		return st.send(st.JSObjectProxy._on_(receiver), selector, args);
 	}
 
+	if(this.jQuery) {
+		this.jQuery.allowJavaScriptCalls = true;
+	}
+
 	this.messageNotUnderstood = messageNotUnderstood;
 }
 
@@ -1033,9 +1039,10 @@ brikz.classInit = ClassInitBrik;
 brikz.manipulation = ManipulationBrik;
 brikz.classes = ClassesBrik;
 brikz.methods = MethodsBrik;
-brikz.instance = InstanceBrik;
+brikz.stInit = SmalltalkInitBrik;
 brikz.augments = AugmentsBrik;
 brikz.bootstrap = BootstrapBrik;
+
 brikz.rebuild();
 
 global_smalltalk = api;