corelib/class.rb in opal-0.4.4 vs corelib/class.rb in opal-0.5.0
- old
+ new
@@ -1,13 +1,20 @@
class Class
def self.new(sup = Object, &block)
%x{
+ if (!sup._isClass || sup.__mod__) {
+ #{raise TypeError, "superclass must be a Class"};
+ }
+
function AnonClass(){};
- var klass = Opal.boot(sup, AnonClass)
- klass._name = nil;
- klass._scope = sup._scope;
+ var klass = Opal.boot(sup, AnonClass)
+ klass._name = nil;
+ klass.__parent = sup;
+ // inherit scope from parent
+ $opal.create_scope(sup._scope, klass);
+
sup.$inherited(klass);
if (block !== nil) {
var block_self = block._s;
block._s = null;
@@ -19,11 +26,11 @@
}
end
def allocate
%x{
- var obj = new #{self}._alloc;
+ var obj = new self._alloc;
obj._id = Opal.uid();
return obj;
}
end
@@ -31,17 +38,16 @@
end
def new(*args, &block)
%x{
var obj = #{allocate};
- obj._id = Opal.uid();
obj.$initialize._p = block;
obj.$initialize.apply(obj, args);
return obj;
}
end
def superclass
- `#{self}._super || nil`
+ `self._super || nil`
end
end