From addb4cb12beedfd73e94eb484a25d2c448a7bcbd Mon Sep 17 00:00:00 2001
From: Jonas Jenwald <jonas.jenwald@gmail.com>
Date: Wed, 30 Mar 2022 15:38:07 +0200
Subject: [PATCH] Use `String.prototype.repeat()` in a couple of spots

Rather than using a temporary Array to manually create repeated strings, we can use `String.prototype.repeat()` instead.
The reason that we didn't use this from the start is most likely because some browsers, notably IE, didn't support this; note https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat#browser_compatibility
---
 src/core/catalog.js         | 6 +-----
 test/unit/evaluator_spec.js | 5 ++---
 test/unit/util_spec.js      | 5 ++---
 3 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/src/core/catalog.js b/src/core/catalog.js
index 74987fca4..13f54f75d 100644
--- a/src/core/catalog.js
+++ b/src/core/catalog.js
@@ -717,11 +717,7 @@ class Catalog {
           const character = String.fromCharCode(
             baseCharCode + (letterIndex % LIMIT)
           );
-          const charBuf = [];
-          for (let j = 0, jj = (letterIndex / LIMIT) | 0; j <= jj; j++) {
-            charBuf.push(character);
-          }
-          currentLabel = charBuf.join("");
+          currentLabel = character.repeat(Math.floor(letterIndex / LIMIT) + 1);
           break;
         default:
           if (style) {
diff --git a/test/unit/evaluator_spec.js b/test/unit/evaluator_spec.js
index 0b651e3a8..674827d6e 100644
--- a/test/unit/evaluator_spec.js
+++ b/test/unit/evaluator_spec.js
@@ -261,10 +261,9 @@ describe("evaluator", function () {
         "(bug 1443140)",
       async function () {
         const NUM_INVALID_OPS = 25;
-        const tempArr = new Array(NUM_INVALID_OPS + 1);
 
         // Non-path operators, should be ignored.
-        const invalidMoveText = tempArr.join("10 Td\n");
+        const invalidMoveText = "10 Td\n".repeat(NUM_INVALID_OPS);
         const moveTextStream = new StringStream(invalidMoveText);
         const result = await runOperatorListCheck(
           partialEvaluator,
@@ -275,7 +274,7 @@ describe("evaluator", function () {
         expect(result.fnArray).toEqual([]);
 
         // Path operators, should throw error.
-        const invalidLineTo = tempArr.join("20 l\n");
+        const invalidLineTo = "20 l\n".repeat(NUM_INVALID_OPS);
         const lineToStream = new StringStream(invalidLineTo);
 
         try {
diff --git a/test/unit/util_spec.js b/test/unit/util_spec.js
index 9ca4025ca..39874013e 100644
--- a/test/unit/util_spec.js
+++ b/test/unit/util_spec.js
@@ -49,9 +49,8 @@ describe("util", function () {
         bytes[i] = "a".charCodeAt(0);
       }
 
-      // Create a string with `length` 'a' characters. We need an array of size
-      // `length + 1` since `join` puts the argument between the array elements.
-      const string = Array(length + 1).join("a");
+      // Create a string with `length` 'a' characters.
+      const string = "a".repeat(length);
 
       expect(bytesToString(bytes)).toEqual(string);
     });