From cfaf23dee2511f3288c988a6b0314f0fa68d8995 Mon Sep 17 00:00:00 2001
From: Jonas Jenwald <jonas.jenwald@gmail.com>
Date: Fri, 22 Jan 2021 12:25:05 +0100
Subject: [PATCH] Simplify the `PDFFunctionFactory._localFunctionCache`
 initialization (PR 12034 follow-up)

By changing this a `shadow`ed getter, we can simply access it directly and not worry about it being initialized. I have no idea why I didn't just implement it this way in the first place.
---
 src/core/function.js | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/core/function.js b/src/core/function.js
index 7f2b8d1da..4dcee828e 100644
--- a/src/core/function.js
+++ b/src/core/function.js
@@ -20,6 +20,7 @@ import {
   info,
   isBool,
   IsEvalSupportedCached,
+  shadow,
   unreachable,
 } from "../shared/util.js";
 import { PostScriptLexer, PostScriptParser } from "./ps_parser.js";
@@ -29,7 +30,6 @@ class PDFFunctionFactory {
   constructor({ xref, isEvalSupported = true }) {
     this.xref = xref;
     this.isEvalSupported = isEvalSupported !== false;
-    this._localFunctionCache = null; // Initialized lazily.
   }
 
   create(fn) {
@@ -76,9 +76,6 @@ class PDFFunctionFactory {
       fnRef = cacheKey.dict && cacheKey.dict.objId;
     }
     if (fnRef) {
-      if (!this._localFunctionCache) {
-        this._localFunctionCache = new LocalFunctionCache();
-      }
       const localFunction = this._localFunctionCache.getByRef(fnRef);
       if (localFunction) {
         return localFunction;
@@ -105,12 +102,16 @@ class PDFFunctionFactory {
       fnRef = cacheKey.dict && cacheKey.dict.objId;
     }
     if (fnRef) {
-      if (!this._localFunctionCache) {
-        this._localFunctionCache = new LocalFunctionCache();
-      }
       this._localFunctionCache.set(/* name = */ null, fnRef, parsedFunction);
     }
   }
+
+  /**
+   * @private
+   */
+  get _localFunctionCache() {
+    return shadow(this, "_localFunctionCache", new LocalFunctionCache());
+  }
 }
 
 function toNumberArray(arr) {