26 lines
		
	
	
		
			906 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
		
			906 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// Works with __proto__ only. Old v8 can't work with null proto objects.
 | 
						|
/* eslint-disable no-proto */
 | 
						|
var isObject = require('./_is-object');
 | 
						|
var anObject = require('./_an-object');
 | 
						|
var check = function (O, proto) {
 | 
						|
  anObject(O);
 | 
						|
  if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
 | 
						|
};
 | 
						|
module.exports = {
 | 
						|
  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
 | 
						|
    function (test, buggy, set) {
 | 
						|
      try {
 | 
						|
        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);
 | 
						|
        set(test, []);
 | 
						|
        buggy = !(test instanceof Array);
 | 
						|
      } catch (e) { buggy = true; }
 | 
						|
      return function setPrototypeOf(O, proto) {
 | 
						|
        check(O, proto);
 | 
						|
        if (buggy) O.__proto__ = proto;
 | 
						|
        else set(O, proto);
 | 
						|
        return O;
 | 
						|
      };
 | 
						|
    }({}, false) : undefined),
 | 
						|
  check: check
 | 
						|
};
 |