| var global = require('./_global') |
| , hide = require('./_hide') |
| , has = require('./_has') |
| , SRC = require('./_uid')('src') |
| , TO_STRING = 'toString' |
| , $toString = Function[TO_STRING] |
| , TPL = ('' + $toString).split(TO_STRING); |
| |
| require('./_core').inspectSource = function(it){ |
| return $toString.call(it); |
| }; |
| |
| (module.exports = function(O, key, val, safe){ |
| var isFunction = typeof val == 'function'; |
| if(isFunction)has(val, 'name') || hide(val, 'name', key); |
| if(O[key] === val)return; |
| if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); |
| if(O === global){ |
| O[key] = val; |
| } else { |
| if(!safe){ |
| delete O[key]; |
| hide(O, key, val); |
| } else { |
| if(O[key])O[key] = val; |
| else hide(O, key, val); |
| } |
| } |
| // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative |
| })(Function.prototype, TO_STRING, function toString(){ |
| return typeof this == 'function' && this[SRC] || $toString.call(this); |
| }); |