Sha256: df4d6c2e7f95d19e51bd40dd8f3bba28c71ba55ec1d88d51fc2278c7a363c94f

Contents?: true

Size: 966 Bytes

Versions: 4

Compression:

Stored size: 966 Bytes

Contents

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.__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;
        block.call(klass);
        block._s = block_self;
      }

      return klass;
    }
  end

  def allocate
    %x{
      var obj = new self._alloc;
      obj._id = Opal.uid();
      return obj;
    }
  end

  def inherited(cls)
  end

  def new(*args, &block)
    %x{
      var obj = #{allocate};

      obj.$initialize._p = block;
      obj.$initialize.apply(obj, args);
      return obj;
    }
  end

  def superclass
    `self._super || nil`
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
opal-0.5.5 opal/corelib/class.rb
opal-0.5.4 opal/core/class.rb
opal-0.5.2 opal/core/class.rb
opal-0.5.0 corelib/class.rb