Browse Source

root/rootAsClass

Herbert Vojčík 11 years ago
parent
commit
c97a0a4d3b
1 changed files with 18 additions and 11 deletions
  1. 18 11
      support/boot.js

+ 18 - 11
support/boot.js

@@ -111,6 +111,8 @@ function RootBrik(brikz, st) {
 
 	this.nil = new SmalltalkNil();
 
+	this.rootAsClass = {fn: SmalltalkRoot};
+
 	this.__init__ = function () {
 		st.addPackage("Kernel-Objects");
 		st.addPackage("Kernel-Infrastructure");
@@ -166,6 +168,7 @@ function DNUBrik(brikz, st) {
 	brikz.ensure("selectorConversion");
 	brikz.ensure("messageSend");
 	var manip = brikz.ensure("manipulation");
+	var rootAsClass = brikz.ensure("root").rootAsClass;
 
 	/* Method not implemented handlers */
 
@@ -182,7 +185,7 @@ function DNUBrik(brikz, st) {
 		checker[selector] = true;
 		var method = {jsSelector: selector, fn: createHandler(selector)};
 		methods.push(method);
-		manip.installMethod(method, {fn: SmalltalkRoot});
+		manip.installMethod(method, rootAsClass);
 		return method;
 	};
 
@@ -296,7 +299,10 @@ function ManipulationBrik(brikz, st) {
 function ClassesBrik(brikz, st) {
 
 	var org = brikz.ensure("organize");
-	var nil = brikz.ensure("root").nil;
+	var root = brikz.ensure("root");
+	var nil = root.nil;
+	var rootAsClass = root.rootAsClass;
+	rootAsClass.klass = {fn: SmalltalkClass};
 
 	function SmalltalkPackage() {}
 	function SmalltalkBehavior() {}
@@ -310,15 +316,13 @@ function ClassesBrik(brikz, st) {
 
 	SmalltalkMetaclass.prototype.meta = true;
 
-	var nilKlass;
-
 	this.__init__ = function () {
 		st.addPackage("Kernel-Classes");
 		st.wrapClassName("Behavior", "Kernel-Classes", SmalltalkBehavior, st.Object, false);
 		st.wrapClassName("Metaclass", "Kernel-Classes", SmalltalkMetaclass, st.Behavior, false);
 		st.wrapClassName("Class", "Kernel-Classes", SmalltalkClass, st.Behavior, false);
 
-		st.Object.klass.superclass = nilKlass = st.Class;
+		st.Object.klass.superclass = rootAsClass.klass = st.Class;
 		addSubclass(st.Object.klass);
 
 		st.wrapClassName("Package", "Kernel-Infrastructure", SmalltalkPackage, st.Object, false);
@@ -350,14 +354,17 @@ function ClassesBrik(brikz, st) {
 
 	function klass(spec) {
 		spec = spec || {};
+		var setSuperClass = spec.superclass;
+		if(!spec.superclass) {
+			spec.superclass = rootAsClass;
+		}
+
 		var meta = metaclass(spec);
 		var that = meta.instanceClass;
 
-		if(spec.superclass) {
-			that.superclass = spec.superclass;
-		}
+		that.superclass = setSuperClass;
 
-		that.fn = spec.fn || inherits(function () {}, spec.superclass ? spec.superclass.fn : SmalltalkRoot);
+		that.fn = spec.fn || inherits(function () {}, spec.superclass.fn);
 		that.subclasses = [];
 
 		setupClass(that, spec);
@@ -365,14 +372,14 @@ function ClassesBrik(brikz, st) {
 		that.className = spec.className;
 		that.wrapped   = spec.wrapped || false;
 		meta.className = spec.className + ' class';
-		meta.superclass = spec.superclass ? spec.superclass.klass : nilKlass;
+		meta.superclass = spec.superclass.klass;
 		return that;
 	}
 
 	function metaclass(spec) {
 		spec = spec || {};
 		var that = new SmalltalkMetaclass();
-		that.fn = inherits(function () {}, spec.superclass ? spec.superclass.klass.fn : SmalltalkClass);
+		that.fn = inherits(function () {}, spec.superclass.klass.fn);
 		that.instanceClass = new that.fn();
 		setupClass(that);
 		return that;