| var isFunction = require('./isFunction'), | |
| isMasked = require('./_isMasked'), | |
| isObject = require('./isObject'), | |
| toSource = require('./_toSource'); | |
| /** | |
| * Used to match `RegExp` | |
| * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). | |
| */ | |
| var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; | |
| /** Used to detect host constructors (Safari). */ | |
| var reIsHostCtor = /^\[object .+?Constructor\]$/; | |
| /** Used for built-in method references. */ | |
| var funcProto = Function.prototype, | |
| objectProto = Object.prototype; | |
| /** Used to resolve the decompiled source of functions. */ | |
| var funcToString = funcProto.toString; | |
| /** Used to check objects for own properties. */ | |
| var hasOwnProperty = objectProto.hasOwnProperty; | |
| /** Used to detect if a method is native. */ | |
| var reIsNative = RegExp('^' + | |
| funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') | |
| .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' | |
| ); | |
| /** | |
| * The base implementation of `_.isNative` without bad shim checks. | |
| * | |
| * @private | |
| * @param {*} value The value to check. | |
| * @returns {boolean} Returns `true` if `value` is a native function, | |
| * else `false`. | |
| */ | |
| function baseIsNative(value) { | |
| if (!isObject(value) || isMasked(value)) { | |
| return false; | |
| } | |
| var pattern = isFunction(value) ? reIsNative : reIsHostCtor; | |
| return pattern.test(toSource(value)); | |
| } | |
| module.exports = baseIsNative; |