core-js 3.18.2 → 3.19.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/es/date/to-primitive.js +2 -3
  2. package/es/date/to-string.js +2 -4
  3. package/es/instance/at.js +6 -5
  4. package/es/instance/bind.js +3 -2
  5. package/es/instance/code-point-at.js +4 -3
  6. package/es/instance/concat.js +3 -2
  7. package/es/instance/copy-within.js +3 -2
  8. package/es/instance/ends-with.js +4 -3
  9. package/es/instance/entries.js +3 -2
  10. package/es/instance/every.js +3 -2
  11. package/es/instance/fill.js +3 -2
  12. package/es/instance/filter.js +3 -2
  13. package/es/instance/find-index.js +3 -2
  14. package/es/instance/find.js +3 -2
  15. package/es/instance/flags.js +2 -1
  16. package/es/instance/flat-map.js +3 -2
  17. package/es/instance/flat.js +3 -2
  18. package/es/instance/for-each.js +3 -2
  19. package/es/instance/includes.js +6 -5
  20. package/es/instance/index-of.js +3 -2
  21. package/es/instance/keys.js +3 -2
  22. package/es/instance/last-index-of.js +3 -2
  23. package/es/instance/map.js +3 -2
  24. package/es/instance/match-all.js +4 -3
  25. package/es/instance/pad-end.js +4 -3
  26. package/es/instance/pad-start.js +4 -3
  27. package/es/instance/reduce-right.js +3 -2
  28. package/es/instance/reduce.js +3 -2
  29. package/es/instance/repeat.js +4 -3
  30. package/es/instance/replace-all.js +4 -3
  31. package/es/instance/reverse.js +3 -2
  32. package/es/instance/slice.js +3 -2
  33. package/es/instance/some.js +3 -2
  34. package/es/instance/sort.js +3 -2
  35. package/es/instance/splice.js +3 -2
  36. package/es/instance/starts-with.js +4 -3
  37. package/es/instance/trim-end.js +4 -3
  38. package/es/instance/trim-left.js +4 -3
  39. package/es/instance/trim-right.js +4 -3
  40. package/es/instance/trim-start.js +4 -3
  41. package/es/instance/trim.js +4 -3
  42. package/es/instance/values.js +3 -2
  43. package/es/json/stringify.js +4 -3
  44. package/es/promise/all-settled.js +2 -1
  45. package/es/promise/any.js +2 -1
  46. package/es/regexp/flags.js +3 -4
  47. package/es/regexp/match.js +2 -1
  48. package/es/regexp/replace.js +2 -1
  49. package/es/regexp/search.js +2 -1
  50. package/es/regexp/split.js +2 -1
  51. package/es/regexp/test.js +2 -3
  52. package/es/regexp/to-string.js +2 -3
  53. package/es/string/iterator.js +2 -5
  54. package/features/instance/at.js +6 -5
  55. package/features/instance/code-points.js +4 -3
  56. package/features/instance/filter-out.js +3 -2
  57. package/features/instance/filter-reject.js +3 -2
  58. package/features/instance/find-last-index.js +3 -2
  59. package/features/instance/find-last.js +3 -2
  60. package/features/instance/group-by.js +3 -2
  61. package/features/instance/unique-by.js +3 -2
  62. package/features/map/from.js +3 -2
  63. package/features/map/group-by.js +2 -1
  64. package/features/map/key-by.js +2 -1
  65. package/features/map/of.js +3 -2
  66. package/features/promise/try.js +2 -1
  67. package/features/set/from.js +3 -2
  68. package/features/set/of.js +3 -2
  69. package/features/weak-map/from.js +3 -2
  70. package/features/weak-map/of.js +3 -2
  71. package/features/weak-set/from.js +3 -2
  72. package/features/weak-set/of.js +3 -2
  73. package/internals/a-callable.js +3 -0
  74. package/internals/a-constructor.js +3 -0
  75. package/internals/a-possible-prototype.js +5 -1
  76. package/internals/an-instance.js +8 -3
  77. package/internals/an-object.js +4 -0
  78. package/internals/array-buffer-native.js +1 -1
  79. package/internals/array-buffer-non-extensible.js +10 -0
  80. package/internals/array-buffer-view-core.js +3 -2
  81. package/internals/array-buffer.js +29 -16
  82. package/internals/array-from-async.js +1 -1
  83. package/internals/array-from.js +6 -2
  84. package/internals/array-group-by.js +6 -3
  85. package/internals/array-iteration-from-last.js +1 -1
  86. package/internals/array-iteration.js +5 -4
  87. package/internals/array-last-index-of.js +2 -1
  88. package/internals/array-reduce.js +3 -0
  89. package/internals/array-slice-simple.js +17 -0
  90. package/internals/array-slice.js +3 -0
  91. package/internals/array-sort.js +10 -11
  92. package/internals/array-species-constructor.js +2 -0
  93. package/internals/array-unique-by.js +13 -9
  94. package/internals/async-from-sync-iterator.js +4 -3
  95. package/internals/async-iterator-create-proxy.js +4 -3
  96. package/internals/async-iterator-iteration.js +5 -2
  97. package/internals/classof-raw.js +5 -2
  98. package/internals/classof.js +3 -0
  99. package/internals/clear-error-stack.js +20 -0
  100. package/internals/collection-add-all.js +3 -2
  101. package/internals/collection-delete-all.js +3 -2
  102. package/internals/collection-from.js +7 -4
  103. package/internals/collection-of.js +3 -4
  104. package/internals/collection-strong.js +11 -9
  105. package/internals/collection-weak.js +10 -6
  106. package/internals/collection.js +8 -7
  107. package/internals/composite-key.js +9 -2
  108. package/internals/create-html.js +3 -1
  109. package/internals/date-to-iso-string.js +23 -13
  110. package/internals/date-to-primitive.js +3 -0
  111. package/internals/define-iterator.js +2 -1
  112. package/internals/engine-v8-version.js +10 -4
  113. package/internals/entry-unbind.js +3 -5
  114. package/internals/error-stack-installable.js +10 -0
  115. package/internals/export.js +1 -1
  116. package/internals/fix-regexp-well-known-symbol-logic.js +5 -3
  117. package/internals/flatten-into-array.js +4 -1
  118. package/internals/function-apply.js +9 -0
  119. package/internals/function-bind-context.js +5 -17
  120. package/internals/function-bind.js +15 -9
  121. package/internals/function-call.js +5 -0
  122. package/internals/function-uncurry-this.js +12 -0
  123. package/internals/get-async-iterator.js +2 -1
  124. package/internals/get-iterator.js +7 -2
  125. package/internals/get-map-iterator.js +3 -1
  126. package/internals/get-set-iterator.js +3 -1
  127. package/internals/get-substitution.js +10 -7
  128. package/internals/has-own-property.js +3 -2
  129. package/internals/host-report-errors.js +1 -1
  130. package/internals/ieee754.js +24 -6
  131. package/internals/indexed-object.js +5 -2
  132. package/internals/inspect-source.js +3 -2
  133. package/internals/install-error-cause.js +1 -1
  134. package/internals/internal-metadata.js +4 -7
  135. package/internals/internal-state.js +9 -7
  136. package/internals/is-callable.js +1 -1
  137. package/internals/is-constructor.js +6 -4
  138. package/internals/is-iterable.js +4 -2
  139. package/internals/is-object.js +1 -1
  140. package/internals/is-symbol.js +6 -2
  141. package/internals/iterate.js +14 -6
  142. package/internals/iterator-close.js +2 -1
  143. package/internals/iterator-create-proxy.js +4 -3
  144. package/internals/map-emplace.js +8 -3
  145. package/internals/map-upsert.js +12 -4
  146. package/internals/math-scale.js +9 -12
  147. package/internals/microtask.js +6 -4
  148. package/internals/normalize-string-argument.js +5 -0
  149. package/internals/not-a-regexp.js +3 -0
  150. package/internals/number-parse-float.js +8 -6
  151. package/internals/number-parse-int.js +4 -2
  152. package/internals/numeric-range-iterator.js +4 -0
  153. package/internals/object-assign.js +5 -2
  154. package/internals/object-define-properties.js +3 -1
  155. package/internals/object-define-property.js +2 -0
  156. package/internals/object-get-own-property-descriptor.js +2 -1
  157. package/internals/object-get-own-property-names-external.js +4 -4
  158. package/internals/object-get-prototype-of.js +2 -1
  159. package/internals/object-is-extensible.js +16 -0
  160. package/internals/object-is-prototype-of.js +3 -0
  161. package/internals/object-keys-internal.js +5 -2
  162. package/internals/object-set-prototype-of.js +4 -3
  163. package/internals/object-to-array.js +7 -3
  164. package/internals/ordinary-to-primitive.js +7 -3
  165. package/internals/own-keys.js +4 -1
  166. package/internals/reflect-metadata.js +9 -3
  167. package/internals/regexp-exec-abstract.js +6 -2
  168. package/internals/regexp-exec.js +20 -16
  169. package/internals/regexp-sticky-helpers.js +14 -2
  170. package/internals/require-object-coercible.js +4 -0
  171. package/internals/set-global.js +4 -2
  172. package/internals/shared.js +1 -1
  173. package/internals/string-multibyte.js +13 -4
  174. package/internals/string-pad.js +6 -3
  175. package/internals/string-punycode-to-ascii.js +34 -20
  176. package/internals/string-repeat.js +3 -0
  177. package/internals/string-trim.js +4 -2
  178. package/internals/task.js +11 -11
  179. package/internals/this-number-value.js +2 -4
  180. package/internals/to-index.js +3 -0
  181. package/internals/to-object.js +3 -0
  182. package/internals/to-offset.js +3 -0
  183. package/internals/to-positive-integer.js +3 -0
  184. package/internals/to-primitive.js +4 -1
  185. package/internals/to-property-key.js +1 -1
  186. package/internals/to-string.js +3 -0
  187. package/internals/try-to-string.js +4 -0
  188. package/internals/typed-array-constructor.js +10 -6
  189. package/internals/typed-array-from.js +4 -3
  190. package/internals/uid.js +4 -1
  191. package/internals/well-known-symbol.js +5 -1
  192. package/modules/es.aggregate-error.js +27 -11
  193. package/modules/es.array-buffer.slice.js +8 -4
  194. package/modules/es.array.concat.js +2 -0
  195. package/modules/es.array.index-of.js +7 -5
  196. package/modules/es.array.join.js +3 -2
  197. package/modules/es.array.of.js +3 -1
  198. package/modules/es.array.reduce.js +2 -1
  199. package/modules/es.array.reverse.js +3 -2
  200. package/modules/es.array.slice.js +4 -2
  201. package/modules/es.array.sort.js +7 -4
  202. package/modules/es.array.splice.js +2 -0
  203. package/modules/es.date.get-year.js +3 -2
  204. package/modules/es.date.now.js +6 -1
  205. package/modules/es.date.set-year.js +6 -4
  206. package/modules/es.date.to-primitive.js +2 -1
  207. package/modules/es.date.to-string.js +5 -4
  208. package/modules/es.escape.js +12 -5
  209. package/modules/es.function.has-instance.js +3 -2
  210. package/modules/es.function.name.js +5 -3
  211. package/modules/es.json.stringify.js +18 -7
  212. package/modules/es.map.js +1 -1
  213. package/modules/es.number.constructor.js +12 -7
  214. package/modules/es.number.to-fixed.js +19 -13
  215. package/modules/es.number.to-precision.js +6 -5
  216. package/modules/es.object.is-extensible.js +4 -10
  217. package/modules/es.object.is-frozen.js +6 -2
  218. package/modules/es.object.is-sealed.js +6 -2
  219. package/modules/es.promise.all-settled.js +2 -2
  220. package/modules/es.promise.any.js +5 -4
  221. package/modules/es.promise.js +22 -18
  222. package/modules/es.reflect.apply.js +4 -10
  223. package/modules/es.reflect.construct.js +10 -5
  224. package/modules/es.reflect.get.js +2 -1
  225. package/modules/es.reflect.is-extensible.js +2 -4
  226. package/modules/es.reflect.set.js +2 -1
  227. package/modules/es.regexp.constructor.js +26 -16
  228. package/modules/es.regexp.dot-all.js +5 -1
  229. package/modules/es.regexp.flags.js +4 -2
  230. package/modules/es.regexp.sticky.js +7 -3
  231. package/modules/es.regexp.test.js +7 -3
  232. package/modules/es.regexp.to-string.js +8 -5
  233. package/modules/es.set.js +1 -1
  234. package/modules/es.string.at-alternative.js +4 -1
  235. package/modules/es.string.ends-with.js +6 -4
  236. package/modules/es.string.from-code-point.js +7 -4
  237. package/modules/es.string.includes.js +8 -2
  238. package/modules/es.string.match-all.js +25 -19
  239. package/modules/es.string.match.js +2 -1
  240. package/modules/es.string.raw.js +6 -6
  241. package/modules/es.string.replace-all.js +19 -13
  242. package/modules/es.string.replace.js +19 -12
  243. package/modules/es.string.search.js +2 -1
  244. package/modules/es.string.split.js +23 -16
  245. package/modules/es.string.starts-with.js +6 -4
  246. package/modules/es.string.substr.js +3 -2
  247. package/modules/es.symbol.description.js +20 -12
  248. package/modules/es.symbol.js +34 -21
  249. package/modules/es.typed-array.copy-within.js +4 -2
  250. package/modules/es.typed-array.fill.js +9 -2
  251. package/modules/es.typed-array.iterator.js +7 -6
  252. package/modules/es.typed-array.join.js +3 -3
  253. package/modules/es.typed-array.last-index-of.js +3 -2
  254. package/modules/es.typed-array.reduce-right.js +2 -1
  255. package/modules/es.typed-array.reduce.js +2 -1
  256. package/modules/es.typed-array.set.js +2 -0
  257. package/modules/es.typed-array.slice.js +2 -2
  258. package/modules/es.typed-array.sort.js +13 -28
  259. package/modules/es.typed-array.to-locale-string.js +7 -2
  260. package/modules/es.typed-array.to-string.js +3 -2
  261. package/modules/es.unescape.js +14 -9
  262. package/modules/es.weak-map.js +15 -15
  263. package/modules/esnext.array.is-template-object.js +1 -1
  264. package/modules/esnext.async-iterator.as-indexed-pairs.js +2 -1
  265. package/modules/esnext.async-iterator.constructor.js +1 -1
  266. package/modules/esnext.async-iterator.drop.js +2 -1
  267. package/modules/esnext.async-iterator.filter.js +2 -1
  268. package/modules/esnext.async-iterator.flat-map.js +3 -2
  269. package/modules/esnext.async-iterator.from.js +4 -4
  270. package/modules/esnext.async-iterator.map.js +2 -1
  271. package/modules/esnext.async-iterator.reduce.js +4 -1
  272. package/modules/esnext.async-iterator.take.js +4 -2
  273. package/modules/esnext.composite-key.js +5 -1
  274. package/modules/esnext.composite-symbol.js +3 -2
  275. package/modules/esnext.iterator.as-indexed-pairs.js +2 -1
  276. package/modules/esnext.iterator.constructor.js +1 -1
  277. package/modules/esnext.iterator.drop.js +4 -2
  278. package/modules/esnext.iterator.filter.js +2 -1
  279. package/modules/esnext.iterator.flat-map.js +7 -3
  280. package/modules/esnext.iterator.from.js +4 -4
  281. package/modules/esnext.iterator.map.js +2 -1
  282. package/modules/esnext.iterator.reduce.js +3 -0
  283. package/modules/esnext.iterator.take.js +2 -1
  284. package/modules/esnext.map.delete-all.js +2 -4
  285. package/modules/esnext.map.emplace.js +2 -2
  286. package/modules/esnext.map.every.js +1 -1
  287. package/modules/esnext.map.filter.js +5 -4
  288. package/modules/esnext.map.find-key.js +1 -1
  289. package/modules/esnext.map.find.js +1 -1
  290. package/modules/esnext.map.group-by.js +6 -2
  291. package/modules/esnext.map.includes.js +1 -1
  292. package/modules/esnext.map.key-by.js +2 -1
  293. package/modules/esnext.map.map-keys.js +5 -4
  294. package/modules/esnext.map.map-values.js +5 -4
  295. package/modules/esnext.map.reduce.js +3 -0
  296. package/modules/esnext.map.some.js +1 -1
  297. package/modules/esnext.map.update-or-insert.js +2 -2
  298. package/modules/esnext.map.update.js +11 -4
  299. package/modules/esnext.map.upsert.js +2 -2
  300. package/modules/esnext.math.seeded-prng.js +3 -1
  301. package/modules/esnext.number.from-string.js +12 -3
  302. package/modules/esnext.observable.js +14 -9
  303. package/modules/esnext.reflect.get-metadata-keys.js +5 -10
  304. package/modules/esnext.set.add-all.js +2 -4
  305. package/modules/esnext.set.delete-all.js +2 -4
  306. package/modules/esnext.set.difference.js +3 -2
  307. package/modules/esnext.set.every.js +1 -1
  308. package/modules/esnext.set.filter.js +4 -3
  309. package/modules/esnext.set.find.js +1 -1
  310. package/modules/esnext.set.intersection.js +3 -2
  311. package/modules/esnext.set.is-disjoint-from.js +3 -2
  312. package/modules/esnext.set.is-subset-of.js +3 -2
  313. package/modules/esnext.set.is-superset-of.js +3 -2
  314. package/modules/esnext.set.join.js +9 -4
  315. package/modules/esnext.set.map.js +5 -4
  316. package/modules/esnext.set.reduce.js +3 -0
  317. package/modules/esnext.set.some.js +1 -1
  318. package/modules/esnext.set.symmetric-difference.js +3 -2
  319. package/modules/esnext.typed-array.from-async.js +0 -1
  320. package/modules/esnext.typed-array.unique-by.js +4 -2
  321. package/modules/esnext.weak-map.delete-all.js +2 -4
  322. package/modules/esnext.weak-map.emplace.js +2 -2
  323. package/modules/esnext.weak-map.upsert.js +2 -2
  324. package/modules/esnext.weak-set.add-all.js +2 -4
  325. package/modules/esnext.weak-set.delete-all.js +2 -4
  326. package/modules/web.timers.js +5 -4
  327. package/modules/web.url-search-params.js +122 -104
  328. package/modules/web.url.js +664 -628
  329. package/modules/web.url.to-json.js +2 -1
  330. package/package.json +2 -2
  331. package/stable/instance/entries.js +6 -4
  332. package/stable/instance/for-each.js +6 -4
  333. package/stable/instance/keys.js +6 -4
  334. package/stable/instance/values.js +6 -4
@@ -1,15 +1,21 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
+ var uncurryThis = require('../internals/function-uncurry-this');
3
4
  var notARegExp = require('../internals/not-a-regexp');
4
5
  var requireObjectCoercible = require('../internals/require-object-coercible');
5
6
  var toString = require('../internals/to-string');
6
7
  var correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');
7
8
 
9
+ var stringIndexOf = uncurryThis(''.indexOf);
10
+
8
11
  // `String.prototype.includes` method
9
12
  // https://tc39.es/ecma262/#sec-string.prototype.includes
10
13
  $({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {
11
14
  includes: function includes(searchString /* , position = 0 */) {
12
- return !!~toString(requireObjectCoercible(this))
13
- .indexOf(toString(notARegExp(searchString)), arguments.length > 1 ? arguments[1] : undefined);
15
+ return !!~stringIndexOf(
16
+ toString(requireObjectCoercible(this)),
17
+ toString(notARegExp(searchString)),
18
+ arguments.length > 1 ? arguments[1] : undefined
19
+ );
14
20
  }
15
21
  });
@@ -1,14 +1,18 @@
1
1
  'use strict';
2
2
  /* eslint-disable es/no-string-prototype-matchall -- safe */
3
3
  var $ = require('../internals/export');
4
+ var global = require('../internals/global');
5
+ var call = require('../internals/function-call');
6
+ var uncurryThis = require('../internals/function-uncurry-this');
4
7
  var createIteratorConstructor = require('../internals/create-iterator-constructor');
5
8
  var requireObjectCoercible = require('../internals/require-object-coercible');
6
9
  var toLength = require('../internals/to-length');
7
10
  var toString = require('../internals/to-string');
8
11
  var anObject = require('../internals/an-object');
9
12
  var classof = require('../internals/classof-raw');
13
+ var isPrototypeOf = require('../internals/object-is-prototype-of');
10
14
  var isRegExp = require('../internals/is-regexp');
11
- var getRegExpFlags = require('../internals/regexp-flags');
15
+ var regExpFlags = require('../internals/regexp-flags');
12
16
  var getMethod = require('../internals/get-method');
13
17
  var redefine = require('../internals/redefine');
14
18
  var fails = require('../internals/fails');
@@ -25,19 +29,21 @@ var REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator';
25
29
  var setInternalState = InternalStateModule.set;
26
30
  var getInternalState = InternalStateModule.getterFor(REGEXP_STRING_ITERATOR);
27
31
  var RegExpPrototype = RegExp.prototype;
28
- var nativeMatchAll = ''.matchAll;
32
+ var TypeError = global.TypeError;
33
+ var getFlags = uncurryThis(regExpFlags);
34
+ var stringIndexOf = uncurryThis(''.indexOf);
35
+ var un$MatchAll = uncurryThis(''.matchAll);
29
36
 
30
- var WORKS_WITH_NON_GLOBAL_REGEX = !!nativeMatchAll && !fails(function () {
31
- 'a'.matchAll(/./);
37
+ var WORKS_WITH_NON_GLOBAL_REGEX = !!un$MatchAll && !fails(function () {
38
+ un$MatchAll('a', /./);
32
39
  });
33
40
 
34
- // eslint-disable-next-line max-len -- ignore
35
- var $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, global, fullUnicode) {
41
+ var $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, $global, fullUnicode) {
36
42
  setInternalState(this, {
37
43
  type: REGEXP_STRING_ITERATOR,
38
44
  regexp: regexp,
39
45
  string: string,
40
- global: global,
46
+ global: $global,
41
47
  unicode: fullUnicode,
42
48
  done: false
43
49
  });
@@ -59,18 +65,18 @@ var $RegExpStringIterator = createIteratorConstructor(function RegExpStringItera
59
65
  var $matchAll = function (string) {
60
66
  var R = anObject(this);
61
67
  var S = toString(string);
62
- var C, flagsValue, flags, matcher, global, fullUnicode;
68
+ var C, flagsValue, flags, matcher, $global, fullUnicode;
63
69
  C = speciesConstructor(R, RegExp);
64
70
  flagsValue = R.flags;
65
- if (flagsValue === undefined && R instanceof RegExp && !('flags' in RegExpPrototype)) {
66
- flagsValue = getRegExpFlags.call(R);
71
+ if (flagsValue === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype)) {
72
+ flagsValue = getFlags(R);
67
73
  }
68
74
  flags = flagsValue === undefined ? '' : toString(flagsValue);
69
75
  matcher = new C(C === RegExp ? R.source : R, flags);
70
- global = !!~flags.indexOf('g');
71
- fullUnicode = !!~flags.indexOf('u');
76
+ $global = !!~stringIndexOf(flags, 'g');
77
+ fullUnicode = !!~stringIndexOf(flags, 'u');
72
78
  matcher.lastIndex = toLength(R.lastIndex);
73
- return new $RegExpStringIterator(matcher, S, global, fullUnicode);
79
+ return new $RegExpStringIterator(matcher, S, $global, fullUnicode);
74
80
  };
75
81
 
76
82
  // `String.prototype.matchAll` method
@@ -83,18 +89,18 @@ $({ target: 'String', proto: true, forced: WORKS_WITH_NON_GLOBAL_REGEX }, {
83
89
  if (isRegExp(regexp)) {
84
90
  flags = toString(requireObjectCoercible('flags' in RegExpPrototype
85
91
  ? regexp.flags
86
- : getRegExpFlags.call(regexp)
92
+ : getFlags(regexp)
87
93
  ));
88
- if (!~flags.indexOf('g')) throw TypeError('`.matchAll` does not allow non-global regexes');
94
+ if (!~stringIndexOf(flags, 'g')) throw TypeError('`.matchAll` does not allow non-global regexes');
89
95
  }
90
- if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll.apply(O, arguments);
96
+ if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);
91
97
  matcher = getMethod(regexp, MATCH_ALL);
92
98
  if (matcher === undefined && IS_PURE && classof(regexp) == 'RegExp') matcher = $matchAll;
93
- if (matcher) return matcher.call(regexp, O);
94
- } else if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll.apply(O, arguments);
99
+ if (matcher) return call(matcher, regexp, O);
100
+ } else if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);
95
101
  S = toString(O);
96
102
  rx = new RegExp(regexp, 'g');
97
- return IS_PURE ? $matchAll.call(rx, S) : rx[MATCH_ALL](S);
103
+ return IS_PURE ? call($matchAll, rx, S) : rx[MATCH_ALL](S);
98
104
  }
99
105
  });
100
106
 
@@ -1,4 +1,5 @@
1
1
  'use strict';
2
+ var call = require('../internals/function-call');
2
3
  var fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');
3
4
  var anObject = require('../internals/an-object');
4
5
  var toLength = require('../internals/to-length');
@@ -16,7 +17,7 @@ fixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNa
16
17
  function match(regexp) {
17
18
  var O = requireObjectCoercible(this);
18
19
  var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH);
19
- return matcher ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](toString(O));
20
+ return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));
20
21
  },
21
22
  // `RegExp.prototype[@@match]` method
22
23
  // https://tc39.es/ecma262/#sec-regexp.prototype-@@match
@@ -1,12 +1,12 @@
1
1
  var $ = require('../internals/export');
2
+ var uncurryThis = require('../internals/function-uncurry-this');
2
3
  var toIndexedObject = require('../internals/to-indexed-object');
3
4
  var toObject = require('../internals/to-object');
4
5
  var toString = require('../internals/to-string');
5
6
  var lengthOfArrayLike = require('../internals/length-of-array-like');
6
7
 
7
- var ArrayPrototype = Array.prototype;
8
- var push = ArrayPrototype.push;
9
- var join = ArrayPrototype.join;
8
+ var push = uncurryThis([].push);
9
+ var join = uncurryThis([].join);
10
10
 
11
11
  // `String.raw` method
12
12
  // https://tc39.es/ecma262/#sec-string.raw
@@ -18,9 +18,9 @@ $({ target: 'String', stat: true }, {
18
18
  var elements = [];
19
19
  var i = 0;
20
20
  while (literalSegments > i) {
21
- push.call(elements, toString(rawTemplate[i++]));
22
- if (i === literalSegments) return join.call(elements, '');
23
- if (i < argumentsLength) push.call(elements, toString(arguments[i]));
21
+ push(elements, toString(rawTemplate[i++]));
22
+ if (i === literalSegments) return join(elements, '');
23
+ if (i < argumentsLength) push(elements, toString(arguments[i]));
24
24
  }
25
25
  }
26
26
  });
@@ -1,23 +1,31 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
+ var global = require('../internals/global');
4
+ var call = require('../internals/function-call');
5
+ var uncurryThis = require('../internals/function-uncurry-this');
3
6
  var requireObjectCoercible = require('../internals/require-object-coercible');
4
7
  var isCallable = require('../internals/is-callable');
5
8
  var isRegExp = require('../internals/is-regexp');
6
9
  var toString = require('../internals/to-string');
7
10
  var getMethod = require('../internals/get-method');
8
- var getRegExpFlags = require('../internals/regexp-flags');
11
+ var regExpFlags = require('../internals/regexp-flags');
9
12
  var getSubstitution = require('../internals/get-substitution');
10
13
  var wellKnownSymbol = require('../internals/well-known-symbol');
11
14
  var IS_PURE = require('../internals/is-pure');
12
15
 
13
16
  var REPLACE = wellKnownSymbol('replace');
14
17
  var RegExpPrototype = RegExp.prototype;
18
+ var TypeError = global.TypeError;
19
+ var getFlags = uncurryThis(regExpFlags);
20
+ var indexOf = uncurryThis(''.indexOf);
21
+ var replace = uncurryThis(''.replace);
22
+ var stringSlice = uncurryThis(''.slice);
15
23
  var max = Math.max;
16
24
 
17
25
  var stringIndexOf = function (string, searchValue, fromIndex) {
18
26
  if (fromIndex > string.length) return -1;
19
27
  if (searchValue === '') return fromIndex;
20
- return string.indexOf(searchValue, fromIndex);
28
+ return indexOf(string, searchValue, fromIndex);
21
29
  };
22
30
 
23
31
  // `String.prototype.replaceAll` method
@@ -34,15 +42,15 @@ $({ target: 'String', proto: true }, {
34
42
  if (IS_REG_EXP) {
35
43
  flags = toString(requireObjectCoercible('flags' in RegExpPrototype
36
44
  ? searchValue.flags
37
- : getRegExpFlags.call(searchValue)
45
+ : getFlags(searchValue)
38
46
  ));
39
- if (!~flags.indexOf('g')) throw TypeError('`.replaceAll` does not allow non-global regexes');
47
+ if (!~indexOf(flags, 'g')) throw TypeError('`.replaceAll` does not allow non-global regexes');
40
48
  }
41
49
  replacer = getMethod(searchValue, REPLACE);
42
50
  if (replacer) {
43
- return replacer.call(searchValue, O, replaceValue);
51
+ return call(replacer, searchValue, O, replaceValue);
44
52
  } else if (IS_PURE && IS_REG_EXP) {
45
- return toString(O).replace(searchValue, replaceValue);
53
+ return replace(toString(O), searchValue, replaceValue);
46
54
  }
47
55
  }
48
56
  string = toString(O);
@@ -53,17 +61,15 @@ $({ target: 'String', proto: true }, {
53
61
  advanceBy = max(1, searchLength);
54
62
  position = stringIndexOf(string, searchString, 0);
55
63
  while (position !== -1) {
56
- if (functionalReplace) {
57
- replacement = toString(replaceValue(searchString, position, string));
58
- } else {
59
- replacement = getSubstitution(searchString, string, position, [], undefined, replaceValue);
60
- }
61
- result += string.slice(endOfLastMatch, position) + replacement;
64
+ replacement = functionalReplace
65
+ ? toString(replaceValue(searchString, position, string))
66
+ : getSubstitution(searchString, string, position, [], undefined, replaceValue);
67
+ result += stringSlice(string, endOfLastMatch, position) + replacement;
62
68
  endOfLastMatch = position + searchLength;
63
69
  position = stringIndexOf(string, searchString, position + advanceBy);
64
70
  }
65
71
  if (endOfLastMatch < string.length) {
66
- result += string.slice(endOfLastMatch);
72
+ result += stringSlice(string, endOfLastMatch);
67
73
  }
68
74
  return result;
69
75
  }
@@ -1,4 +1,7 @@
1
1
  'use strict';
2
+ var apply = require('../internals/function-apply');
3
+ var call = require('../internals/function-call');
4
+ var uncurryThis = require('../internals/function-uncurry-this');
2
5
  var fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');
3
6
  var fails = require('../internals/fails');
4
7
  var anObject = require('../internals/an-object');
@@ -16,6 +19,10 @@ var wellKnownSymbol = require('../internals/well-known-symbol');
16
19
  var REPLACE = wellKnownSymbol('replace');
17
20
  var max = Math.max;
18
21
  var min = Math.min;
22
+ var concat = uncurryThis([].concat);
23
+ var push = uncurryThis([].push);
24
+ var stringIndexOf = uncurryThis(''.indexOf);
25
+ var stringSlice = uncurryThis(''.slice);
19
26
 
20
27
  var maybeToString = function (it) {
21
28
  return it === undefined ? it : String(it);
@@ -58,8 +65,8 @@ fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNa
58
65
  var O = requireObjectCoercible(this);
59
66
  var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);
60
67
  return replacer
61
- ? replacer.call(searchValue, O, replaceValue)
62
- : nativeReplace.call(toString(O), searchValue, replaceValue);
68
+ ? call(replacer, searchValue, O, replaceValue)
69
+ : call(nativeReplace, toString(O), searchValue, replaceValue);
63
70
  },
64
71
  // `RegExp.prototype[@@replace]` method
65
72
  // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace
@@ -68,9 +75,9 @@ fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNa
68
75
  var S = toString(string);
69
76
 
70
77
  if (
71
- typeof replaceValue === 'string' &&
72
- replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1 &&
73
- replaceValue.indexOf('$<') === -1
78
+ typeof replaceValue == 'string' &&
79
+ stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&
80
+ stringIndexOf(replaceValue, '$<') === -1
74
81
  ) {
75
82
  var res = maybeCallNative(nativeReplace, rx, S, replaceValue);
76
83
  if (res.done) return res.value;
@@ -89,7 +96,7 @@ fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNa
89
96
  var result = regExpExec(rx, S);
90
97
  if (result === null) break;
91
98
 
92
- results.push(result);
99
+ push(results, result);
93
100
  if (!global) break;
94
101
 
95
102
  var matchStr = toString(result[0]);
@@ -109,21 +116,21 @@ fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNa
109
116
  // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
110
117
  // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
111
118
  // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
112
- for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));
119
+ for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));
113
120
  var namedCaptures = result.groups;
114
121
  if (functionalReplace) {
115
- var replacerArgs = [matched].concat(captures, position, S);
116
- if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);
117
- var replacement = toString(replaceValue.apply(undefined, replacerArgs));
122
+ var replacerArgs = concat([matched], captures, position, S);
123
+ if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);
124
+ var replacement = toString(apply(replaceValue, undefined, replacerArgs));
118
125
  } else {
119
126
  replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
120
127
  }
121
128
  if (position >= nextSourcePosition) {
122
- accumulatedResult += S.slice(nextSourcePosition, position) + replacement;
129
+ accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;
123
130
  nextSourcePosition = position + matched.length;
124
131
  }
125
132
  }
126
- return accumulatedResult + S.slice(nextSourcePosition);
133
+ return accumulatedResult + stringSlice(S, nextSourcePosition);
127
134
  }
128
135
  ];
129
136
  }, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);
@@ -1,4 +1,5 @@
1
1
  'use strict';
2
+ var call = require('../internals/function-call');
2
3
  var fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');
3
4
  var anObject = require('../internals/an-object');
4
5
  var requireObjectCoercible = require('../internals/require-object-coercible');
@@ -15,7 +16,7 @@ fixRegExpWellKnownSymbolLogic('search', function (SEARCH, nativeSearch, maybeCal
15
16
  function search(regexp) {
16
17
  var O = requireObjectCoercible(this);
17
18
  var searcher = regexp == undefined ? undefined : getMethod(regexp, SEARCH);
18
- return searcher ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](toString(O));
19
+ return searcher ? call(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString(O));
19
20
  },
20
21
  // `RegExp.prototype[@@search]` method
21
22
  // https://tc39.es/ecma262/#sec-regexp.prototype-@@search
@@ -1,4 +1,7 @@
1
1
  'use strict';
2
+ var apply = require('../internals/function-apply');
3
+ var call = require('../internals/function-call');
4
+ var uncurryThis = require('../internals/function-uncurry-this');
2
5
  var fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');
3
6
  var isRegExp = require('../internals/is-regexp');
4
7
  var anObject = require('../internals/an-object');
@@ -8,15 +11,19 @@ var advanceStringIndex = require('../internals/advance-string-index');
8
11
  var toLength = require('../internals/to-length');
9
12
  var toString = require('../internals/to-string');
10
13
  var getMethod = require('../internals/get-method');
14
+ var arraySlice = require('../internals/array-slice-simple');
11
15
  var callRegExpExec = require('../internals/regexp-exec-abstract');
12
16
  var regexpExec = require('../internals/regexp-exec');
13
17
  var stickyHelpers = require('../internals/regexp-sticky-helpers');
14
18
  var fails = require('../internals/fails');
15
19
 
16
20
  var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;
17
- var arrayPush = [].push;
18
- var min = Math.min;
19
21
  var MAX_UINT32 = 0xFFFFFFFF;
22
+ var min = Math.min;
23
+ var $push = [].push;
24
+ var exec = uncurryThis(/./.exec);
25
+ var push = uncurryThis($push);
26
+ var stringSlice = uncurryThis(''.slice);
20
27
 
21
28
  // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
22
29
  // Weex JS has frozen built-in prototypes, so use try / catch wrapper
@@ -50,7 +57,7 @@ fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNa
50
57
  if (separator === undefined) return [string];
51
58
  // If `separator` is not a regex, use native split
52
59
  if (!isRegExp(separator)) {
53
- return nativeSplit.call(string, separator, lim);
60
+ return call(nativeSplit, string, separator, lim);
54
61
  }
55
62
  var output = [];
56
63
  var flags = (separator.ignoreCase ? 'i' : '') +
@@ -61,11 +68,11 @@ fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNa
61
68
  // Make `global` and avoid `lastIndex` issues by working with a copy
62
69
  var separatorCopy = new RegExp(separator.source, flags + 'g');
63
70
  var match, lastIndex, lastLength;
64
- while (match = regexpExec.call(separatorCopy, string)) {
71
+ while (match = call(regexpExec, separatorCopy, string)) {
65
72
  lastIndex = separatorCopy.lastIndex;
66
73
  if (lastIndex > lastLastIndex) {
67
- output.push(string.slice(lastLastIndex, match.index));
68
- if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));
74
+ push(output, stringSlice(string, lastLastIndex, match.index));
75
+ if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));
69
76
  lastLength = match[0].length;
70
77
  lastLastIndex = lastIndex;
71
78
  if (output.length >= lim) break;
@@ -73,14 +80,14 @@ fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNa
73
80
  if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop
74
81
  }
75
82
  if (lastLastIndex === string.length) {
76
- if (lastLength || !separatorCopy.test('')) output.push('');
77
- } else output.push(string.slice(lastLastIndex));
78
- return output.length > lim ? output.slice(0, lim) : output;
83
+ if (lastLength || !exec(separatorCopy, '')) push(output, '');
84
+ } else push(output, stringSlice(string, lastLastIndex));
85
+ return output.length > lim ? arraySlice(output, 0, lim) : output;
79
86
  };
80
87
  // Chakra, V8
81
88
  } else if ('0'.split(undefined, 0).length) {
82
89
  internalSplit = function (separator, limit) {
83
- return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);
90
+ return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);
84
91
  };
85
92
  } else internalSplit = nativeSplit;
86
93
 
@@ -91,8 +98,8 @@ fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNa
91
98
  var O = requireObjectCoercible(this);
92
99
  var splitter = separator == undefined ? undefined : getMethod(separator, SPLIT);
93
100
  return splitter
94
- ? splitter.call(separator, O, limit)
95
- : internalSplit.call(toString(O), separator, limit);
101
+ ? call(splitter, separator, O, limit)
102
+ : call(internalSplit, toString(O), separator, limit);
96
103
  },
97
104
  // `RegExp.prototype[@@split]` method
98
105
  // https://tc39.es/ecma262/#sec-regexp.prototype-@@split
@@ -125,7 +132,7 @@ fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNa
125
132
  var A = [];
126
133
  while (q < S.length) {
127
134
  splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;
128
- var z = callRegExpExec(splitter, UNSUPPORTED_Y ? S.slice(q) : S);
135
+ var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);
129
136
  var e;
130
137
  if (
131
138
  z === null ||
@@ -133,16 +140,16 @@ fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNa
133
140
  ) {
134
141
  q = advanceStringIndex(S, q, unicodeMatching);
135
142
  } else {
136
- A.push(S.slice(p, q));
143
+ push(A, stringSlice(S, p, q));
137
144
  if (A.length === lim) return A;
138
145
  for (var i = 1; i <= z.length - 1; i++) {
139
- A.push(z[i]);
146
+ push(A, z[i]);
140
147
  if (A.length === lim) return A;
141
148
  }
142
149
  q = p = e;
143
150
  }
144
151
  }
145
- A.push(S.slice(p));
152
+ push(A, stringSlice(S, p));
146
153
  return A;
147
154
  }
148
155
  ];
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
+ var uncurryThis = require('../internals/function-uncurry-this');
3
4
  var getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;
4
5
  var toLength = require('../internals/to-length');
5
6
  var toString = require('../internals/to-string');
@@ -9,7 +10,8 @@ var correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');
9
10
  var IS_PURE = require('../internals/is-pure');
10
11
 
11
12
  // eslint-disable-next-line es/no-string-prototype-startswith -- safe
12
- var $startsWith = ''.startsWith;
13
+ var un$StartsWith = uncurryThis(''.startsWith);
14
+ var stringSlice = uncurryThis(''.slice);
13
15
  var min = Math.min;
14
16
 
15
17
  var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');
@@ -27,8 +29,8 @@ $({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGE
27
29
  notARegExp(searchString);
28
30
  var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));
29
31
  var search = toString(searchString);
30
- return $startsWith
31
- ? $startsWith.call(that, search, index)
32
- : that.slice(index, index + search.length) === search;
32
+ return un$StartsWith
33
+ ? un$StartsWith(that, search, index)
34
+ : stringSlice(that, index, index + search.length) === search;
33
35
  }
34
36
  });
@@ -1,10 +1,11 @@
1
1
  'use strict';
2
2
  var $ = require('../internals/export');
3
+ var uncurryThis = require('../internals/function-uncurry-this');
3
4
  var requireObjectCoercible = require('../internals/require-object-coercible');
4
5
  var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');
5
6
  var toString = require('../internals/to-string');
6
7
 
7
- var slice = ''.slice;
8
+ var stringSlice = uncurryThis(''.slice);
8
9
  var max = Math.max;
9
10
  var min = Math.min;
10
11
 
@@ -24,6 +25,6 @@ $({ target: 'String', proto: true, forced: FORCED }, {
24
25
  intLength = length === undefined ? size : toIntegerOrInfinity(length);
25
26
  if (intLength <= 0 || intLength === Infinity) return '';
26
27
  intEnd = min(intStart + intLength, size);
27
- return intStart >= intEnd ? '' : slice.call(that, intStart, intEnd);
28
+ return intStart >= intEnd ? '' : stringSlice(that, intStart, intEnd);
28
29
  }
29
30
  });
@@ -4,43 +4,51 @@
4
4
  var $ = require('../internals/export');
5
5
  var DESCRIPTORS = require('../internals/descriptors');
6
6
  var global = require('../internals/global');
7
+ var uncurryThis = require('../internals/function-uncurry-this');
7
8
  var hasOwn = require('../internals/has-own-property');
8
9
  var isCallable = require('../internals/is-callable');
9
- var isObject = require('../internals/is-object');
10
+ var isPrototypeOf = require('../internals/object-is-prototype-of');
11
+ var toString = require('../internals/to-string');
10
12
  var defineProperty = require('../internals/object-define-property').f;
11
13
  var copyConstructorProperties = require('../internals/copy-constructor-properties');
12
14
 
13
15
  var NativeSymbol = global.Symbol;
16
+ var SymbolPrototype = NativeSymbol && NativeSymbol.prototype;
14
17
 
15
- if (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in NativeSymbol.prototype) ||
18
+ if (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||
16
19
  // Safari 12 bug
17
20
  NativeSymbol().description !== undefined
18
21
  )) {
19
22
  var EmptyStringDescriptionStore = {};
20
23
  // wrap Symbol constructor for correct work with undefined description
21
24
  var SymbolWrapper = function Symbol() {
22
- var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]);
23
- var result = this instanceof SymbolWrapper
25
+ var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);
26
+ var result = isPrototypeOf(SymbolPrototype, this)
24
27
  ? new NativeSymbol(description)
25
28
  // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'
26
29
  : description === undefined ? NativeSymbol() : NativeSymbol(description);
27
30
  if (description === '') EmptyStringDescriptionStore[result] = true;
28
31
  return result;
29
32
  };
33
+
30
34
  copyConstructorProperties(SymbolWrapper, NativeSymbol);
31
- var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;
32
- symbolPrototype.constructor = SymbolWrapper;
35
+ SymbolWrapper.prototype = SymbolPrototype;
36
+ SymbolPrototype.constructor = SymbolWrapper;
33
37
 
34
- var symbolToString = symbolPrototype.toString;
35
- var nativeSymbol = String(NativeSymbol('test')) == 'Symbol(test)';
38
+ var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';
39
+ var symbolToString = uncurryThis(SymbolPrototype.toString);
40
+ var symbolValueOf = uncurryThis(SymbolPrototype.valueOf);
36
41
  var regexp = /^Symbol\((.*)\)[^)]+$/;
37
- defineProperty(symbolPrototype, 'description', {
42
+ var replace = uncurryThis(''.replace);
43
+ var stringSlice = uncurryThis(''.slice);
44
+
45
+ defineProperty(SymbolPrototype, 'description', {
38
46
  configurable: true,
39
47
  get: function description() {
40
- var symbol = isObject(this) ? this.valueOf() : this;
41
- var string = symbolToString.call(symbol);
48
+ var symbol = symbolValueOf(this);
49
+ var string = symbolToString(symbol);
42
50
  if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';
43
- var desc = nativeSymbol ? string.slice(7, -1) : string.replace(regexp, '$1');
51
+ var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');
44
52
  return desc === '' ? undefined : desc;
45
53
  }
46
54
  });