|
@@ -362,52 +362,47 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
|
|
|
if (typeof superclass == 'undefined' || superclass && superclass.isNil) {
|
|
|
console.warn('Compiling ' + className + ' as a subclass of `nil`. A dependency might be missing.');
|
|
|
}
|
|
|
- return rawAddClass(pkgName, className, superclass, iVarNames, null);
|
|
|
+ return rawAddClass(pkgName, "class", {className: className, superclass: superclass, iVarNames: iVarNames});
|
|
|
+ };
|
|
|
+
|
|
|
+ var classFactories = this.classFactories = {
|
|
|
+ "class": klass
|
|
|
};
|
|
|
|
|
|
st.addTrait = function (className, pkgName) {
|
|
|
- return rawAddClass(pkgName, className, "trait");
|
|
|
+ return rawAddClass(pkgName, "trait", {className: className});
|
|
|
};
|
|
|
+ classFactories.trait = trait;
|
|
|
|
|
|
- function rawAddClass (pkgName, className, superclass, iVarNames, fn) {
|
|
|
- var pkg = st.packages[pkgName];
|
|
|
+ function rawAddClass (pkgName, type, spec) {
|
|
|
+ spec.pkg = st.packages[pkgName];
|
|
|
|
|
|
- if (!pkg) {
|
|
|
+ if (!spec.pkg) {
|
|
|
throw new Error("Missing package " + pkgName);
|
|
|
}
|
|
|
|
|
|
- var isTrait = superclass === "trait";
|
|
|
- if (isTrait || superclass == null || superclass.isNil) {
|
|
|
- superclass = null;
|
|
|
+ if (spec.superclass == null || spec.superclass.isNil) {
|
|
|
+ spec.superclass = null;
|
|
|
}
|
|
|
- var theClass = globals.hasOwnProperty(className) && globals[className];
|
|
|
- if (theClass && theClass.superclass == superclass && !fn) {
|
|
|
- if (iVarNames) theClass.iVarNames = iVarNames;
|
|
|
- if (pkg) theClass.pkg = pkg;
|
|
|
+ var theClass = globals.hasOwnProperty(spec.className) && globals[spec.className];
|
|
|
+ if (theClass && theClass.superclass == spec.superclass && !spec.fn) {
|
|
|
+ if (spec.iVarNames) theClass.iVarNames = spec.iVarNames;
|
|
|
+ if (spec.pkg) theClass.pkg = spec.pkg;
|
|
|
} else {
|
|
|
if (theClass) {
|
|
|
- iVarNames = iVarNames || theClass.iVarNames;
|
|
|
+ spec.iVarNames = spec.iVarNames || theClass.iVarNames;
|
|
|
st.removeClass(theClass);
|
|
|
}
|
|
|
|
|
|
- theClass = globals[className] = isTrait ? trait({
|
|
|
- className: className,
|
|
|
- pkg: pkg
|
|
|
- }) : klass({
|
|
|
- className: className,
|
|
|
- superclass: superclass,
|
|
|
- pkg: pkg,
|
|
|
- iVarNames: iVarNames,
|
|
|
- fn: fn
|
|
|
- });
|
|
|
+ theClass = globals[spec.className] = classFactories[type](spec);
|
|
|
|
|
|
addSubclass(theClass);
|
|
|
}
|
|
|
|
|
|
classes.addElement(theClass);
|
|
|
- addOrganizationElement(pkg, theClass);
|
|
|
- if (!isTrait && st._classAdded) st._classAdded(theClass);
|
|
|
- if (isTrait && st._traitAdded) st._traitAdded(theClass);
|
|
|
+ addOrganizationElement(spec.pkg, theClass);
|
|
|
+ if (!theClass.trait && st._classAdded) st._classAdded(theClass);
|
|
|
+ if (theClass.trait && st._traitAdded) st._traitAdded(theClass);
|
|
|
return theClass;
|
|
|
}
|
|
|
|
|
@@ -434,7 +429,7 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
|
|
|
and add it to the system.*/
|
|
|
|
|
|
this.addCoupledClass = function (className, superclass, pkgName, fn) {
|
|
|
- return rawAddClass(pkgName, className, superclass, null, fn);
|
|
|
+ return rawAddClass(pkgName, "class", {className: className, superclass: superclass, fn: fn});
|
|
|
};
|
|
|
|
|
|
/* Create an alias for an existing class */
|