docs: function isPropertyDescriptor(ES, Desc) {
      if (ES.Type(Desc) !== 'Object') {
        return false;
      }
      var allowed = {
        '[[Configurable]]': true,
        '[[Enumerable]]': true,
        '[[Get]]': true,
        '[[Set]]': true,
        '[[Value]]': true,
        '[[Writable]]': true
      };
  
      for (var key in Desc) { // eslint-disable-line
        if (has(Desc, key) && !allowed[key]) {
          return false;
        }
      }
  
      var isData = has(Desc, '[[Value]]');
      var IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');
      if (isData && IsAccessor) {
        throw new $TypeError('Property Descriptors may not be both accessor and data descriptors');
      }
      return true;
    }