| 'use strict'; | 
| var isCallable = require('../internals/is-callable'); | 
| var isObject = require('../internals/is-object'); | 
| var setPrototypeOf = require('../internals/object-set-prototype-of'); | 
|   | 
| // makes subclassing work correct for wrapped built-ins | 
| module.exports = function ($this, dummy, Wrapper) { | 
|   var NewTarget, NewTargetPrototype; | 
|   if ( | 
|     // it can work only with native `setPrototypeOf` | 
|     setPrototypeOf && | 
|     // we haven't completely correct pre-ES6 way for getting `new.target`, so use this | 
|     isCallable(NewTarget = dummy.constructor) && | 
|     NewTarget !== Wrapper && | 
|     isObject(NewTargetPrototype = NewTarget.prototype) && | 
|     NewTargetPrototype !== Wrapper.prototype | 
|   ) setPrototypeOf($this, NewTargetPrototype); | 
|   return $this; | 
| }; |