| // Workaround for http://code.google.com/p/v8/issues/detail?id=2804 |
| |
| 'use strict'; |
| |
| var create = Object.create, shim; |
| |
| if (!require('./set-prototype-of/is-implemented')()) { |
| shim = require('./set-prototype-of/shim'); |
| } |
| |
| module.exports = (function () { |
| var nullObject, props, desc; |
| if (!shim) return create; |
| if (shim.level !== 1) return create; |
| |
| nullObject = {}; |
| props = {}; |
| desc = { configurable: false, enumerable: false, writable: true, |
| value: undefined }; |
| Object.getOwnPropertyNames(Object.prototype).forEach(function (name) { |
| if (name === '__proto__') { |
| props[name] = { configurable: true, enumerable: false, writable: true, |
| value: undefined }; |
| return; |
| } |
| props[name] = desc; |
| }); |
| Object.defineProperties(nullObject, props); |
| |
| Object.defineProperty(shim, 'nullPolyfill', { configurable: false, |
| enumerable: false, writable: false, value: nullObject }); |
| |
| return function (prototype, props) { |
| return create((prototype === null) ? nullObject : prototype, props); |
| }; |
| }()); |