core-js 3.18.1 → 3.19.1

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 (361) hide show
  1. package/configurator.js +7 -3
  2. package/es/date/to-primitive.js +2 -3
  3. package/es/date/to-string.js +2 -4
  4. package/es/instance/at.js +6 -5
  5. package/es/instance/bind.js +3 -2
  6. package/es/instance/code-point-at.js +4 -3
  7. package/es/instance/concat.js +3 -2
  8. package/es/instance/copy-within.js +3 -2
  9. package/es/instance/ends-with.js +4 -3
  10. package/es/instance/entries.js +3 -2
  11. package/es/instance/every.js +3 -2
  12. package/es/instance/fill.js +3 -2
  13. package/es/instance/filter.js +3 -2
  14. package/es/instance/find-index.js +3 -2
  15. package/es/instance/find.js +3 -2
  16. package/es/instance/flags.js +2 -1
  17. package/es/instance/flat-map.js +3 -2
  18. package/es/instance/flat.js +3 -2
  19. package/es/instance/for-each.js +3 -2
  20. package/es/instance/includes.js +6 -5
  21. package/es/instance/index-of.js +3 -2
  22. package/es/instance/keys.js +3 -2
  23. package/es/instance/last-index-of.js +3 -2
  24. package/es/instance/map.js +3 -2
  25. package/es/instance/match-all.js +4 -3
  26. package/es/instance/pad-end.js +4 -3
  27. package/es/instance/pad-start.js +4 -3
  28. package/es/instance/reduce-right.js +3 -2
  29. package/es/instance/reduce.js +3 -2
  30. package/es/instance/repeat.js +4 -3
  31. package/es/instance/replace-all.js +4 -3
  32. package/es/instance/reverse.js +3 -2
  33. package/es/instance/slice.js +3 -2
  34. package/es/instance/some.js +3 -2
  35. package/es/instance/sort.js +3 -2
  36. package/es/instance/splice.js +3 -2
  37. package/es/instance/starts-with.js +4 -3
  38. package/es/instance/trim-end.js +4 -3
  39. package/es/instance/trim-left.js +4 -3
  40. package/es/instance/trim-right.js +4 -3
  41. package/es/instance/trim-start.js +4 -3
  42. package/es/instance/trim.js +4 -3
  43. package/es/instance/values.js +3 -2
  44. package/es/json/stringify.js +4 -3
  45. package/es/promise/all-settled.js +2 -1
  46. package/es/promise/any.js +2 -1
  47. package/es/regexp/flags.js +3 -4
  48. package/es/regexp/match.js +2 -1
  49. package/es/regexp/replace.js +2 -1
  50. package/es/regexp/search.js +2 -1
  51. package/es/regexp/split.js +2 -1
  52. package/es/regexp/test.js +2 -3
  53. package/es/regexp/to-string.js +2 -3
  54. package/es/string/iterator.js +2 -5
  55. package/features/instance/at.js +6 -5
  56. package/features/instance/code-points.js +4 -3
  57. package/features/instance/filter-out.js +3 -2
  58. package/features/instance/filter-reject.js +3 -2
  59. package/features/instance/find-last-index.js +3 -2
  60. package/features/instance/find-last.js +3 -2
  61. package/features/instance/group-by.js +3 -2
  62. package/features/instance/unique-by.js +3 -2
  63. package/features/map/from.js +3 -2
  64. package/features/map/group-by.js +2 -1
  65. package/features/map/key-by.js +2 -1
  66. package/features/map/of.js +3 -2
  67. package/features/promise/try.js +2 -1
  68. package/features/set/from.js +3 -2
  69. package/features/set/of.js +3 -2
  70. package/features/typed-array/methods.js +2 -0
  71. package/features/weak-map/from.js +3 -2
  72. package/features/weak-map/of.js +3 -2
  73. package/features/weak-set/from.js +3 -2
  74. package/features/weak-set/of.js +3 -2
  75. package/internals/a-callable.js +3 -0
  76. package/internals/a-constructor.js +3 -0
  77. package/internals/a-possible-prototype.js +5 -1
  78. package/internals/an-instance.js +8 -3
  79. package/internals/an-object.js +4 -0
  80. package/internals/array-buffer-native.js +1 -1
  81. package/internals/array-buffer-non-extensible.js +10 -0
  82. package/internals/array-buffer-view-core.js +11 -10
  83. package/internals/array-buffer.js +31 -18
  84. package/internals/array-copy-within.js +2 -2
  85. package/internals/array-fill.js +2 -2
  86. package/internals/array-from-async.js +14 -9
  87. package/internals/array-from.js +8 -4
  88. package/internals/array-group-by.js +8 -5
  89. package/internals/array-includes.js +2 -2
  90. package/internals/array-iteration-from-last.js +3 -3
  91. package/internals/array-iteration.js +7 -6
  92. package/internals/array-last-index-of.js +6 -5
  93. package/internals/array-reduce.js +5 -2
  94. package/internals/array-slice.js +3 -0
  95. package/internals/array-sort.js +10 -11
  96. package/internals/array-species-constructor.js +2 -0
  97. package/internals/array-unique-by.js +15 -11
  98. package/internals/async-from-sync-iterator.js +4 -3
  99. package/internals/async-iterator-create-proxy.js +4 -3
  100. package/internals/async-iterator-iteration.js +5 -2
  101. package/internals/classof-raw.js +5 -2
  102. package/internals/classof.js +3 -0
  103. package/internals/clear-error-stack.js +20 -0
  104. package/internals/collection-add-all.js +3 -2
  105. package/internals/collection-delete-all.js +3 -2
  106. package/internals/collection-from.js +7 -4
  107. package/internals/collection-of.js +3 -4
  108. package/internals/collection-strong.js +11 -9
  109. package/internals/collection-weak.js +13 -9
  110. package/internals/collection.js +8 -7
  111. package/internals/composite-key.js +9 -2
  112. package/internals/copy-constructor-properties.js +2 -2
  113. package/internals/create-html.js +3 -1
  114. package/internals/date-to-iso-string.js +23 -13
  115. package/internals/date-to-primitive.js +3 -0
  116. package/internals/define-iterator.js +2 -1
  117. package/internals/define-well-known-symbol.js +2 -2
  118. package/internals/engine-v8-version.js +10 -4
  119. package/internals/entry-unbind.js +3 -5
  120. package/internals/error-stack-installable.js +10 -0
  121. package/internals/export.js +1 -1
  122. package/internals/fix-regexp-well-known-symbol-logic.js +5 -3
  123. package/internals/flatten-into-array.js +8 -4
  124. package/internals/function-apply.js +9 -0
  125. package/internals/function-bind-context.js +5 -17
  126. package/internals/function-bind.js +15 -9
  127. package/internals/function-call.js +5 -0
  128. package/internals/function-name.js +2 -2
  129. package/internals/function-uncurry-this.js +12 -0
  130. package/internals/get-async-iterator.js +2 -1
  131. package/internals/get-iterator.js +7 -2
  132. package/internals/get-map-iterator.js +3 -1
  133. package/internals/get-set-iterator.js +3 -1
  134. package/internals/get-substitution.js +10 -7
  135. package/internals/has-own-property.js +10 -0
  136. package/internals/host-report-errors.js +1 -1
  137. package/internals/ieee754.js +4 -1
  138. package/internals/indexed-object.js +5 -2
  139. package/internals/inspect-source.js +3 -2
  140. package/internals/install-error-cause.js +1 -1
  141. package/internals/internal-metadata.js +8 -11
  142. package/internals/internal-state.js +13 -11
  143. package/internals/is-callable.js +1 -1
  144. package/internals/is-constructor.js +6 -4
  145. package/internals/is-data-descriptor.js +2 -2
  146. package/internals/is-integral-number.js +10 -0
  147. package/internals/is-iterable.js +4 -2
  148. package/internals/is-object.js +1 -1
  149. package/internals/is-symbol.js +6 -2
  150. package/internals/iterate.js +16 -8
  151. package/internals/iterator-close.js +2 -1
  152. package/internals/iterator-create-proxy.js +4 -3
  153. package/internals/length-of-array-like.js +7 -0
  154. package/internals/map-emplace.js +8 -3
  155. package/internals/map-upsert.js +12 -4
  156. package/internals/math-scale.js +9 -12
  157. package/internals/microtask.js +6 -4
  158. package/internals/normalize-string-argument.js +5 -0
  159. package/internals/not-a-regexp.js +3 -0
  160. package/internals/number-parse-float.js +8 -6
  161. package/internals/number-parse-int.js +4 -2
  162. package/internals/numeric-range-iterator.js +4 -0
  163. package/internals/object-assign.js +5 -2
  164. package/internals/object-define-properties.js +3 -1
  165. package/internals/object-define-property.js +2 -0
  166. package/internals/object-get-own-property-descriptor.js +3 -2
  167. package/internals/object-get-own-property-names-external.js +4 -4
  168. package/internals/object-get-prototype-of.js +4 -3
  169. package/internals/object-is-extensible.js +16 -0
  170. package/internals/object-is-prototype-of.js +3 -0
  171. package/internals/object-iterator.js +2 -2
  172. package/internals/object-keys-internal.js +7 -4
  173. package/internals/object-set-prototype-of.js +4 -3
  174. package/internals/object-to-array.js +7 -3
  175. package/internals/ordinary-to-primitive.js +7 -3
  176. package/internals/own-keys.js +4 -1
  177. package/internals/redefine.js +2 -2
  178. package/internals/reflect-metadata.js +9 -3
  179. package/internals/regexp-exec-abstract.js +6 -2
  180. package/internals/regexp-exec.js +19 -14
  181. package/internals/require-object-coercible.js +4 -0
  182. package/internals/set-global.js +4 -2
  183. package/internals/set-to-string-tag.js +2 -2
  184. package/internals/shared.js +1 -1
  185. package/internals/string-multibyte.js +15 -7
  186. package/internals/string-pad.js +7 -4
  187. package/internals/string-punycode-to-ascii.js +26 -14
  188. package/internals/string-repeat.js +5 -2
  189. package/internals/string-trim.js +4 -2
  190. package/internals/task.js +11 -11
  191. package/internals/this-number-value.js +2 -4
  192. package/internals/to-absolute-index.js +2 -2
  193. package/internals/to-index.js +5 -2
  194. package/internals/to-integer-or-infinity.js +10 -0
  195. package/internals/to-length.js +2 -2
  196. package/internals/to-object.js +3 -0
  197. package/internals/to-offset.js +3 -0
  198. package/internals/to-positive-integer.js +5 -2
  199. package/internals/to-primitive.js +4 -1
  200. package/internals/to-property-key.js +1 -1
  201. package/internals/to-string.js +3 -0
  202. package/internals/try-to-string.js +4 -0
  203. package/internals/typed-array-constructor.js +18 -14
  204. package/internals/typed-array-from.js +6 -5
  205. package/internals/uid.js +4 -1
  206. package/internals/well-known-symbol.js +8 -4
  207. package/modules/es.aggregate-error.js +29 -12
  208. package/modules/es.array-buffer.slice.js +8 -4
  209. package/modules/es.array.at.js +4 -4
  210. package/modules/es.array.concat.js +4 -2
  211. package/modules/es.array.flat-map.js +2 -2
  212. package/modules/es.array.flat.js +4 -4
  213. package/modules/es.array.index-of.js +7 -5
  214. package/modules/es.array.join.js +3 -2
  215. package/modules/es.array.of.js +3 -1
  216. package/modules/es.array.reduce.js +2 -1
  217. package/modules/es.array.reverse.js +3 -2
  218. package/modules/es.array.slice.js +6 -4
  219. package/modules/es.array.sort.js +9 -6
  220. package/modules/es.array.splice.js +6 -4
  221. package/modules/es.date.get-year.js +3 -2
  222. package/modules/es.date.now.js +6 -1
  223. package/modules/es.date.set-year.js +8 -6
  224. package/modules/es.date.to-primitive.js +2 -1
  225. package/modules/es.date.to-string.js +5 -4
  226. package/modules/es.escape.js +12 -5
  227. package/modules/es.function.has-instance.js +3 -2
  228. package/modules/es.function.name.js +4 -2
  229. package/modules/es.json.stringify.js +18 -7
  230. package/modules/es.map.js +1 -1
  231. package/modules/es.number.constructor.js +25 -19
  232. package/modules/es.number.is-integer.js +2 -2
  233. package/modules/es.number.is-safe-integer.js +2 -2
  234. package/modules/es.number.to-fixed.js +21 -15
  235. package/modules/es.number.to-precision.js +6 -5
  236. package/modules/es.object.has-own.js +1 -1
  237. package/modules/es.object.is-extensible.js +4 -10
  238. package/modules/es.object.is-frozen.js +6 -2
  239. package/modules/es.object.is-sealed.js +6 -2
  240. package/modules/es.promise.all-settled.js +2 -2
  241. package/modules/es.promise.any.js +5 -4
  242. package/modules/es.promise.js +22 -18
  243. package/modules/es.reflect.apply.js +4 -10
  244. package/modules/es.reflect.construct.js +10 -5
  245. package/modules/es.reflect.get.js +2 -1
  246. package/modules/es.reflect.is-extensible.js +2 -4
  247. package/modules/es.reflect.set.js +2 -1
  248. package/modules/es.regexp.constructor.js +25 -16
  249. package/modules/es.regexp.dot-all.js +5 -1
  250. package/modules/es.regexp.flags.js +4 -2
  251. package/modules/es.regexp.sticky.js +5 -1
  252. package/modules/es.regexp.test.js +7 -3
  253. package/modules/es.regexp.to-string.js +8 -5
  254. package/modules/es.set.js +1 -1
  255. package/modules/es.string.at-alternative.js +7 -5
  256. package/modules/es.string.ends-with.js +7 -5
  257. package/modules/es.string.from-code-point.js +7 -4
  258. package/modules/es.string.includes.js +8 -2
  259. package/modules/es.string.match-all.js +25 -19
  260. package/modules/es.string.match.js +2 -1
  261. package/modules/es.string.raw.js +9 -8
  262. package/modules/es.string.replace-all.js +19 -13
  263. package/modules/es.string.replace.js +21 -14
  264. package/modules/es.string.search.js +2 -1
  265. package/modules/es.string.split.js +23 -16
  266. package/modules/es.string.starts-with.js +6 -4
  267. package/modules/es.string.substr.js +6 -5
  268. package/modules/es.symbol.description.js +22 -14
  269. package/modules/es.symbol.js +47 -33
  270. package/modules/es.typed-array.at.js +4 -4
  271. package/modules/es.typed-array.copy-within.js +4 -2
  272. package/modules/es.typed-array.fill.js +9 -2
  273. package/modules/es.typed-array.iterator.js +7 -6
  274. package/modules/es.typed-array.join.js +3 -3
  275. package/modules/es.typed-array.last-index-of.js +3 -2
  276. package/modules/es.typed-array.reduce-right.js +2 -1
  277. package/modules/es.typed-array.reduce.js +2 -1
  278. package/modules/es.typed-array.set.js +4 -2
  279. package/modules/es.typed-array.slice.js +2 -2
  280. package/modules/es.typed-array.sort.js +13 -28
  281. package/modules/es.typed-array.to-locale-string.js +7 -2
  282. package/modules/es.typed-array.to-string.js +3 -2
  283. package/modules/es.unescape.js +14 -9
  284. package/modules/es.weak-map.js +15 -15
  285. package/modules/esnext.array.is-template-object.js +1 -1
  286. package/modules/esnext.array.last-index.js +2 -2
  287. package/modules/esnext.array.last-item.js +3 -3
  288. package/modules/esnext.async-iterator.as-indexed-pairs.js +2 -1
  289. package/modules/esnext.async-iterator.constructor.js +4 -4
  290. package/modules/esnext.async-iterator.drop.js +2 -1
  291. package/modules/esnext.async-iterator.filter.js +2 -1
  292. package/modules/esnext.async-iterator.flat-map.js +3 -2
  293. package/modules/esnext.async-iterator.from.js +4 -4
  294. package/modules/esnext.async-iterator.map.js +2 -1
  295. package/modules/esnext.async-iterator.reduce.js +4 -1
  296. package/modules/esnext.async-iterator.take.js +4 -2
  297. package/modules/esnext.composite-key.js +5 -1
  298. package/modules/esnext.composite-symbol.js +3 -2
  299. package/modules/esnext.iterator.as-indexed-pairs.js +2 -1
  300. package/modules/esnext.iterator.constructor.js +4 -4
  301. package/modules/esnext.iterator.drop.js +4 -2
  302. package/modules/esnext.iterator.filter.js +2 -1
  303. package/modules/esnext.iterator.flat-map.js +7 -3
  304. package/modules/esnext.iterator.from.js +4 -4
  305. package/modules/esnext.iterator.map.js +2 -1
  306. package/modules/esnext.iterator.reduce.js +3 -0
  307. package/modules/esnext.iterator.take.js +2 -1
  308. package/modules/esnext.map.delete-all.js +2 -4
  309. package/modules/esnext.map.emplace.js +2 -2
  310. package/modules/esnext.map.every.js +1 -1
  311. package/modules/esnext.map.filter.js +5 -4
  312. package/modules/esnext.map.find-key.js +1 -1
  313. package/modules/esnext.map.find.js +1 -1
  314. package/modules/esnext.map.group-by.js +6 -2
  315. package/modules/esnext.map.includes.js +1 -1
  316. package/modules/esnext.map.key-by.js +2 -1
  317. package/modules/esnext.map.map-keys.js +5 -4
  318. package/modules/esnext.map.map-values.js +5 -4
  319. package/modules/esnext.map.reduce.js +3 -0
  320. package/modules/esnext.map.some.js +1 -1
  321. package/modules/esnext.map.update-or-insert.js +2 -2
  322. package/modules/esnext.map.update.js +11 -4
  323. package/modules/esnext.map.upsert.js +2 -2
  324. package/modules/esnext.math.seeded-prng.js +3 -1
  325. package/modules/esnext.number.from-string.js +14 -5
  326. package/modules/esnext.observable.js +14 -9
  327. package/modules/esnext.reflect.get-metadata-keys.js +5 -10
  328. package/modules/esnext.set.add-all.js +2 -4
  329. package/modules/esnext.set.delete-all.js +2 -4
  330. package/modules/esnext.set.difference.js +3 -2
  331. package/modules/esnext.set.every.js +1 -1
  332. package/modules/esnext.set.filter.js +4 -3
  333. package/modules/esnext.set.find.js +1 -1
  334. package/modules/esnext.set.intersection.js +3 -2
  335. package/modules/esnext.set.is-disjoint-from.js +3 -2
  336. package/modules/esnext.set.is-subset-of.js +3 -2
  337. package/modules/esnext.set.is-superset-of.js +3 -2
  338. package/modules/esnext.set.join.js +9 -4
  339. package/modules/esnext.set.map.js +5 -4
  340. package/modules/esnext.set.reduce.js +3 -0
  341. package/modules/esnext.set.some.js +1 -1
  342. package/modules/esnext.set.symmetric-difference.js +3 -2
  343. package/modules/esnext.typed-array.from-async.js +9 -3
  344. package/modules/esnext.typed-array.unique-by.js +4 -2
  345. package/modules/esnext.weak-map.delete-all.js +2 -4
  346. package/modules/esnext.weak-map.emplace.js +2 -2
  347. package/modules/esnext.weak-map.upsert.js +2 -2
  348. package/modules/esnext.weak-set.add-all.js +2 -4
  349. package/modules/esnext.weak-set.delete-all.js +2 -4
  350. package/modules/web.timers.js +5 -4
  351. package/modules/web.url-search-params.js +63 -54
  352. package/modules/web.url.js +110 -96
  353. package/modules/web.url.to-json.js +2 -1
  354. package/package.json +2 -2
  355. package/stable/instance/entries.js +6 -4
  356. package/stable/instance/for-each.js +6 -4
  357. package/stable/instance/keys.js +6 -4
  358. package/stable/instance/values.js +6 -4
  359. package/internals/has.js +0 -7
  360. package/internals/is-integer.js +0 -9
  361. package/internals/to-integer.js +0 -8
@@ -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,9 +1,12 @@
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');
5
8
  var isCallable = require('../internals/is-callable');
6
- var toInteger = require('../internals/to-integer');
9
+ var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');
7
10
  var toLength = require('../internals/to-length');
8
11
  var toString = require('../internals/to-string');
9
12
  var requireObjectCoercible = require('../internals/require-object-coercible');
@@ -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]);
@@ -102,28 +109,28 @@ fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNa
102
109
  result = results[i];
103
110
 
104
111
  var matched = toString(result[0]);
105
- var position = max(min(toInteger(result.index), S.length), 0);
112
+ var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);
106
113
  var captures = [];
107
114
  // NOTE: This is equivalent to
108
115
  // captures = result.slice(1).map(maybeToString)
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');
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
- var toInteger = require('../internals/to-integer');
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
 
@@ -17,13 +18,13 @@ $({ target: 'String', proto: true, forced: FORCED }, {
17
18
  substr: function substr(start, length) {
18
19
  var that = toString(requireObjectCoercible(this));
19
20
  var size = that.length;
20
- var intStart = toInteger(start);
21
+ var intStart = toIntegerOrInfinity(start);
21
22
  var intLength, intEnd;
22
23
  if (intStart === Infinity) intStart = 0;
23
24
  if (intStart < 0) intStart = max(size + intStart, 0);
24
- intLength = length === undefined ? size : toInteger(length);
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 has = require('../internals/has');
7
+ var uncurryThis = require('../internals/function-uncurry-this');
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);
42
- if (has(EmptyStringDescriptionStore, symbol)) return '';
43
- var desc = nativeSymbol ? string.slice(7, -1) : string.replace(regexp, '$1');
48
+ var symbol = symbolValueOf(this);
49
+ var string = symbolToString(symbol);
50
+ if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';
51
+ var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');
44
52
  return desc === '' ? undefined : desc;
45
53
  }
46
54
  });
@@ -2,14 +2,18 @@
2
2
  var $ = require('../internals/export');
3
3
  var global = require('../internals/global');
4
4
  var getBuiltIn = require('../internals/get-built-in');
5
+ var apply = require('../internals/function-apply');
6
+ var call = require('../internals/function-call');
7
+ var uncurryThis = require('../internals/function-uncurry-this');
5
8
  var IS_PURE = require('../internals/is-pure');
6
9
  var DESCRIPTORS = require('../internals/descriptors');
7
10
  var NATIVE_SYMBOL = require('../internals/native-symbol');
8
11
  var fails = require('../internals/fails');
9
- var has = require('../internals/has');
12
+ var hasOwn = require('../internals/has-own-property');
10
13
  var isArray = require('../internals/is-array');
11
14
  var isCallable = require('../internals/is-callable');
12
15
  var isObject = require('../internals/is-object');
16
+ var isPrototypeOf = require('../internals/object-is-prototype-of');
13
17
  var isSymbol = require('../internals/is-symbol');
14
18
  var anObject = require('../internals/an-object');
15
19
  var toObject = require('../internals/to-object');
@@ -25,6 +29,7 @@ var getOwnPropertySymbolsModule = require('../internals/object-get-own-property-
25
29
  var getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');
26
30
  var definePropertyModule = require('../internals/object-define-property');
27
31
  var propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');
32
+ var arraySlice = require('../internals/array-slice');
28
33
  var redefine = require('../internals/redefine');
29
34
  var shared = require('../internals/shared');
30
35
  var sharedKey = require('../internals/shared-key');
@@ -41,21 +46,28 @@ var HIDDEN = sharedKey('hidden');
41
46
  var SYMBOL = 'Symbol';
42
47
  var PROTOTYPE = 'prototype';
43
48
  var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');
49
+
44
50
  var setInternalState = InternalStateModule.set;
45
51
  var getInternalState = InternalStateModule.getterFor(SYMBOL);
52
+
46
53
  var ObjectPrototype = Object[PROTOTYPE];
47
54
  var $Symbol = global.Symbol;
55
+ var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];
56
+ var TypeError = global.TypeError;
57
+ var QObject = global.QObject;
48
58
  var $stringify = getBuiltIn('JSON', 'stringify');
49
59
  var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
50
60
  var nativeDefineProperty = definePropertyModule.f;
51
61
  var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
52
62
  var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
63
+ var push = uncurryThis([].push);
64
+
53
65
  var AllSymbols = shared('symbols');
54
66
  var ObjectPrototypeSymbols = shared('op-symbols');
55
67
  var StringToSymbolRegistry = shared('string-to-symbol-registry');
56
68
  var SymbolToStringRegistry = shared('symbol-to-string-registry');
57
69
  var WellKnownSymbolsStore = shared('wks');
58
- var QObject = global.QObject;
70
+
59
71
  // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
60
72
  var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
61
73
 
@@ -74,7 +86,7 @@ var setSymbolDescriptor = DESCRIPTORS && fails(function () {
74
86
  } : nativeDefineProperty;
75
87
 
76
88
  var wrap = function (tag, description) {
77
- var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);
89
+ var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);
78
90
  setInternalState(symbol, {
79
91
  type: SYMBOL,
80
92
  tag: tag,
@@ -89,12 +101,12 @@ var $defineProperty = function defineProperty(O, P, Attributes) {
89
101
  anObject(O);
90
102
  var key = toPropertyKey(P);
91
103
  anObject(Attributes);
92
- if (has(AllSymbols, key)) {
104
+ if (hasOwn(AllSymbols, key)) {
93
105
  if (!Attributes.enumerable) {
94
- if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));
106
+ if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));
95
107
  O[HIDDEN][key] = true;
96
108
  } else {
97
- if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
109
+ if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
98
110
  Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
99
111
  } return setSymbolDescriptor(O, key, Attributes);
100
112
  } return nativeDefineProperty(O, key, Attributes);
@@ -105,7 +117,7 @@ var $defineProperties = function defineProperties(O, Properties) {
105
117
  var properties = toIndexedObject(Properties);
106
118
  var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));
107
119
  $forEach(keys, function (key) {
108
- if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);
120
+ if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);
109
121
  });
110
122
  return O;
111
123
  };
@@ -116,17 +128,18 @@ var $create = function create(O, Properties) {
116
128
 
117
129
  var $propertyIsEnumerable = function propertyIsEnumerable(V) {
118
130
  var P = toPropertyKey(V);
119
- var enumerable = nativePropertyIsEnumerable.call(this, P);
120
- if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;
121
- return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;
131
+ var enumerable = call(nativePropertyIsEnumerable, this, P);
132
+ if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;
133
+ return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]
134
+ ? enumerable : true;
122
135
  };
123
136
 
124
137
  var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
125
138
  var it = toIndexedObject(O);
126
139
  var key = toPropertyKey(P);
127
- if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;
140
+ if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;
128
141
  var descriptor = nativeGetOwnPropertyDescriptor(it, key);
129
- if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {
142
+ if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {
130
143
  descriptor.enumerable = true;
131
144
  }
132
145
  return descriptor;
@@ -136,7 +149,7 @@ var $getOwnPropertyNames = function getOwnPropertyNames(O) {
136
149
  var names = nativeGetOwnPropertyNames(toIndexedObject(O));
137
150
  var result = [];
138
151
  $forEach(names, function (key) {
139
- if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);
152
+ if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);
140
153
  });
141
154
  return result;
142
155
  };
@@ -146,8 +159,8 @@ var $getOwnPropertySymbols = function getOwnPropertySymbols(O) {
146
159
  var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));
147
160
  var result = [];
148
161
  $forEach(names, function (key) {
149
- if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {
150
- result.push(AllSymbols[key]);
162
+ if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {
163
+ push(result, AllSymbols[key]);
151
164
  }
152
165
  });
153
166
  return result;
@@ -157,19 +170,21 @@ var $getOwnPropertySymbols = function getOwnPropertySymbols(O) {
157
170
  // https://tc39.es/ecma262/#sec-symbol-constructor
158
171
  if (!NATIVE_SYMBOL) {
159
172
  $Symbol = function Symbol() {
160
- if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');
173
+ if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');
161
174
  var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);
162
175
  var tag = uid(description);
163
176
  var setter = function (value) {
164
- if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);
165
- if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
177
+ if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);
178
+ if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
166
179
  setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));
167
180
  };
168
181
  if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
169
182
  return wrap(tag, description);
170
183
  };
171
184
 
172
- redefine($Symbol[PROTOTYPE], 'toString', function toString() {
185
+ SymbolPrototype = $Symbol[PROTOTYPE];
186
+
187
+ redefine(SymbolPrototype, 'toString', function toString() {
173
188
  return getInternalState(this).tag;
174
189
  });
175
190
 
@@ -189,7 +204,7 @@ if (!NATIVE_SYMBOL) {
189
204
 
190
205
  if (DESCRIPTORS) {
191
206
  // https://github.com/tc39/proposal-Symbol-description
192
- nativeDefineProperty($Symbol[PROTOTYPE], 'description', {
207
+ nativeDefineProperty(SymbolPrototype, 'description', {
193
208
  configurable: true,
194
209
  get: function description() {
195
210
  return getInternalState(this).description;
@@ -214,7 +229,7 @@ $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
214
229
  // https://tc39.es/ecma262/#sec-symbol.for
215
230
  'for': function (key) {
216
231
  var string = $toString(key);
217
- if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
232
+ if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
218
233
  var symbol = $Symbol(string);
219
234
  StringToSymbolRegistry[string] = symbol;
220
235
  SymbolToStringRegistry[symbol] = string;
@@ -224,7 +239,7 @@ $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
224
239
  // https://tc39.es/ecma262/#sec-symbol.keyfor
225
240
  keyFor: function keyFor(sym) {
226
241
  if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');
227
- if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
242
+ if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
228
243
  },
229
244
  useSetter: function () { USE_SETTER = true; },
230
245
  useSimple: function () { USE_SETTER = false; }
@@ -278,28 +293,27 @@ if ($stringify) {
278
293
  $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {
279
294
  // eslint-disable-next-line no-unused-vars -- required for `.length`
280
295
  stringify: function stringify(it, replacer, space) {
281
- var args = [it];
282
- var index = 1;
283
- var $replacer;
284
- while (arguments.length > index) args.push(arguments[index++]);
285
- $replacer = replacer;
296
+ var args = arraySlice(arguments);
297
+ var $replacer = replacer;
286
298
  if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
287
299
  if (!isArray(replacer)) replacer = function (key, value) {
288
- if (isCallable($replacer)) value = $replacer.call(this, key, value);
300
+ if (isCallable($replacer)) value = call($replacer, this, key, value);
289
301
  if (!isSymbol(value)) return value;
290
302
  };
291
303
  args[1] = replacer;
292
- return $stringify.apply(null, args);
304
+ return apply($stringify, null, args);
293
305
  }
294
306
  });
295
307
  }
296
308
 
297
309
  // `Symbol.prototype[@@toPrimitive]` method
298
310
  // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
299
- if (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {
300
- var valueOf = $Symbol[PROTOTYPE].valueOf;
301
- redefine($Symbol[PROTOTYPE], TO_PRIMITIVE, function () {
302
- return valueOf.apply(this, arguments);
311
+ if (!SymbolPrototype[TO_PRIMITIVE]) {
312
+ var valueOf = SymbolPrototype.valueOf;
313
+ // eslint-disable-next-line no-unused-vars -- required for .length
314
+ redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {
315
+ // TODO: improve hint logic
316
+ return call(valueOf, this);
303
317
  });
304
318
  }
305
319
  // `Symbol.prototype[@@toStringTag]` property