Sha256: 0e5da31b892d51e2f88ae8a690b93c523e8e931906dd6c5fce5962096ddbd732

Contents?: true

Size: 1022 Bytes

Versions: 2

Compression:

Stored size: 1022 Bytes

Contents

require 'corelib/module'

class Class
  def self.new(sup = Object, &block)
    %x{
      if (!sup.$$is_class) {
        #{raise TypeError, "superclass must be a Class"};
      }

      function AnonClass(){};
      var klass        = Opal.boot(sup, AnonClass)
      klass.$$name     = nil;
      klass.$$parent   = sup;
      klass.$$is_class = true;

      // 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

2 entries across 2 versions & 1 rubygems

Version Path
opal-0.9.0.beta2 opal/corelib/class.rb
opal-0.9.0.beta1 opal/corelib/class.rb