// Generated by CoffeeScript 1.6.3 var classic, __slice = [].slice; module.exports = classic = {}; classic.implement = function() { var classProto, classReference, desc, member, mixin, mixins, _i, _j, _len; mixins = 2 <= arguments.length ? __slice.call(arguments, 0, _i = arguments.length - 1) : (_i = 0, []), classReference = arguments[_i++]; for (_j = 0, _len = mixins.length; _j < _len; _j++) { mixin = mixins[_j]; classProto = classReference.prototype; for (member in mixin.prototype) { if (!Object.getOwnPropertyDescriptor(classProto, member)) { desc = Object.getOwnPropertyDescriptor(mixin.prototype, member); Object.defineProperty(classProto, member, desc); } } } return classReference; }; classic.mix = function() { var classProto, classReference, desc, member, mixin, mixins, _i, _j, _len; mixins = 2 <= arguments.length ? __slice.call(arguments, 0, _i = arguments.length - 1) : (_i = 0, []), classReference = arguments[_i++]; classProto = classReference.prototype; classReference.__mixinCloners = []; classReference.__applyClonersFor = function(instance, args) { var cloner, _j, _len, _ref; if (args == null) { args = null; } _ref = classReference.__mixinCloners; for (_j = 0, _len = _ref.length; _j < _len; _j++) { cloner = _ref[_j]; cloner.apply(instance, args); } }; classReference.__mixinInitializers = []; classReference.__initMixinsFor = function(instance, args) { var initializer, _j, _len, _ref; if (args == null) { args = null; } _ref = classReference.__mixinInitializers; for (_j = 0, _len = _ref.length; _j < _len; _j++) { initializer = _ref[_j]; initializer.apply(instance, args); } }; classReference.__mixinQuitters = []; classReference.__applyQuittersFor = function(instance, args) { var quitter, _j, _len, _ref; if (args == null) { args = null; } _ref = classReference.__mixinQuitters; for (_j = 0, _len = _ref.length; _j < _len; _j++) { quitter = _ref[_j]; quitter.apply(instance, args); } }; for (_j = 0, _len = mixins.length; _j < _len; _j++) { mixin = mixins[_j]; if (!(mixin.constructor instanceof Function)) { throw Error("Mixin should be a function"); } for (member in mixin.prototype) { if (member.substr(0, 11) === '__initMixin') { classReference.__mixinInitializers.push(mixin.prototype[member]); continue; } else if (member.substr(0, 11) === '__clonerFor') { classReference.__mixinCloners.push(mixin.prototype[member]); continue; } else if (member.substr(0, 12) === '__quitterFor') { classReference.__mixinQuitters.push(mixin.prototype[member]); continue; } if (!Object.getOwnPropertyDescriptor(classProto, member)) { desc = Object.getOwnPropertyDescriptor(mixin.prototype, member); Object.defineProperty(classProto, member, desc); } } } return classReference; };