| 'use strict'; | 
|   | 
| var supportsDescriptors = require('define-properties').supportsDescriptors; | 
| var getPolyfill = require('./polyfill'); | 
| var gOPD = Object.getOwnPropertyDescriptor; | 
| var defineProperty = Object.defineProperty; | 
| var TypeErr = TypeError; | 
| var getProto = Object.getPrototypeOf; | 
| var regex = /a/; | 
|   | 
| module.exports = function shimFlags() { | 
|     if (!supportsDescriptors || !getProto) { | 
|         throw new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors'); | 
|     } | 
|     var polyfill = getPolyfill(); | 
|     var proto = getProto(regex); | 
|     var descriptor = gOPD(proto, 'flags'); | 
|     if (!descriptor || descriptor.get !== polyfill) { | 
|         defineProperty(proto, 'flags', { | 
|             configurable: true, | 
|             enumerable: false, | 
|             get: polyfill | 
|         }); | 
|     } | 
|     return polyfill; | 
| }; |