docs: function(_instance, _static) {
    // Build the prototype.
    base2.__prototyping = this.prototype;
    var _prototype = new this;
    if (_instance) extend(_prototype, _instance);
    delete base2.__prototyping;
    
    // Create the wrapper for the constructor function.
    var _constructor = _prototype.constructor;
    function _class() {
      // Don't call the constructor function when prototyping.
      if (!base2.__prototyping) {
        if (this.constructor == arguments.callee || this.__constructing) {
          // Instantiation.
          this.__constructing = true;
          _constructor.apply(this, arguments);
          delete this.__constructing;
        } else {
          // Casting.
          return extend(arguments[0], _prototype);
        }
      }
      return this;
    };
    _prototype.constructor = _class;
    
    // Build the static interface.
    for (var i in Base) _class[i] = this[i];
    _class.ancestor = this;
    _class.base = Undefined;
    //_class.init = Undefined;
    if (_static) extend(_class, _static);
    _class.prototype = _prototype;
    if (_class.init) _class.init();
    
    // introspection (removed when packed)
    ;;; _class["#implements"] = [];
    ;;; _class["#implemented_by"] = [];
    
    return _class;
  }