function ObjectSetPrototypeOf(obj, proto) {
  CHECK_OBJECT_COERCIBLE(obj, "Object.setPrototypeOf");

  if (proto !== null && !IS_RECEIVER(proto)) {
    throw MakeTypeError(kProtoObjectOrNull, proto);
  }

  if (IS_RECEIVER(obj)) {
    %SetPrototype(obj, proto);
  }

  return obj;
}
function ObjectSetPrototypeOf(obj, proto) {
  CHECK_OBJECT_COERCIBLE(obj, "Object.setPrototypeOf");

  if (proto !== null && !IS_RECEIVER(proto)) {
    throw MakeTypeError(kProtoObjectOrNull, proto);
  }

  if (IS_RECEIVER(obj)) {
    %SetPrototype(obj, proto);
  }

  return obj;
}
function ObjectSetPrototypeOf ( obj , proto ) { CHECK_OBJECT_COERCIBLE ( obj , "Object.setPrototypeOf" ) ; if ( proto !== null && ! IS_RECEIVER ( proto ) ) { throw MakeTypeError ( kProtoObjectOrNull , proto ) ; } if ( IS_RECEIVER ( obj ) ) { % SetPrototype ( obj , proto ) ; } return obj ; }
ES6 section 19.1.2.18.
ES6 section 19 . 1 . 2 . 18 .