|
@@ -77,7 +77,6 @@ define(['./junk-drawer'], function ($goodies) {
|
|
var installAmberMethodIntoAmberClass = brikz.runtimeMethods.installAmberMethodIntoAmberClass;
|
|
var installAmberMethodIntoAmberClass = brikz.runtimeMethods.installAmberMethodIntoAmberClass;
|
|
var traitsOrClasses = brikz.behaviors.traitsOrClasses;
|
|
var traitsOrClasses = brikz.behaviors.traitsOrClasses;
|
|
var wireKlass = brikz.classes.wireKlass;
|
|
var wireKlass = brikz.classes.wireKlass;
|
|
- var installIvarCompat = brikz.classes.installIvarCompat;
|
|
|
|
|
|
|
|
var detachedRootClasses = [];
|
|
var detachedRootClasses = [];
|
|
|
|
|
|
@@ -130,14 +129,25 @@ define(['./junk-drawer'], function ($goodies) {
|
|
|
|
|
|
emit.classAdded = initClassAndMetaclass;
|
|
emit.classAdded = initClassAndMetaclass;
|
|
|
|
|
|
|
|
+ emit.slotsChanged = initClassSlots;
|
|
|
|
+
|
|
function initClass (klass) {
|
|
function initClass (klass) {
|
|
wireKlass(klass);
|
|
wireKlass(klass);
|
|
|
|
+ initClassMethods(klass);
|
|
|
|
+ initClassSlots(klass);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ function initClassMethods (klass) {
|
|
if (klass.detachedRoot) {
|
|
if (klass.detachedRoot) {
|
|
copySuperclass(klass);
|
|
copySuperclass(klass);
|
|
}
|
|
}
|
|
installMethods(klass);
|
|
installMethods(klass);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ function initClassSlots (klass) {
|
|
|
|
+ installIvarCompat(klass);
|
|
|
|
+ }
|
|
|
|
+
|
|
function copySuperclass (klass) {
|
|
function copySuperclass (klass) {
|
|
var myproto = klass.fn.prototype,
|
|
var myproto = klass.fn.prototype,
|
|
superproto = klass.superclass.fn.prototype;
|
|
superproto = klass.superclass.fn.prototype;
|
|
@@ -153,6 +163,23 @@ define(['./junk-drawer'], function ($goodies) {
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+ function installIvarCompat (klass) {
|
|
|
|
+ var ivars = klass.slots;
|
|
|
|
+ ivars.forEach(function (ivar) {
|
|
|
|
+ Object.defineProperty(klass.fn.prototype, "@" + ivar, {
|
|
|
|
+ get: function () {
|
|
|
|
+ return this[ivar];
|
|
|
|
+ },
|
|
|
|
+ set: function (value) {
|
|
|
|
+ return this[ivar] = value;
|
|
|
|
+ },
|
|
|
|
+ enumerable: false,
|
|
|
|
+ configurable: true
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
st.alias = function (traitOrClass, alias) {
|
|
st.alias = function (traitOrClass, alias) {
|
|
@@ -164,7 +191,6 @@ define(['./junk-drawer'], function ($goodies) {
|
|
st.setClassConstructor = this.setClassConstructor = function (klass, constructor) {
|
|
st.setClassConstructor = this.setClassConstructor = function (klass, constructor) {
|
|
klass.fn = constructor;
|
|
klass.fn = constructor;
|
|
detachClass(klass);
|
|
detachClass(klass);
|
|
- installIvarCompat(klass);
|
|
|
|
klass.subclasses.forEach(reprotoFn(constructor));
|
|
klass.subclasses.forEach(reprotoFn(constructor));
|
|
};
|
|
};
|
|
|
|
|