docs: function ComputedProperty(config, opts) {
      this.isDescriptor = true;
      if (typeof config === 'function') {
        this._getter = config;
      } else {
        _emberMetalDebug.assert('Ember.computed expects a function or an object as last argument.', typeof config === 'object' && !Array.isArray(config));
        _emberMetalDebug.assert('Config object pased to a Ember.computed can only contain `get` or `set` keys.', (function () {
          var keys = Object.keys(config);
          for (var i = 0; i < keys.length; i++) {
            if (keys[i] !== 'get' && keys[i] !== 'set') {
              return false;
            }
          }
          return true;
        })());
        this._getter = config.get;
        this._setter = config.set;
      }
      _emberMetalDebug.assert('Computed properties must receive a getter or a setter, you passed none.', !!this._getter || !!this._setter);
      this._dependentKeys = undefined;
      this._suspended = undefined;
      this._meta = undefined;
      this._volatile = false;
      this._dependentKeys = opts && opts.dependentKeys;
      this._readOnly = false;
    }